2025-04-27 07:49:33 -04:00

893 lines
25 KiB
C

/* Copyright (c) 1995, Microsoft Corporation, all rights reserved
**
** tcpip.c
** Remote Access Common Dialog APIs
** TCPIP Settings dialogs
**
** 08/28/95 Steve Cobb
*/
#include "rasdlgp.h"
/*----------------------------------------------------------------------------
** Help maps
**----------------------------------------------------------------------------
*/
static DWORD g_adwPtHelp[] =
{
CID_IP_RB_ServerAssigned, HID_PT_RB_ServerAssigned,
CID_IP_RB_SpecificIp, HID_PT_RB_SpecificIp,
CID_IP_GB_SpecificIp, HID_PT_RB_SpecificIp,
CID_IP_ST_IpAddress, HID_PT_CC_IpAddress,
CID_IP_CC_IpAddress, HID_PT_CC_IpAddress,
CID_IP_RB_AssignedName, HID_PT_RB_AssignedName,
CID_IP_RB_SpecificNames, HID_PT_RB_SpecificNames,
CID_IP_RB_NoNames, HID_PT_RB_NoNames,
CID_IP_GB_SpecificName, HID_PT_RB_SpecificNames,
CID_IP_ST_Dns, HID_PT_CC_Dns,
CID_IP_CC_Dns, HID_PT_CC_Dns,
CID_IP_ST_DnsBackup, HID_PT_CC_DnsBackup,
CID_IP_CC_DnsBackup, HID_PT_CC_DnsBackup,
CID_IP_ST_Wins, HID_PT_CC_Wins,
CID_IP_CC_Wins, HID_PT_CC_Wins,
CID_IP_ST_WinsBackup, HID_PT_CC_WinsBackup,
CID_IP_CC_WinsBackup, HID_PT_CC_WinsBackup,
CID_IP_CB_Vj, HID_PT_CB_Vj,
CID_IP_CB_PrioritizeRemote, HID_PT_CB_PrioritizeRemote,
0, 0
};
static DWORD g_adwStHelp[] =
{
CID_IP_ST_IpAddress, HID_ST_CC_IpAddress,
CID_IP_CC_IpAddress, HID_ST_CC_IpAddress,
CID_IP_GB_SpecificName, HID_ST_GB_SpecificName,
CID_IP_ST_Dns, HID_ST_CC_Dns,
CID_IP_CC_Dns, HID_ST_CC_Dns,
CID_IP_ST_DnsBackup, HID_ST_CC_DnsBackup,
CID_IP_CC_DnsBackup, HID_ST_CC_DnsBackup,
CID_IP_ST_Wins, HID_ST_CC_Wins,
CID_IP_CC_Wins, HID_ST_CC_Wins,
CID_IP_ST_WinsBackup, HID_ST_CC_WinsBackup,
CID_IP_CC_WinsBackup, HID_ST_CC_WinsBackup,
CID_IP_CB_Vj, HID_ST_CB_Vj,
CID_IP_CB_PrioritizeRemote, HID_ST_CB_PrioritizeRemote,
CID_IP_ST_FrameSize, HID_ST_LB_FrameSize,
CID_IP_LB_FrameSize, HID_ST_LB_FrameSize,
0, 0
};
/*----------------------------------------------------------------------------
** Local datatypes (alphabetically)
**----------------------------------------------------------------------------
*/
/* PPP TCP/IP Settings dialog context block.
*/
#define PTINFO struct tagPTINFO
PTINFO
{
/* Caller's arguments to the dialog.
*/
PBENTRY* pEntry;
BOOL fRouter;
/* Handle of this dialog and some of it's controls.
*/
HWND hwndDlg;
HWND hwndRbAssignedIp;
HWND hwndRbSpecificIp;
HWND hwndRbAssignedNames;
HWND hwndRbNoNames;
HWND hwndRbSpecificNames;
HWND hwndCcIp;
HWND hwndCcDns;
HWND hwndCcDnsBackup;
HWND hwndCcWins;
HWND hwndCcWinsBackup;
HWND hwndCbCompress;
HWND hwndCbRemote;
HWND hwndStSpecificIp;
HWND hwndStDns;
HWND hwndStDnsBackup;
HWND hwndStWins;
HWND hwndStWinsBackup;
};
/* Dialog argument block.
*/
#define PTARGS struct tagPTARGS
PTARGS
{
PBENTRY* pEntry;
BOOL fRouter;
};
/* SLIP TCP/IP Settings dialog context block.
*/
#define STINFO struct tagSTINFO
STINFO
{
/* Caller's arguments to the dialog.
*/
PBENTRY* pEntry;
/* Handle of this dialog and some of it's controls.
*/
HWND hwndDlg;
HWND hwndCcIp;
HWND hwndCcDns;
HWND hwndCcDnsBackup;
HWND hwndCcWins;
HWND hwndCcWinsBackup;
HWND hwndCbCompress;
HWND hwndCbRemote;
HWND hwndLbFrameSize;
};
/*----------------------------------------------------------------------------
** Local prototypes (alphabetically)
**----------------------------------------------------------------------------
*/
BOOL
PtCommand(
IN PTINFO* pInfo,
IN WORD wNotification,
IN WORD wId,
IN HWND hwndCtrl );
INT_PTR CALLBACK
PtDlgProc(
IN HWND hwnd,
IN UINT unMsg,
IN WPARAM wparam,
IN LPARAM lparam );
VOID
PtEnableIpAddressFields(
IN PTINFO* pInfo,
IN BOOL fEnable );
VOID
PtEnableNameServerFields(
IN PTINFO* pInfo,
IN BOOL fEnable );
BOOL
PtInit(
IN HWND hwndDlg,
IN PTARGS* pArgs );
BOOL
PtSaveSettings(
IN PTINFO* pInfo );
VOID
PtTerm(
IN HWND hwndDlg );
BOOL
StCommand(
IN STINFO* pInfo,
IN WORD wNotification,
IN WORD wId,
IN HWND hwndCtrl );
INT_PTR CALLBACK
StDlgProc(
IN HWND hwnd,
IN UINT unMsg,
IN WPARAM wparam,
IN LPARAM lparam );
BOOL
StInit(
IN HWND hwndDlg,
IN PBENTRY* pEntry );
BOOL
StSaveSettings(
IN STINFO* pInfo );
VOID
StTerm(
IN HWND hwndDlg );
/*----------------------------------------------------------------------------
** PPP TCP/IP entry point
**----------------------------------------------------------------------------
*/
BOOL
PppTcpipDlg(
IN HWND hwndOwner,
IN OUT PBENTRY* pEntry,
IN BOOL fRouter )
/* Pops-up the TCPIP info dialog for PPP. Initial address settings are
** read from 'pEntry' and the result of user's edits written there on "OK"
** exit. 'HwndOwner' is the window owning the dialog. 'FRouter' is set
** when the router version of the dialog should be displayed.
**
** Returns true if user pressed OK and succeeded, false if he pressed
** Cancel or encountered an error.
*/
{
int nStatus;
PTARGS args;
TRACE("PppTcpipDlg");
args.pEntry = pEntry;
args.fRouter = fRouter;
nStatus =
(BOOL )DialogBoxParam(
g_hinstDll,
(fRouter)
? MAKEINTRESOURCE( DID_PT_RouterPppTcpipSettings )
: MAKEINTRESOURCE( DID_PT_PppTcpipSettings ),
hwndOwner,
PtDlgProc,
(LPARAM )&args );
if (nStatus == -1)
{
ErrorDlg( hwndOwner, SID_OP_LoadDlg, ERROR_UNKNOWN, NULL );
nStatus = FALSE;
}
return (BOOL )nStatus;
}
/*----------------------------------------------------------------------------
** PPP TCP/IP Settings dialog
** Listed alphabetically following dialog proc
**----------------------------------------------------------------------------
*/
INT_PTR CALLBACK
PtDlgProc(
IN HWND hwnd,
IN UINT unMsg,
IN WPARAM wparam,
IN LPARAM lparam )
/* DialogProc callback for the TCPIP Settings dialog. Parameters and
** return value are as described for standard windows 'DialogProc's.
*/
{
#if 0
TRACE4("PtDlgProc(h=$%x,m=$%x,w=$%x,l=$%x)",
(DWORD)hwnd,(DWORD)unMsg,(DWORD)wparam,(DWORD)lparam);
#endif
switch (unMsg)
{
case WM_INITDIALOG:
return PtInit( hwnd, (PTARGS* )lparam );
case WM_HELP:
case WM_CONTEXTMENU:
ContextHelp( g_adwPtHelp, hwnd, unMsg, wparam, lparam );
break;
case WM_COMMAND:
{
PTINFO* pInfo = (PTINFO* )GetWindowLongPtr( hwnd, DWLP_USER );
ASSERT(pInfo);
return PtCommand(
pInfo, HIWORD( wparam ), LOWORD( wparam ), (HWND )lparam );
}
case WM_DESTROY:
{
PtTerm( hwnd );
break;
}
}
return FALSE;
}
BOOL
PtCommand(
IN PTINFO* pInfo,
IN WORD wNotification,
IN WORD wId,
IN HWND hwndCtrl )
/* Called on WM_COMMAND. 'PInfo' is the dialog context. 'WNotification'
** is the notification code of the command. 'wId' is the control/menu
** identifier of the command. 'HwndCtrl' is the control window handle of
** the command.
**
** Returns true if processed message, false otherwise.
*/
{
TRACE2("PtCommand(n=%d,i=%d)",
(DWORD)wNotification,(DWORD)wId);
switch (wId)
{
case CID_IP_RB_ServerAssigned:
PtEnableIpAddressFields( pInfo, FALSE );
return TRUE;
case CID_IP_RB_SpecificIp:
PtEnableIpAddressFields( pInfo, TRUE );
return TRUE;
case CID_IP_RB_AssignedName:
case CID_IP_RB_NoNames:
PtEnableNameServerFields( pInfo, FALSE );
return TRUE;
case CID_IP_RB_SpecificNames:
PtEnableNameServerFields( pInfo, TRUE );
return TRUE;
case IDOK:
if (PtSaveSettings( pInfo ))
EndDialog( pInfo->hwndDlg, FALSE );
return TRUE;
case IDCANCEL:
TRACE("Cancel pressed");
EndDialog( pInfo->hwndDlg, FALSE );
return TRUE;
}
return FALSE;
}
VOID
PtEnableIpAddressFields(
IN PTINFO* pInfo,
IN BOOL fEnable )
/* Enable or disable the IP address fields based on 'fEnable'. 'PInfo' is
** the dialog context block.
*/
{
TRACE1("PtEnableIpAddressFields(f=%d)",fEnable);
EnableWindow( pInfo->hwndStSpecificIp, fEnable );
EnableWindow( pInfo->hwndCcIp, fEnable );
}
VOID
PtEnableNameServerFields(
IN PTINFO* pInfo,
IN BOOL fEnable )
/* Enable or disable the name server IP address fields based on 'fEnable'.
** 'PInfo' is the dialog context block.
*/
{
TRACE1("PtEnableNameServerFields(f=%d)",fEnable);
EnableWindow( pInfo->hwndStDns, fEnable );
EnableWindow( pInfo->hwndCcDns, fEnable );
EnableWindow( pInfo->hwndStDnsBackup, fEnable );
EnableWindow( pInfo->hwndCcDnsBackup, fEnable );
EnableWindow( pInfo->hwndStWins, fEnable );
EnableWindow( pInfo->hwndCcWins, fEnable );
EnableWindow( pInfo->hwndStWinsBackup, fEnable );
EnableWindow( pInfo->hwndCcWinsBackup, fEnable );
}
BOOL
PtInit(
IN HWND hwndDlg,
IN PTARGS* pArgs )
/* Called on WM_INITDIALOG. 'hwndDlg' is the handle of the phonebook
** dialog window. 'pArgs' is caller's arguments as passed to the stub
** API.
**
** Return false if focus was set, true otherwise, i.e. as defined for
** WM_INITDIALOG.
*/
{
DWORD dwErr;
PTINFO* pInfo;
TRACE("PtInit");
/* Allocate the dialog context block. Initialize minimally for proper
** cleanup, then attach to the dialog window.
*/
{
pInfo = Malloc( sizeof(*pInfo) );
if (!pInfo)
{
ErrorDlg( hwndDlg, SID_OP_LoadDlg, ERROR_NOT_ENOUGH_MEMORY, NULL );
EndDialog( hwndDlg, FALSE );
return TRUE;
}
ZeroMemory( pInfo, sizeof(*pInfo) );
pInfo->pEntry = pArgs->pEntry;
pInfo->fRouter = pArgs->fRouter;
pInfo->hwndDlg = hwndDlg;
SetWindowLongPtr( hwndDlg, DWLP_USER, (LONG_PTR)pInfo );
TRACE("Context set");
}
pInfo->hwndRbAssignedIp = GetDlgItem( hwndDlg, CID_IP_RB_ServerAssigned );
ASSERT(pInfo->hwndRbAssignedIp);
pInfo->hwndRbSpecificIp = GetDlgItem( hwndDlg, CID_IP_RB_SpecificIp );
ASSERT(pInfo->hwndRbSpecificIp);
pInfo->hwndRbAssignedNames = GetDlgItem( hwndDlg, CID_IP_RB_AssignedName );
ASSERT(pInfo->hwndRbAssignedNames);
pInfo->hwndRbSpecificNames = GetDlgItem( hwndDlg, CID_IP_RB_SpecificNames );
ASSERT(pInfo->hwndRbSpecificNames);
pInfo->hwndCcIp = GetDlgItem( hwndDlg, CID_IP_CC_IpAddress );
ASSERT(pInfo->hwndCcIp);
pInfo->hwndCcDns = GetDlgItem( hwndDlg, CID_IP_CC_Dns );
ASSERT(pInfo->hwndCcDns);
pInfo->hwndCcDnsBackup = GetDlgItem( hwndDlg, CID_IP_CC_DnsBackup );
ASSERT(pInfo->hwndCcDnsBackup);
pInfo->hwndCcWins = GetDlgItem( hwndDlg, CID_IP_CC_Wins );
ASSERT(pInfo->hwndCcWins);
pInfo->hwndCcWinsBackup = GetDlgItem( hwndDlg, CID_IP_CC_WinsBackup );
ASSERT(pInfo->hwndCcWinsBackup);
pInfo->hwndCbCompress = GetDlgItem( hwndDlg, CID_IP_CB_Vj );
ASSERT(pInfo->hwndCbCompress);
pInfo->hwndStSpecificIp = GetDlgItem( hwndDlg, CID_IP_ST_IpAddress );
ASSERT(pInfo->hwndStSpecificIp);
pInfo->hwndStDns = GetDlgItem( hwndDlg, CID_IP_ST_Dns );
ASSERT(pInfo->hwndStDns);
pInfo->hwndStDnsBackup = GetDlgItem( hwndDlg, CID_IP_ST_DnsBackup );
ASSERT(pInfo->hwndStDnsBackup);
pInfo->hwndStWins = GetDlgItem( hwndDlg, CID_IP_ST_Wins );
ASSERT(pInfo->hwndStWins);
pInfo->hwndStWinsBackup = GetDlgItem( hwndDlg, CID_IP_ST_WinsBackup );
ASSERT(pInfo->hwndStWinsBackup);
if (pInfo->fRouter)
{
pInfo->hwndRbNoNames = GetDlgItem( hwndDlg, CID_IP_RB_NoNames );
ASSERT(pInfo->hwndRbNoNames);
}
else
{
pInfo->hwndCbRemote = GetDlgItem( hwndDlg, CID_IP_CB_PrioritizeRemote );
ASSERT(pInfo->hwndCbRemote);
}
/* Select the IP address and name server address radio buttons as defined
** in the entry. This also triggers appropriate enable/disable status.
*/
SendMessage(
(pInfo->pEntry->dwIpAddressSource == ASRC_RequireSpecific)
? pInfo->hwndRbSpecificIp : pInfo->hwndRbAssignedIp,
BM_CLICK, 0, 0 );
{
HWND hwndRb;
if (pInfo->pEntry->dwIpNameSource == ASRC_ServerAssigned)
hwndRb = pInfo->hwndRbAssignedNames;
else if (pInfo->pEntry->dwIpNameSource == ASRC_RequireSpecific)
hwndRb = pInfo->hwndRbSpecificNames;
else
hwndRb = pInfo->hwndRbNoNames;
SendMessage( hwndRb, BM_CLICK, 0, 0 );
}
/* Set the IP address and name server addresses as defined in the entry.
*/
SetWindowText( pInfo->hwndCcIp, pInfo->pEntry->pszIpAddress );
SetWindowText( pInfo->hwndCcDns, pInfo->pEntry->pszIpDnsAddress );
SetWindowText( pInfo->hwndCcDnsBackup, pInfo->pEntry->pszIpDns2Address );
SetWindowText( pInfo->hwndCcWins, pInfo->pEntry->pszIpWinsAddress );
SetWindowText( pInfo->hwndCcWinsBackup, pInfo->pEntry->pszIpWins2Address );
/* Select check box settings as defined in the entry.
*/
if (pInfo->pEntry->fIpHeaderCompression)
SendMessage( pInfo->hwndCbCompress, BM_CLICK, 0, 0 );
if (!pInfo->fRouter)
{
if (pInfo->pEntry->fIpPrioritizeRemote)
SendMessage( pInfo->hwndCbRemote, BM_CLICK, 0, 0 );
}
/* Center dialog on the owner window.
*/
CenterWindow( hwndDlg, GetParent( hwndDlg ) );
/* Add context help button to title bar. Dlgedit.exe doesn't currently
** support this at resource edit time. When that's fixed set
** DS_CONTEXTHELP there and remove this call.
*/
AddContextHelpButton( hwndDlg );
/* Set initial focus to selected IP address radio button.
*/
SetFocus(
(pInfo->pEntry->dwIpAddressSource == ASRC_RequireSpecific)
? pInfo->hwndRbSpecificIp : pInfo->hwndRbAssignedIp );
return FALSE;
}
BOOL
PtSaveSettings(
IN PTINFO* pInfo )
/* Saves dialog settings in the entry. 'PInfo' is the dialog context.
**
** Returns true if successful, false if does not validate.
*/
{
PBENTRY* pEntry;
DWORD dwIpAddressSource;
TCHAR* pszIpAddress;
TRACE("PtSaveSettings");
pEntry = pInfo->pEntry;
dwIpAddressSource =
(Button_GetCheck( pInfo->hwndRbSpecificIp ))
? ASRC_RequireSpecific : ASRC_ServerAssigned;
pszIpAddress = GetText( pInfo->hwndCcIp );
if (dwIpAddressSource == ASRC_RequireSpecific
&& (!pszIpAddress || lstrcmp( pszIpAddress, TEXT("0.0.0.0") ) == 0))
{
MsgDlg( pInfo->hwndDlg, SID_NoIpAddress, NULL );
SetFocus( pInfo->hwndCcIp );
Free0( pszIpAddress );
return FALSE;
}
pEntry->dwIpAddressSource = dwIpAddressSource;
Free0( pEntry->pszIpAddress );
pEntry->pszIpAddress = pszIpAddress;
pEntry->dwIpNameSource =
(Button_GetCheck( pInfo->hwndRbSpecificNames ))
? ASRC_RequireSpecific
: (Button_GetCheck( pInfo->hwndRbAssignedNames )
? ASRC_ServerAssigned
: ASRC_None);
Free0( pEntry->pszIpDnsAddress );
pEntry->pszIpDnsAddress = GetText( pInfo->hwndCcDns );
Free0( pEntry->pszIpDns2Address );
pEntry->pszIpDns2Address = GetText( pInfo->hwndCcDnsBackup );
Free0( pEntry->pszIpWinsAddress );
pEntry->pszIpWinsAddress = GetText( pInfo->hwndCcWins );
Free0( pEntry->pszIpWins2Address );
pEntry->pszIpWins2Address = GetText( pInfo->hwndCcWinsBackup );
pEntry->fIpHeaderCompression = Button_GetCheck( pInfo->hwndCbCompress );
if (!pInfo->fRouter)
pEntry->fIpPrioritizeRemote = Button_GetCheck( pInfo->hwndCbRemote );
pEntry->fDirty = TRUE;
return TRUE;
}
VOID
PtTerm(
IN HWND hwndDlg )
/* Called on WM_DESTROY. 'HwndDlg' is that handle of the dialog window.
*/
{
PTINFO* pInfo = (PTINFO* )GetWindowLongPtr( hwndDlg, DWLP_USER );
TRACE("PtTerm");
if (pInfo)
Free( pInfo );
}
/*----------------------------------------------------------------------------
** SLIP TCP/IP entry point
**----------------------------------------------------------------------------
*/
BOOL
SlipTcpipDlg(
IN HWND hwndOwner,
IN OUT PBENTRY* pEntry )
/* Pops-up the TCPIP info dialog for SLIP. Initial address settings are
** read from 'pEntry' and the result of user's edits written there on "OK"
** exit. 'HwndOwner' is the window owning the dialog.
**
** Returns true if user pressed OK and succeeded, false if he pressed
** Cancel or encountered an error.
*/
{
int nStatus;
TRACE("SlipTcpipDlg");
nStatus =
(BOOL )DialogBoxParam(
g_hinstDll,
MAKEINTRESOURCE( DID_ST_SlipTcpipSettings ),
hwndOwner,
StDlgProc,
(LPARAM )pEntry );
if (nStatus == -1)
{
ErrorDlg( hwndOwner, SID_OP_LoadDlg, ERROR_UNKNOWN, NULL );
nStatus = FALSE;
}
return (BOOL )nStatus;
}
/*----------------------------------------------------------------------------
** SLIP TCP/IP Settings dialog
** Listed alphabetically following dialog proc
**----------------------------------------------------------------------------
*/
INT_PTR CALLBACK
StDlgProc(
IN HWND hwnd,
IN UINT unMsg,
IN WPARAM wparam,
IN LPARAM lparam )
/* DialogProc callback for the TCPIP Settings dialog. Parameters and
** return value are as described for standard windows 'DialogProc's.
*/
{
#if 0
TRACE4("StDlgProc(h=$%x,m=$%x,w=$%x,l=$%x)",
(DWORD)hwnd,(DWORD)unMsg,(DWORD)wparam,(DWORD)lparam);
#endif
switch (unMsg)
{
case WM_INITDIALOG:
return StInit( hwnd, (PBENTRY* )lparam );
case WM_HELP:
case WM_CONTEXTMENU:
ContextHelp( g_adwStHelp, hwnd, unMsg, wparam, lparam );
break;
case WM_COMMAND:
{
STINFO* pInfo = (STINFO* )GetWindowLongPtr( hwnd, DWLP_USER );
ASSERT(pInfo);
return StCommand(
pInfo, HIWORD( wparam ), LOWORD( wparam ), (HWND )lparam );
}
case WM_DESTROY:
{
StTerm( hwnd );
break;
}
}
return FALSE;
}
BOOL
StCommand(
IN STINFO* pInfo,
IN WORD wNotification,
IN WORD wId,
IN HWND hwndCtrl )
/* Called on WM_COMMAND. 'PInfo' is the dialog context. 'WNotification'
** is the notification code of the command. 'wId' is the control/menu
** identifier of the command. 'HwndCtrl' is the control window handle of
** the command.
**
** Returns true if processed message, false otherwise.
*/
{
TRACE2("StCommand(n=%d,i=%d)",
(DWORD)wNotification,(DWORD)wId);
switch (wId)
{
case IDOK:
if (StSaveSettings( pInfo ))
EndDialog( pInfo->hwndDlg, FALSE );
return TRUE;
case IDCANCEL:
TRACE("Cancel pressed");
EndDialog( pInfo->hwndDlg, FALSE );
return TRUE;
}
return FALSE;
}
BOOL
StInit(
IN HWND hwndDlg,
IN PBENTRY* pEntry )
/* Called on WM_INITDIALOG. 'hwndDlg' is the handle of the phonebook
** dialog window. 'pEntry' is caller's entry as passed to the stub API.
**
** Return false if focus was set, true otherwise, i.e. as defined for
** WM_INITDIALOG.
*/
{
DWORD dwErr;
STINFO* pInfo;
TRACE("StInit");
/* Allocate the dialog context block. Initialize minimally for proper
** cleanup, then attach to the dialog window.
*/
{
pInfo = Malloc( sizeof(*pInfo) );
if (!pInfo)
{
ErrorDlg( hwndDlg, SID_OP_LoadDlg, ERROR_NOT_ENOUGH_MEMORY, NULL );
EndDialog( hwndDlg, FALSE );
return TRUE;
}
ZeroMemory( pInfo, sizeof(*pInfo) );
pInfo->pEntry = pEntry;
pInfo->hwndDlg = hwndDlg;
SetWindowLongPtr( hwndDlg, DWLP_USER, (LONG_PTR)pInfo );
TRACE("Context set");
}
pInfo->hwndCcIp = GetDlgItem( hwndDlg, CID_IP_CC_IpAddress );
ASSERT(pInfo->hwndCcIp);
pInfo->hwndCcDns = GetDlgItem( hwndDlg, CID_IP_CC_Dns );
ASSERT(pInfo->hwndCcDns);
pInfo->hwndCcDnsBackup = GetDlgItem( hwndDlg, CID_IP_CC_DnsBackup );
ASSERT(pInfo->hwndCcDnsBackup);
pInfo->hwndCcWins = GetDlgItem( hwndDlg, CID_IP_CC_Wins );
ASSERT(pInfo->hwndCcWins);
pInfo->hwndCcWinsBackup = GetDlgItem( hwndDlg, CID_IP_CC_WinsBackup );
ASSERT(pInfo->hwndCcWinsBackup);
pInfo->hwndCbCompress = GetDlgItem( hwndDlg, CID_IP_CB_Vj );
ASSERT(pInfo->hwndCbCompress);
pInfo->hwndCbRemote = GetDlgItem( hwndDlg, CID_IP_CB_PrioritizeRemote );
ASSERT(pInfo->hwndCbRemote);
pInfo->hwndLbFrameSize = GetDlgItem( hwndDlg, CID_IP_LB_FrameSize );
ASSERT(pInfo->hwndLbFrameSize);
/* Set the IP address and name server addresses as defined in the entry.
*/
SetWindowText( pInfo->hwndCcIp, pEntry->pszIpAddress );
SetWindowText( pInfo->hwndCcDns, pEntry->pszIpDnsAddress );
SetWindowText( pInfo->hwndCcDnsBackup, pEntry->pszIpDns2Address );
SetWindowText( pInfo->hwndCcWins, pEntry->pszIpWinsAddress );
SetWindowText( pInfo->hwndCcWinsBackup, pEntry->pszIpWins2Address );
/* Select check box settings as defined in the entry.
*/
if (pEntry->fIpHeaderCompression)
SendMessage( pInfo->hwndCbCompress, BM_CLICK, 0, 0 );
if (pEntry->fIpPrioritizeRemote)
SendMessage( pInfo->hwndCbRemote, BM_CLICK, 0, 0 );
/* Fill frame size list and select as defined in the entry.
*/
ComboBox_AddItem( pInfo->hwndLbFrameSize, TEXT("1006"), (VOID* )1006 );
ComboBox_AddItem( pInfo->hwndLbFrameSize, TEXT("1500"), (VOID* )1500 );
if (pEntry->dwFrameSize == 1006)
ComboBox_SetCurSel( pInfo->hwndLbFrameSize, 0 );
else if (pEntry->dwFrameSize == 1500)
ComboBox_SetCurSel( pInfo->hwndLbFrameSize, 1 );
else
{
TCHAR szBuf[ MAXLTOTLEN + 1 ];
LToT( pEntry->dwFrameSize, szBuf, 10 );
ComboBox_AddItem( pInfo->hwndLbFrameSize,
szBuf, (VOID* )UlongToPtr(pEntry->dwFrameSize));
ComboBox_SetCurSel( pInfo->hwndLbFrameSize, 2 );
}
/* Center dialog on the owner window.
*/
CenterWindow( hwndDlg, GetParent( hwndDlg ) );
/* Add context help button to title bar. Dlgedit.exe doesn't currently
** support this at resource edit time. When that's fixed set
** DS_CONTEXTHELP there and remove this call.
*/
AddContextHelpButton( hwndDlg );
return TRUE;
}
BOOL
StSaveSettings(
IN STINFO* pInfo )
/* Saves dialog settings in the entry. 'PInfo' is the dialog context.
**
** Returns true if successful, false if does not validate.
*/
{
PBENTRY* pEntry;
TRACE("StSaveSettings");
pEntry = pInfo->pEntry;
Free0( pEntry->pszIpAddress );
pEntry->pszIpAddress = GetText( pInfo->hwndCcIp );
Free0( pEntry->pszIpDnsAddress );
pEntry->pszIpDnsAddress = GetText( pInfo->hwndCcDns );
Free0( pEntry->pszIpDns2Address );
pEntry->pszIpDns2Address = GetText( pInfo->hwndCcDnsBackup );
Free0( pEntry->pszIpWinsAddress );
pEntry->pszIpWinsAddress = GetText( pInfo->hwndCcWins );
Free0( pEntry->pszIpWins2Address );
pEntry->pszIpWins2Address = GetText( pInfo->hwndCcWinsBackup );
pEntry->fIpHeaderCompression = Button_GetCheck( pInfo->hwndCbCompress );
pEntry->fIpPrioritizeRemote = Button_GetCheck( pInfo->hwndCbRemote );
pEntry->dwFrameSize = (DWORD)
ComboBox_GetItemData( pInfo->hwndLbFrameSize,
ComboBox_GetCurSel( pInfo->hwndLbFrameSize ) );
pEntry->fDirty = TRUE;
return TRUE;
}
VOID
StTerm(
IN HWND hwndDlg )
/* Called on WM_DESTROY. 'HwndDlg' is that handle of the dialog window.
*/
{
STINFO* pInfo = (STINFO* )GetWindowLongPtr( hwndDlg, DWLP_USER );
TRACE("StTerm");
if (pInfo)
Free( pInfo );
}