Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

921 lines
25 KiB

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1995 **
//*********************************************************************
//
// DIALDLG.C - Autodial UI for Internet control panel
//
// HISTORY:
//
// 4/5/95 jeremys Created.
//
#include "inetcpl.h"
BOOL CALLBACK ProxyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam);
BOOL ProxyDlgInit(HWND hDlg);
VOID EnableProxyControls(HWND hDlg);
BOOL ProxyDlgOK(HWND hDlg);
extern DWORD aProfileIds[];
#pragma data_seg(DATASEG_PERINSTANCE)
#ifdef WIN95_AUTODIAL
BOOL CALLBACK AutodialDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam);
BOOL AutodialDlgInit(HWND hDlg);
BOOL AutodialDlgOK(HWND hDlg);
VOID EnableAutodialControls(HWND hDlg);
BOOL LoadRNADll(VOID);
VOID UnloadRNADll(VOID);
BOOL FillConnectoidComboBox(HWND hwndCombo, BOOL fUpdateOnly);
BOOL MakeNewConnectoid(HWND hDlg);
BOOL EditConnectoid(HWND hDlg);
HINSTANCE hInstRNADll=NULL;
DWORD dwRNARefCount = 0;
RNAACTIVATEENGINE lpRnaActivateEngine = NULL;
RNADEACTIVATEENGINE lpRnaDeactivateEngine = NULL;
RNAENUMCONNENTRIES lpRnaEnumConnEntries = NULL;
RASCREATEPHONEBOOKENTRY lpRasCreatePhonebookEntry = NULL;
RASEDITPHONEBOOKENTRY lpRasEditPhonebookEntry = NULL;
#define NUM_RNAAPI_PROCS 5
APIFCN RnaApiList[NUM_RNAAPI_PROCS] = {
{ (PVOID *) &lpRnaActivateEngine,szRnaActivateEngine},
{ (PVOID *) &lpRnaDeactivateEngine,szRnaDeactivateEngine},
{ (PVOID *) &lpRnaEnumConnEntries,szRnaEnumConnEntries},
{ (PVOID *) &lpRasCreatePhonebookEntry,szRasCreatePhonebookEntry},
{ (PVOID *) &lpRasEditPhonebookEntry,szRasEditPhonebookEntry}};
#endif
#pragma data_seg(DATASEG_SHARED)
/*******************************************************************
NAME: _AddPropSheetPage
SYNOPSIS: Adds a property sheet page to a property sheet
header's array of property sheet pages.
********************************************************************/
#ifdef WIN95_AUTODIAL
#define NUM_OPTION_PAGES 2
#else
#define NUM_OPTION_PAGES 1
#endif
BOOL CALLBACK _AddPropSheetPage(HPROPSHEETPAGE hpage, LPARAM lParam)
{
BOOL bResult;
LPPROPSHEETHEADER ppsh = (LPPROPSHEETHEADER)lParam;
bResult = (ppsh->nPages < NUM_OPTION_PAGES);
if (bResult);
ppsh->phpage[ppsh->nPages++] = hpage;
return(bResult);
}
/*******************************************************************
NAME: AddInternetPropertySheets
SYNOPSIS: Adds the Internet property sheets through a provided
callback function. Allows caller to specify common
parent reference count pointer and common callback
function for those property sheets.
********************************************************************/
extern "C" HRESULT WINAPI AddInternetPropertySheets(
LPFNADDPROPSHEETPAGE pfnAddPage,
LPARAM lparam, PUINT pucRefCount,
LPFNPSPCALLBACK pfnCallback)
{
HRESULT hr;
PROPSHEETPAGE psPage;
int nPageIndex;
memset(&psPage,0,sizeof(psPage));
// fill out common data property sheet page struct
psPage.dwSize = sizeof(psPage);
psPage.hInstance = ghInstance;
psPage.dwFlags = PSP_DEFAULT;
if (pucRefCount)
{
psPage.pcRefParent = pucRefCount;
psPage.dwFlags |= PSP_USEREFPARENT;
}
if (pfnCallback)
{
psPage.pfnCallback = pfnCallback;
psPage.dwFlags |= PSP_USECALLBACK;
}
// create a property sheet page for each page
for (nPageIndex = 0; nPageIndex < NUM_OPTION_PAGES; nPageIndex++)
{
HPROPSHEETPAGE hpage;
switch (nPageIndex)
{
#ifdef WIN95_AUTODIAL
case 0:
psPage.pfnDlgProc = AutodialDlgProc;
psPage.pszTemplate = MAKEINTRESOURCE(IDD_AUTODIAL);
break;
case 1:
#else
case 0:
#endif
psPage.pfnDlgProc = ProxyDlgProc;
psPage.pszTemplate = MAKEINTRESOURCE(IDD_PROXY);
break;
default:
ASSERT(0);
break;
}
// set a pointer to the PAGEINFO struct as the private data for this page
psPage.lParam = (LPARAM)nPageIndex;
hpage = CreatePropertySheetPage(&psPage);
if (hpage)
{
if ((*pfnAddPage)(hpage, lparam))
hr = S_OK;
else
{
DestroyPropertySheetPage(hpage);
hr = E_FAIL;
}
}
else
hr = E_OUTOFMEMORY;
if (hr != S_OK)
break;
}
return(hr);
}
/*******************************************************************
NAME: DestroyPropertySheets
SYNOPSIS: Destroys a property sheet header's array of property
sheets.
********************************************************************/
void DestroyPropertySheets(LPPROPSHEETHEADER ppsHeader)
{
UINT nFreeIndex;
for (nFreeIndex = 0; nFreeIndex < ppsHeader->nPages; nFreeIndex++)
DestroyPropertySheetPage(ppsHeader->phpage[nFreeIndex]);
}
/*******************************************************************
NAME: LaunchInternetControlPanel
SYNOPSIS: Runs the Internet control panel.
********************************************************************/
BOOL LaunchInternetControlPanel(HWND hDlg)
{
HPROPSHEETPAGE hOptPage[NUM_OPTION_PAGES]; // array to hold handles to pages
PROPSHEETHEADER psHeader;
BOOL fRet;
memset(&psHeader,0,sizeof(psHeader));
psHeader.dwSize = sizeof(psHeader);
psHeader.dwFlags = PSH_PROPTITLE;
psHeader.hwndParent = hDlg;
psHeader.hInstance = ghInstance;
psHeader.nPages = 0;
psHeader.phpage = hOptPage;
psHeader.pszCaption = MAKEINTRESOURCE(IDS_INTERNET);
if (AddInternetPropertySheets(&_AddPropSheetPage, (LPARAM)&psHeader, NULL,
NULL) == S_OK)
// display the property sheet
fRet = PropertySheet(&psHeader);
else
{
DestroyPropertySheets(&psHeader);
MsgBox(NULL, IDS_ERROutOfMemory, MB_ICONEXCLAMATION, MB_OK);
fRet = FALSE;
}
return fRet;
}
/*******************************************************************
NAME: ProxyDlgProc
SYNOPSIS: Proxy property sheet dialog proc.
********************************************************************/
BOOL CALLBACK ProxyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
switch (uMsg) {
case WM_INITDIALOG:
return ProxyDlgInit(hDlg);
break;
case WM_NOTIFY:
{
NMHDR * lpnm = (NMHDR *) lParam;
switch (lpnm->code) {
case PSN_APPLY:
{
BOOL fRet = ProxyDlgOK(hDlg);
SetPropSheetResult(hDlg,!fRet);
return !fRet;
}
break;
case PSN_RESET:
SetPropSheetResult(hDlg,FALSE);
break;
}
}
break;
case WM_COMMAND:
// enable 'Apply Now'
PropSheet_Changed(GetParent(hDlg),hDlg);
switch (wParam) {
case IDC_PROXY_ENABLE:
EnableProxyControls(hDlg);
break;
}
break;
case WM_HELP: // F1
{
CHAR szSmallBuf[SMALL_BUF_LEN+1];
WinHelp((HWND) ((LPHELPINFO)lParam)->hItemHandle, LoadSz(IDS_HELPFILE,szSmallBuf,sizeof(szSmallBuf)),
HELP_WM_HELP, (DWORD)(LPSTR)aProfileIds);
}
break;
case WM_CONTEXTMENU: // right mouse click
{
CHAR szSmallBuf[SMALL_BUF_LEN+1];
WinHelp((HWND)wParam, LoadSz(IDS_HELPFILE,szSmallBuf,sizeof(szSmallBuf)),
HELP_CONTEXTMENU, (DWORD)(LPSTR)aProfileIds);
}
break;
}
return FALSE;
}
/*******************************************************************
NAME: EnableProxyControls
SYNOPSIS: Enables controls appropriately depending on what
checkboxes are checked.
********************************************************************/
VOID EnableProxyControls(HWND hDlg)
{
BOOL fProxyEnabled = IsDlgButtonChecked(hDlg,IDC_PROXY_ENABLE);
EnableDlgItem(hDlg,IDC_GRP_SETTINGS,fProxyEnabled);
EnableDlgItem(hDlg,IDC_PROXY_SERVER,fProxyEnabled);
EnableDlgItem(hDlg,IDC_PROXY_SERVER_LABEL,fProxyEnabled);
EnableDlgItem(hDlg,IDC_PROXY_OVERRIDE,fProxyEnabled);
EnableDlgItem(hDlg,IDC_PROXY_OVERRIDE_LABEL,fProxyEnabled);
}
/*******************************************************************
NAME: ProxyDlgInit
SYNOPSIS: Initialization proc for proxy prop page
********************************************************************/
BOOL ProxyDlgInit(HWND hDlg)
{
BOOL fProxyEnabled = FALSE;
// read settings from registry
RegEntry re(szRegPathInternetSettings,HKEY_CURRENT_USER);
if (re.GetError() == ERROR_SUCCESS) {
BUFFER bufProxyString(MAX_URL_STRING+1);
if (!bufProxyString) {
MsgBox(NULL,IDS_ERROutOfMemory,MB_ICONEXCLAMATION,MB_OK);
return FALSE;
}
// is proxy enabled?
fProxyEnabled = (BOOL) re.GetNumber(szRegValProxyEnable,0);
// get proxy server and override settings from registry and stuff fields
re.GetString(szRegValProxyServer,bufProxyString.QueryPtr(),
bufProxyString.QuerySize());
SetDlgItemText(hDlg,IDC_PROXY_SERVER,bufProxyString.QueryPtr());
re.GetString(szRegValProxyOverride,bufProxyString.QueryPtr(),
bufProxyString.QuerySize());
SetDlgItemText(hDlg,IDC_PROXY_OVERRIDE,bufProxyString.QueryPtr());
}
// initialize the UI appropriately
CheckDlgButton(hDlg,IDC_PROXY_ENABLE,fProxyEnabled);
EnableProxyControls(hDlg);
return TRUE;
}
/*******************************************************************
NAME: ProxyDlgOK
SYNOPSIS: OK button handler for proxy prop page
********************************************************************/
BOOL ProxyDlgOK(HWND hDlg)
{
RegEntry re(szRegPathInternetSettings,HKEY_CURRENT_USER);
if (re.GetError() == ERROR_SUCCESS) {
BUFFER bufProxyString(MAX_URL_STRING+1);
if (!bufProxyString) {
MsgBox(NULL,IDS_ERROutOfMemory,MB_ICONEXCLAMATION,MB_OK);
} else {
BOOL fProxyEnabled = IsDlgButtonChecked(hDlg,IDC_PROXY_ENABLE);
// set registry values for proxy server and override
GetDlgItemText(hDlg,IDC_PROXY_SERVER, bufProxyString.QueryPtr(),
bufProxyString.QuerySize());
re.SetValue(szRegValProxyServer, bufProxyString.QueryPtr());
GetDlgItemText(hDlg,IDC_PROXY_OVERRIDE, bufProxyString.QueryPtr(),
bufProxyString.QuerySize());
re.SetValue(szRegValProxyOverride, bufProxyString.QueryPtr());
// write proxy enabled value to registry
re.SetValue(szRegValProxyEnable, (DWORD) fProxyEnabled);
}
} else {
DEBUGTRAP("Couldn't save settings to registry!");
}
return TRUE;
}
/*******************************************************************
NAME: SetParentWindowText
SYNOPSIS: Sets the text of the given window's parent window.
********************************************************************/
BOOL SetParentWindowText(HWND hDlg, UINT uidTitle)
{
BOOL bResult = FALSE;
HWND hwndParent;
ASSERT(IsWindow(hDlg));
hwndParent = GetParent(hDlg);
if (hwndParent)
{
CHAR szTitle[SMALL_BUF_LEN + 1];
if (LoadString(ghInstance, uidTitle, szTitle, sizeof(szTitle)))
bResult = SetWindowText(hwndParent, szTitle);
}
return(bResult);
}
#ifdef WIN95_AUTODIAL
/*******************************************************************
NAME: AutodialDlgProc
SYNOPSIS: AutoDial property sheet dialog proc.
********************************************************************/
BOOL CALLBACK AutodialDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
switch (uMsg) {
case WM_INITDIALOG:
// Ignore return value.
SetParentWindowText(hDlg, IDS_PROP_HEADER_TITLE);
LoadRNADll(); // load RNA dll to get API addresses
return AutodialDlgInit(hDlg);
break;
case WM_DESTROY:
UnloadRNADll();
break;
case WM_NOTIFY:
{
NMHDR * lpnm = (NMHDR *) lParam;
switch (lpnm->code) {
case PSN_APPLY:
{
BOOL fRet = AutodialDlgOK(hDlg);
SetPropSheetResult(hDlg,!fRet);
return !fRet;
}
break;
case PSN_RESET:
SetPropSheetResult(hDlg,FALSE);
break;
}
}
break;
case WM_COMMAND:
// enable 'Apply Now'
PropSheet_Changed(GetParent(hDlg),hDlg);
switch (wParam) {
case IDC_ENABLE_AUTODIAL:
case IDC_ENABLE_AUTODISCONNECT:
// if checkboxes are checked or unchecked,
// enable/disable other controls appropriately
EnableAutodialControls(hDlg);
break;
case IDC_NEW:
MakeNewConnectoid(hDlg);
break;
case IDC_EDIT:
EditConnectoid(hDlg);
break;
}
break;
case WM_HELP: // F1
{
CHAR szSmallBuf[SMALL_BUF_LEN+1];
WinHelp((HWND) ((LPHELPINFO)lParam)->hItemHandle, LoadSz(IDS_HELPFILE,szSmallBuf,sizeof(szSmallBuf)),
HELP_WM_HELP, (DWORD)(LPSTR)aProfileIds);
}
break;
case WM_CONTEXTMENU: // right mouse click
{
CHAR szSmallBuf[SMALL_BUF_LEN+1];
WinHelp((HWND)wParam, LoadSz(IDS_HELPFILE,szSmallBuf,sizeof(szSmallBuf)),
HELP_CONTEXTMENU, (DWORD)(LPSTR)aProfileIds);
}
break;
}
return FALSE;
}
/*******************************************************************
NAME: AutodialDlgInit
SYNOPSIS: Initialization proc for autodial prop page
********************************************************************/
BOOL AutodialDlgInit(HWND hDlg)
{
BOOL fAutodialEnabled,fAutodisconnectEnabled,fSecurityCheckEnabled;
DWORD dwAutodisconnectTime;
// only initialize page if RNA successfully loaded
if (hInstRNADll) {
// read settings from registry
RegEntry re(szRegPathInternetSettings,HKEY_CURRENT_USER);
if (re.GetError() == ERROR_SUCCESS) {
// is autodial enabled?
fAutodialEnabled =
(BOOL) re.GetNumber(szRegValEnableAutodial,0);
// is autodisconnect enabled?
fAutodisconnectEnabled =
(BOOL) re.GetNumber(szRegValEnableAutodisconnect,0);
// get the timeout for auto disconnect
dwAutodisconnectTime =
(BOOL) re.GetNumber(szRegValDisconnectIdleTime,
DEF_AUTODISCONNECT_TIME);
// is autodisconnect enabled?
fSecurityCheckEnabled =
(BOOL) re.GetNumber(szRegValEnableSecurityCheck,0);
}
// initialize the UI appropriately
CheckDlgButton(hDlg,IDC_ENABLE_AUTODIAL,fAutodialEnabled);
CheckDlgButton(hDlg,IDC_ENABLE_AUTODISCONNECT,
fAutodisconnectEnabled);
CheckDlgButton(hDlg,IDC_ENABLE_SECURITYCHECK,
fSecurityCheckEnabled);
Edit_LimitText(GetDlgItem(hDlg,IDC_IDLE_TIMEOUT),2); // limit edit ctrl to 2 chars
SendDlgItemMessage(hDlg,IDC_SPIN,UDM_SETPOS,0,dwAutodisconnectTime);
SendDlgItemMessage(hDlg,IDC_SPIN,UDM_SETBUDDY,(WPARAM) GetDlgItem(hDlg,IDC_IDLE_TIMEOUT),
0);
// set spin control min/max
SendDlgItemMessage(hDlg,IDC_SPIN,UDM_SETRANGE,0,
MAKELPARAM(MAX_AUTODISCONNECT_TIME,MIN_AUTODISCONNECT_TIME));
// call RNA to enumerate existing connectoid names
HWND hwndCombo = GetDlgItem(hDlg,IDC_CHOOSE_CONNECTOID);
FillConnectoidComboBox(hwndCombo,FALSE);
HKEY hKey;
// get internet connectoid name, set it as default in combo box if possible
if (RegOpenKey(HKEY_CURRENT_USER,szRegPathRemoteAccess,&hKey)
== ERROR_SUCCESS) {
CHAR szEntryName[RAS_MaxEntryName + 1]="";
DWORD dwSize=sizeof(szEntryName);
if ((RegQueryValueEx(hKey,szRegValInternetEntry,NULL,NULL,
(LPBYTE) szEntryName,&dwSize) == ERROR_SUCCESS) &&
lstrlen(szEntryName)) {
int iSel = ComboBox_FindStringExact(hwndCombo,0,szEntryName);
if (iSel >= 0) {
ComboBox_SetCurSel(hwndCombo,iSel);
} else {
// connectoid specified in registry couldn't be found
// (for instance, user might have renamed it in RNA
// folder)... tell them to pick another one
MsgBoxParam(hDlg,IDS_ConnectoidNotFound,MB_ICONINFORMATION,
MB_OK,szEntryName);
}
}
RegCloseKey(hKey);
}
} else {
// couldn't load RNA, most likely it's not installed. Disable dialog
// and show message that RNA needs to be installed
EnableDlgItem(hDlg,IDC_ENABLE_AUTODIAL,FALSE);
// BUGBUG show message that RNA needs to be installed
}
EnableAutodialControls(hDlg);
return TRUE;
}
/*******************************************************************
NAME: FillConnectoidComboBox
ENTRY: hwndCombo - handle of combo box
fUpdateOnly - if FALSE, then the combo box is filled with
all RNA connectoids. If TRUE, then only connectoids
that aren't already in the combo box are added,
and the selection is set to a new connectoid if there are
any. This parameter is set to TRUE when called immediately
after a new connectoid is created.
SYNOPSIS: Fills specified combo box with list of existing RNA
connectoids
********************************************************************/
#define DEF_ENTRY_BUF_SIZE 8192
BOOL FillConnectoidComboBox(HWND hwndCombo,BOOL fUpdateOnly)
{
ASSERT(hwndCombo);
DWORD dwBufSize = DEF_ENTRY_BUF_SIZE;
DWORD dwEntries = 0,dwRet;
LPSTR pBuf = (LPSTR) new (CHAR[dwBufSize]);
if (pBuf) {
dwRet = (lpRnaEnumConnEntries)(pBuf,dwBufSize,&dwEntries);
if (dwRet == ERROR_BUFFER_TOO_SMALL) {
// reallocate buffer if necessary
delete pBuf;
pBuf = NULL;
dwBufSize = dwEntries * (RAS_MaxEntryName+1);
pBuf = (LPSTR) new (CHAR[dwBufSize]);
if (pBuf) {
dwRet = (lpRnaEnumConnEntries)(pBuf,dwBufSize,&dwEntries);
}
}
if (dwRet == ERROR_SUCCESS && pBuf) {
if (!fUpdateOnly) {
// clear combo box
ComboBox_ResetContent(hwndCombo);
}
// insert connectoid names from buffer into combo box
CHAR * pszConn = pBuf;
while (*pszConn && dwEntries) {
if (!fUpdateOnly) {
ComboBox_AddString(hwndCombo,pszConn);
} else {
// only insert the name if it didn't previously
// exist
if (ComboBox_FindStringExact(hwndCombo,0,pszConn) < 0) {
int iSel = ComboBox_AddString(hwndCombo,pszConn);
ASSERT(iSel >= 0);
ComboBox_SetCurSel(hwndCombo,iSel);
}
}
pszConn += lstrlen(pszConn) + 1;
dwEntries--;
}
}
if (pBuf)
delete pBuf;
}
return TRUE;
}
/*******************************************************************
NAME: AutodialDlgOK
SYNOPSIS: OK button handler for autodial prop page
********************************************************************/
BOOL AutodialDlgOK(HWND hDlg)
{
// only save settings if RNA could be loaded (otherwise page is
// disabled)
if (hInstRNADll) {
RegEntry re(szRegPathInternetSettings,HKEY_CURRENT_USER);
if (re.GetError() == ERROR_SUCCESS) {
BOOL fAutodialEnabled = IsDlgButtonChecked(hDlg,IDC_ENABLE_AUTODIAL);
if (fAutodialEnabled) {
// make sure there is a connectoid selected in combo box
HWND hwndCombo = GetDlgItem(hDlg,IDC_CHOOSE_CONNECTOID);
int iSel=ComboBox_GetCurSel(hwndCombo);
if (iSel < 0) {
MsgBox(hDlg,IDS_ConnectoidNotSpecified,MB_ICONINFORMATION,
MB_OK);
SetFocus(hwndCombo);
return FALSE;
}
// get the name of selected connectoid, set it in the registry
CHAR szEntryName[RAS_MaxEntryName + 1]="";
if (ComboBox_GetText(hwndCombo,szEntryName,sizeof(szEntryName))) {
RegEntry reTmp(szRegPathRemoteAccess,HKEY_CURRENT_USER);
if (reTmp.GetError() == ERROR_SUCCESS) {
reTmp.SetValue(szRegValInternetEntry,szEntryName);
}
}
// write security check enabled value to registry
BOOL fSecurityCheckEnabled =
IsDlgButtonChecked(hDlg,IDC_ENABLE_SECURITYCHECK);
re.SetValue(szRegValEnableSecurityCheck,
(DWORD) fSecurityCheckEnabled);
BOOL fAutodisconnectEnabled =
IsDlgButtonChecked(hDlg,IDC_ENABLE_AUTODISCONNECT);
// write autodisconnect enabled value to registry
re.SetValue(szRegValEnableAutodisconnect,
(DWORD) fAutodisconnectEnabled);
if (fAutodisconnectEnabled) {
// get autodisconnect time from edit control
DWORD dwAutoDisconnectTime = SendDlgItemMessage(hDlg,
IDC_SPIN,UDM_GETPOS,0,0);
// make sure it falls in valid range
if (dwAutoDisconnectTime < MIN_AUTODISCONNECT_TIME)
dwAutoDisconnectTime = MIN_AUTODISCONNECT_TIME;
if (dwAutoDisconnectTime > MAX_AUTODISCONNECT_TIME)
dwAutoDisconnectTime = MAX_AUTODISCONNECT_TIME;
// save it to registry
re.SetValue(szRegValDisconnectIdleTime,dwAutoDisconnectTime);
// also save this value to MSN autodisconnect value, to
// avoid confusion. At some point in the future we'll
// combine our UI...
RegEntry reMSN(szRegPathMOSDisconnect,HKEY_CURRENT_USER);
if (reMSN.GetError() == ERROR_SUCCESS) {
reMSN.SetValue(szRegValMOSDisconnect,dwAutoDisconnectTime);
}
}
}
// write autodial enabled value to registry
re.SetValue(szRegValEnableAutodial,(DWORD) fAutodialEnabled);
} else {
DEBUGTRAP("Couldn't save settings to registry!");
}
}
return TRUE;
}
/*******************************************************************
NAME: MakeNewConnectoid
SYNOPSIS: Launches RNA new connectoid wizard; selects newly
created connectoid (if any) in combo box
********************************************************************/
BOOL MakeNewConnectoid(HWND hDlg)
{
BOOL fRet=FALSE;
ASSERT(lpRasCreatePhonebookEntry);
if ((lpRasCreatePhonebookEntry)(hDlg,NULL) == ERROR_SUCCESS) {
HWND hwndCombo = GetDlgItem(hDlg,IDC_CHOOSE_CONNECTOID);
ASSERT(hwndCombo);
FillConnectoidComboBox(hwndCombo,TRUE); // refresh combo box
fRet = TRUE;
}
return fRet;
}
/*******************************************************************
NAME: EditConnectoid
SYNOPSIS: Brings up RNA dialog for connectoid properties for
selected connectoid
********************************************************************/
BOOL EditConnectoid(HWND hDlg)
{
BOOL fRet=FALSE;
HWND hwndCombo = GetDlgItem(hDlg,IDC_CHOOSE_CONNECTOID);
ASSERT(hwndCombo);
// shouldn't get here unless there is selection in combo box
ASSERT(ComboBox_GetCurSel(hwndCombo) >= 0);
CHAR szEntryName[RAS_MaxEntryName+1]="";
ComboBox_GetText(hwndCombo,szEntryName,sizeof(szEntryName));
if (lstrlen(szEntryName)) {
ASSERT(lpRasEditPhonebookEntry);
if ((lpRasEditPhonebookEntry)(hDlg,NULL,szEntryName) == ERROR_SUCCESS) {
fRet = TRUE;
}
}
return fRet;
}
/*******************************************************************
NAME: EnableAutodialControls
SYNOPSIS: Enables controls appropriately depending on what
checkboxes are checked.
********************************************************************/
VOID EnableAutodialControls(HWND hDlg)
{
BOOL fAutodialEnabled = IsDlgButtonChecked(hDlg,IDC_ENABLE_AUTODIAL);
BOOL fAutodisconnectEnabled =
(fAutodialEnabled && IsDlgButtonChecked(hDlg,IDC_ENABLE_AUTODISCONNECT));
EnableDlgItem(hDlg,IDC_GRP_SETTINGS,fAutodialEnabled);
EnableDlgItem(hDlg,IDC_TX_CHOOSE_CONNECTOID,fAutodialEnabled);
EnableDlgItem(hDlg,IDC_CHOOSE_CONNECTOID,fAutodialEnabled);
EnableDlgItem(hDlg,IDC_NEW,fAutodialEnabled);
EnableDlgItem(hDlg,IDC_EDIT,fAutodialEnabled);
EnableDlgItem(hDlg,IDC_ENABLE_AUTODISCONNECT,fAutodialEnabled);
EnableDlgItem(hDlg,IDC_TX_AUTODISCONNECT1,fAutodisconnectEnabled);
EnableDlgItem(hDlg,IDC_IDLE_TIMEOUT,fAutodisconnectEnabled);
EnableDlgItem(hDlg,IDC_SPIN,fAutodisconnectEnabled);
EnableDlgItem(hDlg,IDC_TX_AUTODISCONNECT2,fAutodisconnectEnabled);
EnableDlgItem(hDlg,IDC_ENABLE_SECURITYCHECK,fAutodialEnabled);
}
/*******************************************************************
NAME: LoadRNADll
SYNOPSIS: Loads RNA dll if not already loaded and obtains pointers
for function addresses.
NOTES: Maintains a reference count so we know when to unload
********************************************************************/
BOOL LoadRNADll(VOID)
{
// increase reference count
dwRNARefCount++;
if (hInstRNADll) {
// already loaded, nothing to do
return TRUE;
}
// get the file name from resource
CHAR szDllFilename[SMALL_BUF_LEN+1];
if (!LoadString(ghInstance,IDS_RNADLL_FILENAME,
szDllFilename,sizeof(szDllFilename)))
return FALSE;
// load the DLL
hInstRNADll = LoadLibrary(szDllFilename);
if (!hInstRNADll)
return FALSE;
// cycle through the API table and get proc addresses for all the APIs we
// need
UINT nIndex;
for (nIndex = 0;nIndex < NUM_RNAAPI_PROCS;nIndex++) {
if (!(*RnaApiList[nIndex].ppFcnPtr = (PVOID) GetProcAddress(hInstRNADll,
RnaApiList[nIndex].pszName))) {
DEBUGMSG(("Unable to get address of function %s",
RnaApiList[nIndex].pszName));
UnloadRNADll();
return FALSE;
}
}
return TRUE;
}
/*******************************************************************
NAME: UnloadRNADll
SYNOPSIS: Decrements RNA dll reference count and unloads it if
zero
********************************************************************/
VOID UnloadRNADll(VOID)
{
// decrease reference count
if (dwRNARefCount)
dwRNARefCount --;
// unload DLL if reference count hits zero
if (!dwRNARefCount && hInstRNADll) {
// set function pointers to NULL
UINT nIndex;
for (nIndex = 0;nIndex < NUM_RNAAPI_PROCS;nIndex++)
*RnaApiList[nIndex].ppFcnPtr = NULL;
// free the library
FreeLibrary(hInstRNADll);
hInstRNADll = NULL;
}
}
#endif