windows-nt/Source/XPSP1/NT/net/tapi/skywalker/h323tsp/config.c
2020-09-26 16:20:57 +08:00

592 lines
16 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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;
}