592 lines
16 KiB
C
592 lines
16 KiB
C
/*++
|
||
|
||
Copyright (c) 1997 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
config.c
|
||
|
||
Abstract:
|
||
|
||
TAPI Service Provider functions related to tsp config.
|
||
|
||
TSPI_providerConfig
|
||
|
||
TUISPI_providerConfig
|
||
|
||
Environment:
|
||
|
||
User Mode - Win32
|
||
|
||
--*/
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Include files //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
#ifndef UNICODE
|
||
#define UNICODE // make this a UNICODE module...
|
||
#endif
|
||
|
||
#ifndef _UNICODE
|
||
#define _UNICODE // make this a UNICODE module...
|
||
#endif
|
||
|
||
#include "globals.h"
|
||
#include "provider.h"
|
||
#include "callback.h"
|
||
#include "registry.h"
|
||
#include "termcaps.h"
|
||
#include "version.h"
|
||
#include "line.h"
|
||
#include "config.h"
|
||
#include <tchar.h>
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Public procedures //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
INT_PTR
|
||
CALLBACK
|
||
ProviderConfigDlgProc(
|
||
HWND hDlg,
|
||
UINT uMsg,
|
||
WPARAM wParam,
|
||
LPARAM lParam
|
||
)
|
||
{
|
||
HKEY hKey;
|
||
LONG lStatus;
|
||
DWORD dwValue;
|
||
DWORD dwValueSize;
|
||
DWORD dwValueType;
|
||
LPTSTR pszValue;
|
||
TCHAR szAddr[H323_MAXDESTNAMELEN];
|
||
|
||
static const DWORD IDD_GATEWAY_HelpIDs[]=
|
||
{
|
||
IDC_GATEWAY_GROUP, IDH_H323SP_USE_GATEWAY, // group
|
||
IDC_USEGATEWAY, IDH_H323SP_USE_GATEWAY, // checkbox
|
||
IDC_H323_GATEWAY, IDH_H323SP_USE_GATEWAY_COMPUTER, // edit box
|
||
IDC_PROXY_GROUP, IDH_H323SP_USE_PROXY, // group
|
||
IDC_USEPROXY, IDH_H323SP_USE_PROXY, // checkbox
|
||
IDC_H323_PROXY, IDH_H323SP_USE_PROXY_COMPUTER, // edit box
|
||
IDC_STATIC, IDH_NOHELP, // graphic(s)
|
||
0, 0
|
||
};
|
||
|
||
// decode
|
||
switch (uMsg) {
|
||
|
||
case WM_HELP:
|
||
|
||
// F1 key or the "?" button is pressed
|
||
(void) WinHelp(
|
||
((LPHELPINFO) lParam)->hItemHandle,
|
||
H323SP_HELP_FILE,
|
||
HELP_WM_HELP,
|
||
(DWORD_PTR) (LPVOID)IDD_GATEWAY_HelpIDs
|
||
);
|
||
|
||
break;
|
||
|
||
case WM_CONTEXTMENU:
|
||
|
||
// Right-mouse click on a dialog control
|
||
(void) WinHelp(
|
||
(HWND) wParam,
|
||
H323SP_HELP_FILE,
|
||
HELP_CONTEXTMENU,
|
||
(DWORD_PTR) (LPVOID) IDD_GATEWAY_HelpIDs
|
||
);
|
||
|
||
break;
|
||
|
||
case WM_INITDIALOG:
|
||
|
||
// open registry subkey
|
||
lStatus = RegOpenKeyEx(
|
||
HKEY_LOCAL_MACHINE,
|
||
H323_REGKEY_ROOT,
|
||
0,
|
||
KEY_READ,
|
||
&hKey
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
TCHAR szErrorMsg[256];
|
||
|
||
H323DBG((
|
||
DEBUG_LEVEL_WARNING,
|
||
"error 0x%08lx opening tsp registry key.\n",
|
||
lStatus
|
||
));
|
||
|
||
// load error string
|
||
LoadString(g_hInstance,
|
||
IDS_REGOPENKEY,
|
||
szErrorMsg,
|
||
sizeof(szErrorMsg)
|
||
);
|
||
|
||
// pop up error dialog
|
||
MessageBox(hDlg,szErrorMsg,NULL,MB_OK);
|
||
|
||
// stop dialog
|
||
EndDialog(hDlg, 0);
|
||
|
||
break;
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_GATEWAYADDR;
|
||
|
||
// initialize type
|
||
dwValueType = REG_SZ;
|
||
dwValueSize = sizeof(szAddr);
|
||
|
||
// query for registry value
|
||
lStatus = RegQueryValueEx(
|
||
hKey,
|
||
pszValue,
|
||
NULL,
|
||
&dwValueType,
|
||
(LPBYTE)szAddr,
|
||
&dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus == ERROR_SUCCESS) {
|
||
|
||
// display gateway address
|
||
SetDlgItemText(hDlg,IDC_H323_GATEWAY,szAddr);
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_GATEWAYENABLED;
|
||
|
||
// initialize type
|
||
dwValueType = REG_DWORD;
|
||
dwValueSize = sizeof(DWORD);
|
||
|
||
// query for registry value
|
||
lStatus = RegQueryValueEx(
|
||
hKey,
|
||
pszValue,
|
||
NULL,
|
||
&dwValueType,
|
||
(LPBYTE)&dwValue,
|
||
&dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
// default
|
||
dwValue = 0;
|
||
}
|
||
|
||
// enable check box
|
||
SendDlgItemMessage(
|
||
hDlg,
|
||
IDC_USEGATEWAY,
|
||
BM_SETCHECK,
|
||
(dwValue != 0),
|
||
0
|
||
);
|
||
|
||
// display string
|
||
EnableWindow(
|
||
GetDlgItem(hDlg,IDC_H323_GATEWAY),
|
||
(dwValue != 0)
|
||
);
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_PROXYADDR;
|
||
|
||
// initialize type
|
||
dwValueType = REG_SZ;
|
||
dwValueSize = sizeof(szAddr);
|
||
|
||
// query for registry value
|
||
lStatus = RegQueryValueEx(
|
||
hKey,
|
||
pszValue,
|
||
NULL,
|
||
&dwValueType,
|
||
(LPBYTE)szAddr,
|
||
&dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus == ERROR_SUCCESS) {
|
||
|
||
// display gateway address
|
||
SetDlgItemText(hDlg,IDC_H323_PROXY,szAddr);
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_PROXYENABLED;
|
||
|
||
// initialize type
|
||
dwValueType = REG_DWORD;
|
||
dwValueSize = sizeof(DWORD);
|
||
|
||
// query for registry value
|
||
lStatus = RegQueryValueEx(
|
||
hKey,
|
||
pszValue,
|
||
NULL,
|
||
&dwValueType,
|
||
(LPBYTE)&dwValue,
|
||
&dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
// default
|
||
dwValue = 0;
|
||
}
|
||
|
||
// enable check box
|
||
SendDlgItemMessage(
|
||
hDlg,
|
||
IDC_USEPROXY,
|
||
BM_SETCHECK,
|
||
(dwValue != 0),
|
||
0
|
||
);
|
||
|
||
// display string
|
||
EnableWindow(
|
||
GetDlgItem(hDlg,IDC_H323_PROXY),
|
||
(dwValue != 0)
|
||
);
|
||
|
||
// close registry
|
||
RegCloseKey(hKey);
|
||
|
||
break;
|
||
|
||
case WM_COMMAND:
|
||
|
||
// decode command
|
||
switch (LOWORD(wParam)) {
|
||
|
||
case IDOK:
|
||
|
||
// open registry subkey
|
||
lStatus = RegOpenKeyEx(
|
||
HKEY_LOCAL_MACHINE,
|
||
H323_REGKEY_ROOT,
|
||
0,
|
||
KEY_WRITE,
|
||
&hKey
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
TCHAR szErrorMsg[256];
|
||
|
||
H323DBG((
|
||
DEBUG_LEVEL_WARNING,
|
||
"error 0x%08lx opening tsp registry key.\n",
|
||
lStatus
|
||
));
|
||
|
||
// load error string
|
||
LoadString(g_hInstance,
|
||
IDS_REGOPENKEY,
|
||
szErrorMsg,
|
||
sizeof(szErrorMsg)
|
||
);
|
||
|
||
// pop up error dialog
|
||
MessageBox(hDlg,szErrorMsg,NULL,MB_OK);
|
||
|
||
// stop dialog
|
||
EndDialog(hDlg, 0);
|
||
|
||
break;
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_GATEWAYADDR;
|
||
|
||
// retrieve gateway address from dialog
|
||
GetDlgItemText(hDlg,IDC_H323_GATEWAY,szAddr,sizeof(szAddr));
|
||
|
||
// initialize type
|
||
dwValueType = REG_SZ;
|
||
dwValueSize = (_tcslen(szAddr) + 1) * sizeof(TCHAR);
|
||
|
||
// query for registry value
|
||
lStatus = RegSetValueEx(
|
||
hKey,
|
||
pszValue,
|
||
0,
|
||
dwValueType,
|
||
(LPBYTE)szAddr,
|
||
dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
H323DBG((
|
||
DEBUG_LEVEL_ERROR,
|
||
"error 0x%08lx writing gateway address\n",
|
||
lStatus
|
||
));
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_GATEWAYENABLED;
|
||
|
||
// initialize type
|
||
dwValueType = REG_DWORD;
|
||
dwValueSize = sizeof(DWORD);
|
||
|
||
// examine check box
|
||
dwValue = SendDlgItemMessage(
|
||
hDlg,
|
||
IDC_USEGATEWAY,
|
||
BM_GETCHECK,
|
||
0,
|
||
0
|
||
) ? 1 : 0;
|
||
|
||
// query for registry value
|
||
lStatus = RegSetValueEx(
|
||
hKey,
|
||
pszValue,
|
||
0,
|
||
dwValueType,
|
||
(LPBYTE)&dwValue,
|
||
dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
H323DBG((
|
||
DEBUG_LEVEL_ERROR,
|
||
"error 0x%08lx writing gateway flag\n",
|
||
lStatus
|
||
));
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_PROXYADDR;
|
||
|
||
// retrieve gateway address from dialog
|
||
GetDlgItemText(hDlg,IDC_H323_PROXY,szAddr,sizeof(szAddr));
|
||
|
||
// initialize type
|
||
dwValueType = REG_SZ;
|
||
dwValueSize = (_tcslen(szAddr) + 1) * sizeof(TCHAR);
|
||
|
||
// query for registry value
|
||
lStatus = RegSetValueEx(
|
||
hKey,
|
||
pszValue,
|
||
0,
|
||
dwValueType,
|
||
(LPBYTE)szAddr,
|
||
dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
H323DBG((
|
||
DEBUG_LEVEL_ERROR,
|
||
"error 0x%08lx writing proxy address\n",
|
||
lStatus
|
||
));
|
||
}
|
||
|
||
// initialize value name
|
||
pszValue = H323_REGVAL_PROXYENABLED;
|
||
|
||
// initialize type
|
||
dwValueType = REG_DWORD;
|
||
dwValueSize = sizeof(DWORD);
|
||
|
||
// examine check box
|
||
dwValue = SendDlgItemMessage(
|
||
hDlg,
|
||
IDC_USEPROXY,
|
||
BM_GETCHECK,
|
||
0,
|
||
0
|
||
) ? 1 : 0;
|
||
|
||
// query for registry value
|
||
lStatus = RegSetValueEx(
|
||
hKey,
|
||
pszValue,
|
||
0,
|
||
dwValueType,
|
||
(LPBYTE)&dwValue,
|
||
dwValueSize
|
||
);
|
||
|
||
// validate return code
|
||
if (lStatus != ERROR_SUCCESS) {
|
||
|
||
H323DBG((
|
||
DEBUG_LEVEL_ERROR,
|
||
"error 0x%08lx writing proxy flag\n",
|
||
lStatus
|
||
));
|
||
}
|
||
|
||
// close registry
|
||
RegCloseKey(hKey);
|
||
|
||
// close dialog
|
||
EndDialog(hDlg, 0);
|
||
break;
|
||
|
||
case IDCANCEL:
|
||
|
||
// close dialog
|
||
EndDialog(hDlg, 0);
|
||
break;
|
||
|
||
case IDC_USEGATEWAY:
|
||
|
||
// display string if check box enabled
|
||
EnableWindow(GetDlgItem(hDlg,IDC_H323_GATEWAY),
|
||
(BOOL)SendDlgItemMessage(
|
||
hDlg,
|
||
IDC_USEGATEWAY,
|
||
BM_GETCHECK,
|
||
(WPARAM)0,
|
||
(LPARAM)0
|
||
));
|
||
|
||
break;
|
||
|
||
case IDC_USEPROXY:
|
||
|
||
// display string if check box enabled
|
||
EnableWindow(GetDlgItem(hDlg,IDC_H323_PROXY),
|
||
(BOOL)SendDlgItemMessage(
|
||
hDlg,
|
||
IDC_USEPROXY,
|
||
BM_GETCHECK,
|
||
(WPARAM)0,
|
||
(LPARAM)0
|
||
));
|
||
|
||
break;
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
// success
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// TSPI procedures //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
LONG
|
||
TSPIAPI
|
||
TSPI_providerConfig(
|
||
HWND hwndOwner,
|
||
DWORD dwPermanentProviderID
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
The original TSPI UI-generating functions (TSPI_lineConfigDialog,
|
||
TSPI_lineConfigDialogEdit, TSPI_phoneConfigDialog, TSPI_providerConfig,
|
||
TSPI_providerInstall, and TSPI_providerRemove) are obsolete and will
|
||
never be called by TAPISRV.EXE. However, if the service provider desires
|
||
to be listed as one that can be added by the Telephony control panel,
|
||
it must export TSPI_providerInstall; if it wants to have the Remove
|
||
button enabled in the Telephony CPL when it is selected, it must export
|
||
TSPI_providerRemove, and it if wants the Setup button to be enabled
|
||
in the Telephony CPL when it is selected, it must export
|
||
TSPI_providerConfig.
|
||
|
||
The Telephony CPL checks for the presence of these functions in the
|
||
service provider TSP file in order to adjust its user interface to
|
||
reflect which operations can be performed.
|
||
|
||
See TUISPI_lineConfigDialog for dialog code.
|
||
|
||
Arguments:
|
||
|
||
hwndOwner - Specifies the handle of the parent window in which the function
|
||
may create any dialog windows required during the configuration.
|
||
|
||
dwPermanentProviderID - Specifies the permanent ID, unique within the
|
||
service providers on this system, of the service provider being
|
||
configured.
|
||
|
||
Return Values:
|
||
|
||
Returns zero if the request is successful or a negative error number if
|
||
an error has occurred. Possible return values are:
|
||
|
||
LINEERR_NOMEM - Unable to allocate or lock memory.
|
||
|
||
LINEERR_OPERATIONFAILED - The specified operation failed for unknown
|
||
reasons.
|
||
|
||
--*/
|
||
|
||
{
|
||
UNREFERENCED_PARAMETER(hwndOwner); // no dialog here
|
||
UNREFERENCED_PARAMETER(dwPermanentProviderID); // not needed anymore
|
||
|
||
// success
|
||
return NOERROR;
|
||
}
|
||
|
||
|
||
LONG
|
||
TSPIAPI
|
||
TUISPI_providerConfig(
|
||
TUISPIDLLCALLBACK pfnUIDLLCallback,
|
||
HWND hwndOwner,
|
||
DWORD dwPermanentProviderID
|
||
)
|
||
{
|
||
INT_PTR nResult;
|
||
|
||
UNREFERENCED_PARAMETER(pfnUIDLLCallback);
|
||
UNREFERENCED_PARAMETER(dwPermanentProviderID);
|
||
|
||
// invoke dialog box
|
||
nResult = DialogBoxW(
|
||
g_hInstance,
|
||
MAKEINTRESOURCE(IDD_TSPCONFIG),
|
||
hwndOwner,
|
||
ProviderConfigDlgProc,
|
||
);
|
||
|
||
// status based on whether dialog executed properly
|
||
return ((DWORD)nResult == 0) ? NOERROR : LINEERR_OPERATIONFAILED;
|
||
}
|