|
|
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
SERVCONN.C
Abstract:
Show server connection configuration dialog box
Author:
Bob Watson (a-robw)
Revision History:
17 Feb 94 Written
--*/ //
// Windows Include Files
//
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <tchar.h> // unicode macros
#include <commdlg.h> // common dialog defines
#include <lmcons.h> // lanman API constant definitions
#include <lmserver.h> // server info API's
//
// app include files
//
#include "otnboot.h"
#include "otnbtdlg.h"
//
#define IP_CHARLIMIT 15
//
#define NCDU_BROWSE_DEST_PATH (WM_USER + 101)
//
// Local data structures
//
typedef struct _NETWORK_PROTOCOL_NAMES { UINT nDisplayName; UINT nTransportName; DWORD dwTransportNameLength; BOOL bLoaded; int nListBoxEntry; } NETWORK_PROTOCOL_NAMES, *PNETWORK_PROTOCOL_NAMES; //
// static data
//
static NETWORK_PROTOCOL_NAMES NetProtocolList[] = { {CSZ_NW_LINK_PROTOCOL, NCDU_NW_LINK_TRANSPORT, 0, FALSE, CB_ERR}, {CSZ_TCP_IP_PROTOCOL, NCDU_TCP_IP_TRANSPORT, 0, FALSE, CB_ERR}, {CSZ_NETBEUI_PROTOCOL, NCDU_NETBEUI_TRANSPORT, 0, FALSE, CB_ERR}, // "terminating" entry in array
{0, 0, 0, FALSE, CB_ERR} };
static LPCTSTR GetDefaultDomain ( ) /*++
Routine Description:
Returns the domain the system is logged in to from the registry.
Arguments:
None
Return Value:
pointer to domain name string if successful or pointer to an empty strin if not.
--*/ { DWORD dwBufLen; DWORD dwDomainLen; static TCHAR szDomainName[32]; TCHAR szUserName[MAX_USERNAME + 1]; PSID pSid; SID_NAME_USE snu;
szDomainName[0] = 0; dwBufLen = MAX_USERNAME; if (GetUserName(szUserName, &dwBufLen)) { pSid = (PSID)GlobalAlloc(GPTR, SMALL_BUFFER_SIZE); if (pSid != NULL) { dwBufLen = (DWORD)GlobalSize(pSid); dwDomainLen = sizeof (szDomainName) / sizeof(TCHAR); LookupAccountName ( NULL, // Local system
szUserName, // username to look up
pSid, // SID buffer
&dwBufLen, // SID buffer size
szDomainName, // return buffer for domain name
&dwDomainLen, // size of buffer
&snu); FREE_IF_ALLOC(pSid); } }
return szDomainName;
}
static LPCTSTR GetDefaultUsername ( ) /*++
Routine Description:
Returns the user name of the account running the app
Arguments:
None
Return Value:
pointer to user name string if successful or pointer to an empty string if not.
--*/ { DWORD dwBufLen; static TCHAR szUserName[32];
szUserName[0] = 0; dwBufLen = sizeof(szUserName) / sizeof(TCHAR); // compute # of chars
GetUserName(szUserName, &dwBufLen);
return szUserName;
}
static LPCTSTR MakeIpAddrString ( IN USHORT IpAddr[] ) /*++
Routine Description:
formats integer array into an address string for display
Arguments:
IP Address info structure
Return Value:
pointer to formatted IP address string if successful or pointer to an empty string if not.
--*/ { static TCHAR szAddrBuffer[32];
szAddrBuffer[0] = 0;
_stprintf (szAddrBuffer, fmtIpAddr, IpAddr[0], IpAddr[1], IpAddr[2], IpAddr[3]);
return szAddrBuffer; }
static LONG ListNetworkTransports ( IN HWND hwndDlg, IN LPTSTR szServerName
) /*++
Routine Description:
reads the registry and builds a list of the network protocols that are supported on the selected server and loads the combo box with all possible transports.
Arguments:
IN HWND hwndDlg handle to dialog box window
IN LPTSTR szServerName server to validate protocols on
Return Value:
ERROR_SUCCESS if successful or WIN32 error value if not
--*/ { DWORD dwIndex; BOOL bDefaultFound;
DWORD dwSumOfEntries; DWORD dwEntriesRead; DWORD dwTotalEntries; DWORD dwResumeHandle;
LONG lStatus = ERROR_SUCCESS;
PNETWORK_PROTOCOL_NAMES pThisNetProtocol; PSERVER_TRANSPORT_INFO_0 pSrvrTransportInfo; PSERVER_TRANSPORT_INFO_0 pThisSrvrTransport; NET_API_STATUS netStatus;
pSrvrTransportInfo = (PSERVER_TRANSPORT_INFO_0)GlobalAlloc(GPTR, MEDIUM_BUFFER_SIZE);
if (pSrvrTransportInfo == NULL) { return ERROR_OUTOFMEMORY; }
// initialize static data
for (pThisNetProtocol = &NetProtocolList[0]; pThisNetProtocol->nDisplayName != 0; pThisNetProtocol = &pThisNetProtocol[1]) { pThisNetProtocol->dwTransportNameLength = lstrlen (GetStringResource (pThisNetProtocol->nTransportName)); pThisNetProtocol->bLoaded = FALSE; pThisNetProtocol->nListBoxEntry = CB_ERR; }
// build list of available network transports on server
dwEntriesRead = 0L; dwSumOfEntries = 0L; dwTotalEntries = 0xFFFFFFFF; dwResumeHandle = 0L; while (dwSumOfEntries != dwTotalEntries) { netStatus = NetServerTransportEnum ( szServerName, 0L, (LPBYTE *)&pSrvrTransportInfo, MEDIUM_BUFFER_SIZE, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
if (netStatus == NO_ERROR) { dwSumOfEntries += dwEntriesRead; for (dwIndex = 0; dwIndex < dwEntriesRead; dwIndex++) { pThisSrvrTransport = &pSrvrTransportInfo[dwIndex]; for (pThisNetProtocol = &NetProtocolList[0]; pThisNetProtocol->nDisplayName != 0; pThisNetProtocol = &pThisNetProtocol[1]) { if (_tcsnicmp (GetStringResource(pThisNetProtocol->nTransportName), pThisSrvrTransport->svti0_transportname, pThisNetProtocol->dwTransportNameLength) == 0) { if (lstrcmp (pThisSrvrTransport->svti0_networkaddress, cszZeroNetAddress) != 0) { pThisNetProtocol->bLoaded = TRUE; break; } } } } } else { // bail out of loop if an error is encountered
break; } }
// so all the supported protocols have been identified here, now
// reload the combo box.
bDefaultFound = FALSE; dwIndex = 0;
// empty the combo box
SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_RESETCONTENT, 0, 0);
for (pThisNetProtocol = &NetProtocolList[0]; pThisNetProtocol->nDisplayName != 0; pThisNetProtocol = &pThisNetProtocol[1]) { // load combo box with each "transports"
pThisNetProtocol->nListBoxEntry = (int)SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_ADDSTRING, (WPARAM)0, (LPARAM)GetStringResource (pThisNetProtocol->nDisplayName));
if (!bDefaultFound) { if (pThisNetProtocol->bLoaded) { bDefaultFound = TRUE; dwIndex = (DWORD)pThisNetProtocol->nListBoxEntry; } } }
// select default entry
SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_SETCURSEL, (WPARAM)dwIndex, 0);
FREE_IF_ALLOC(pSrvrTransportInfo);
return lStatus; }
static BOOL LoadIpAddrArray ( IN LPCTSTR szIpString, OUT USHORT nAddrItem[] ) /*++
Routine Description:
Parses the display string into the IP address array
Arguments:
IN LPCTSTR szIpString input string to parse
OUT USHORT nAddrItem[] array to receive the address elements. Element 0 is the left-most element in the display string.
Return Value:
TRUE if parsed successfully FALSE if error
--*/ { int nArgs; int nThisArg;
DWORD dw[4];
nArgs = _stscanf (szIpString, fmtIpAddrParse, &dw[0], &dw[1], &dw[2], &dw[3]);
if (nArgs == 4) { for (nThisArg = 0; nThisArg < nArgs; nThisArg++) { if (dw[nThisArg] > 255) { // bad value
return FALSE; } else { // valid so copy the low byte of the value since that's
// all that's allowed for an IP address or mask
nAddrItem[nThisArg] = (USHORT)(dw[nThisArg] & 0x000000FF); } } } else { return FALSE; }
return TRUE;
}
static VOID SetTcpIpWindowState ( IN HWND hwndDlg ) /*++
Routine Description:
enables the IP address fields when TCP/IP protocol is enabled and disabled the IP address fields when it is not selected.
Arguments:
IN HWND hwndDlg handle to the dialog box window
Return Value:
NONE
--*/ { LPTSTR szProtocol; int nComboItem; BOOL bFrameState, bAddrState;
szProtocol = (LPTSTR)GlobalAlloc (GPTR, MAX_PATH_BYTES);
if (szProtocol == NULL) return;
nComboItem = (int)SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_GETCURSEL, 0, 0); SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_GETLBTEXT, (WPARAM)nComboItem, (LPARAM)szProtocol);
if (_tcsnicmp(szProtocol, cszTcpKey, lstrlen(cszTcpKey)) == 0) { bFrameState = TRUE; if (IsDlgButtonChecked(hwndDlg, NCDU_USE_DHCP) == CHECKED) { bAddrState = FALSE; } else { bAddrState = TRUE; } } else { bFrameState = FALSE; bAddrState = FALSE; }
EnableWindow (GetDlgItem(hwndDlg,NCDU_USE_DHCP), bFrameState); EnableWindow (GetDlgItem(hwndDlg,NCDU_FLOPPY_IP_ADDR_LABEL), bAddrState); EnableWindow (GetDlgItem(hwndDlg,NCDU_FLOPPY_IP_ADDR), bAddrState); EnableWindow (GetDlgItem(hwndDlg,NCDU_FLOPPY_SUBNET_LABEL), bAddrState); EnableWindow (GetDlgItem(hwndDlg,NCDU_FLOPPY_SUBNET_MASK), bAddrState); EnableWindow (GetDlgItem(hwndDlg,NCDU_DEFAULT_GATEWAY_LABEL), bFrameState); EnableWindow (GetDlgItem(hwndDlg,NCDU_DEFAULT_GATEWAY), bFrameState); EnableWindow (GetDlgItem(hwndDlg,NCDU_TCPIP_INFO_FRAME), bFrameState);
FREE_IF_ALLOC (szProtocol); }
static BOOL ComputeDefaultDefaultGateway ( IN HWND hwndDlg ) /*++
Routine Description:
Generates a default value for the default gateway using the IP address and Sub Net mask
Arguments:
Handle to the dialog box window
Return Value:
TRUE if a default value was entered, FALSE if not
--*/ { TCHAR szIpAddr[IP_CHARLIMIT+1]; TCHAR szSubNet[IP_CHARLIMIT+1]; TCHAR szDefGate[IP_CHARLIMIT+1];
USHORT usIpArray[4], usSnArray[4], usDgArray[4];
// if not initialized, then preset to
// default value
GetDlgItemText (hwndDlg, NCDU_FLOPPY_IP_ADDR, szIpAddr, IP_CHARLIMIT); if (LoadIpAddrArray(szIpAddr, &usIpArray[0])) { GetDlgItemText (hwndDlg, NCDU_FLOPPY_SUBNET_MASK, szSubNet, IP_CHARLIMIT); if (LoadIpAddrArray(szSubNet, &usSnArray[0])) { GetDlgItemText (hwndDlg, NCDU_DEFAULT_GATEWAY, szDefGate, IP_CHARLIMIT); if (LoadIpAddrArray(szDefGate, &usDgArray[0])) { if ((usDgArray[0] == 0) && (usDgArray[1] == 0) && (usDgArray[2] == 0) && (usDgArray[3] == 0)) { usDgArray[0] = usIpArray[0] & usSnArray[0]; usDgArray[1] = usIpArray[1] & usSnArray[1]; usDgArray[2] = usIpArray[2] & usSnArray[2]; usDgArray[3] = usIpArray[3] & usSnArray[3]; SetDlgItemText (hwndDlg, NCDU_DEFAULT_GATEWAY, MakeIpAddrString(&usDgArray[0])); return TRUE; // value updated
} } } } return FALSE; // value not updated
}
static BOOL ServerConnDlg_WM_INITDIALOG ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++
Routine Description:
Processes the WM_INITDIALOG windows message by initializing the display fields in the dialog box and setting focus to the first entry field
Arguments:
IN HWND hwndDlg Handle to the dialog box window
IN WPARAM wParam Not Used
IN LPARAM lParam Not Used
Return Value:
FALSE
--*/ { LONG lProtocolNdx; LPTSTR szServerArg; LPTSTR szServerName; LPTSTR szPathOnServer;
szServerName = (LPTSTR)GlobalAlloc (GPTR, MAX_PATH_BYTES); szPathOnServer = (LPTSTR)GlobalAlloc (GPTR, MAX_PATH_BYTES);
if ((szServerName == NULL) || (szPathOnServer == NULL)) { SetLastError (ERROR_OUTOFMEMORY); EndDialog (hwndDlg, (int)WM_CLOSE); return FALSE; }
RemoveMaximizeFromSysMenu (hwndDlg); PositionWindow (hwndDlg);
// get name of server with client tree
lstrcpy (szServerName, cszDoubleBackslash); if (!GetNetPathInfo (pAppInfo->szDistPath, &szServerName[2], szPathOnServer)) { // unable to look up server, so use local path
szServerArg = NULL; } else { szServerArg = szServerName; }
ListNetworkTransports (hwndDlg, szServerArg);
// select current protocol (if any)
if (*pAppInfo->piFloppyProtocol.szName != 0) { lProtocolNdx = (LONG)SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_FINDSTRING, (WPARAM)0, (LPARAM)pAppInfo->piFloppyProtocol.szName); if (lProtocolNdx == CB_ERR) { // selection not found so apply default
lProtocolNdx = 0; } SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_SETCURSEL, (WPARAM)lProtocolNdx, 0); }
SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_USERNAME, EM_LIMITTEXT, MAX_USERNAME, 0); if (pAppInfo->szUsername[0] == 0) { SetDlgItemText (hwndDlg, NCDU_FLOPPY_USERNAME, GetDefaultUsername()); } else { SetDlgItemText (hwndDlg, NCDU_FLOPPY_USERNAME, pAppInfo->szUsername); }
SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_COMPUTER_NAME, EM_LIMITTEXT, MAX_COMPUTERNAME_LENGTH, 0); SetDlgItemText (hwndDlg, NCDU_FLOPPY_COMPUTER_NAME, pAppInfo->szComputerName);
SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_DOMAIN, EM_LIMITTEXT, MAX_DOMAINNAME, 0); if (pAppInfo->szDomain[0] == 0) { SetDlgItemText (hwndDlg, NCDU_FLOPPY_DOMAIN, GetDefaultDomain()); } else { SetDlgItemText (hwndDlg, NCDU_FLOPPY_DOMAIN, pAppInfo->szDomain); } SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_IP_ADDR, EM_LIMITTEXT, (WPARAM)IP_CHARLIMIT, 0); SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_SUBNET_MASK, EM_LIMITTEXT, (WPARAM)IP_CHARLIMIT, 0); SetDlgItemText (hwndDlg, NCDU_FLOPPY_IP_ADDR, MakeIpAddrString(&pAppInfo->tiTcpIpInfo.IpAddr[0])); SetDlgItemText (hwndDlg, NCDU_FLOPPY_SUBNET_MASK, MakeIpAddrString(&pAppInfo->tiTcpIpInfo.SubNetMask[0])); SetDlgItemText (hwndDlg, NCDU_DEFAULT_GATEWAY, MakeIpAddrString(&pAppInfo->tiTcpIpInfo.DefaultGateway[0]));
if (pAppInfo->bUseDhcp) { CheckDlgButton (hwndDlg, NCDU_USE_DHCP, CHECKED); } else { CheckDlgButton (hwndDlg, NCDU_USE_DHCP, UNCHECKED); }
SendDlgItemMessage (hwndDlg, NCDU_TARGET_DRIVEPATH, EM_LIMITTEXT, (WPARAM)(MAX_PATH-1), (LPARAM)0);
if (*pAppInfo->szBootFilesPath == 0) { SetDlgItemText (hwndDlg, NCDU_TARGET_DRIVEPATH, cszADriveRoot); } else { SetDlgItemText (hwndDlg, NCDU_TARGET_DRIVEPATH, pAppInfo->szBootFilesPath); }
SetTcpIpWindowState (hwndDlg); SetFocus (GetDlgItem(hwndDlg, NCDU_FLOPPY_COMPUTER_NAME)); // clear old Dialog and register current
PostMessage (GetParent(hwndDlg), NCDU_CLEAR_DLG, (WPARAM)hwndDlg, IDOK); PostMessage (GetParent(hwndDlg), NCDU_REGISTER_DLG, NCDU_SERVER_CFG_DLG, (LPARAM)hwndDlg);
FREE_IF_ALLOC(szServerName); FREE_IF_ALLOC(szPathOnServer);
return FALSE; }
static BOOL ServerConnDlg_IDOK ( IN HWND hwndDlg ) /*++
Routine Description:
Processes the OK button command by validating the entries and storing them in the global application data structure. If an invalid value is detected a message box is displayed and the focus is set to the offending field, otherwise, the dialog box is terminated.
Arguments:
IN HWND hwndDlg Handle to the dialog box window
Return Value:
FALSE
--*/ { int nComboItem; int nMbResult;
TCHAR szIp[IP_CHARLIMIT*2]; MEDIA_TYPE mtDest;
BOOL bProtocolLoaded; PNETWORK_PROTOCOL_NAMES pThisNetProtocol;
// save settings
GetDlgItemText (hwndDlg, NCDU_FLOPPY_COMPUTER_NAME, pAppInfo->szComputerName, MAX_COMPUTERNAME_LENGTH); TrimSpaces (pAppInfo->szComputerName); // see if there is a string...signal if no entry
if (lstrlen(pAppInfo->szComputerName) == 0) { DisplayMessageBox ( hwndDlg, NCDU_INVALID_MACHINENAME, 0, MB_OK_TASK_EXCL); SetFocus (GetDlgItem (hwndDlg, NCDU_FLOPPY_COMPUTER_NAME)); return TRUE; }
GetDlgItemText (hwndDlg, NCDU_FLOPPY_USERNAME, pAppInfo->szUsername, MAX_USERNAME); TrimSpaces (pAppInfo->szUsername); GetDlgItemText (hwndDlg, NCDU_FLOPPY_DOMAIN, pAppInfo->szDomain, MAX_DOMAINNAME); TrimSpaces (pAppInfo->szDomain); nComboItem = (int)SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_GETCURSEL, 0, 0); SendDlgItemMessage (hwndDlg, NCDU_PROTOCOL_COMBO_BOX, CB_GETLBTEXT, (WPARAM)nComboItem, (LPARAM)pAppInfo->piFloppyProtocol.szName);
// look up keyname from protocol name
if (_tcsnicmp(pAppInfo->piFloppyProtocol.szName, cszTcpKey, lstrlen(cszTcpKey)) == 0) { lstrcpy(pAppInfo->piFloppyProtocol.szKey, cszTcpIpEntry); } else if (_tcsnicmp(pAppInfo->piFloppyProtocol.szName, cszNetbeuiKey, lstrlen(cszNetbeuiKey)) == 0) { AddMessageToExitList (pAppInfo, NCDU_NETBEUI_NOT_ROUT); lstrcpy(pAppInfo->piFloppyProtocol.szKey, cszNetbeuiEntry); } else if (_tcsnicmp(pAppInfo->piFloppyProtocol.szName, cszIpxKey, lstrlen(cszIpxKey)) == 0) { lstrcpy(pAppInfo->piFloppyProtocol.szKey, cszIpxEntry); } else { lstrcpy(pAppInfo->piFloppyProtocol.szKey, cszEmptyString); }
// see if this protocol is supported by the server
bProtocolLoaded = FALSE;
for (pThisNetProtocol = &NetProtocolList[0]; pThisNetProtocol->nDisplayName != 0; pThisNetProtocol = &pThisNetProtocol[1]) { // load combo box with "transports"
if (pThisNetProtocol->nListBoxEntry == nComboItem) { if (pThisNetProtocol->bLoaded) { bProtocolLoaded = TRUE; } } }
if (!bProtocolLoaded) { nMbResult = DisplayMessageBox (hwndDlg, NCDU_UNSUP_PROTOCOL, 0, MB_OKCANCEL_TASK_EXCL); if (nMbResult != IDOK) { return TRUE; } }
//
// Get target drive and path
//
GetDlgItemText (hwndDlg, NCDU_TARGET_DRIVEPATH, pAppInfo->szBootFilesPath, MAX_PATH); TrimSpaces (pAppInfo->szBootFilesPath); mtDest = GetDriveTypeFromPath(pAppInfo->szBootFilesPath); if (mtDest == Unknown) { nMbResult = DisplayMessageBox ( hwndDlg, NCDU_NO_MEDIA, 0, MB_OKCANCEL_TASK_EXCL); switch (nMbResult) { case IDOK: break;
case IDCANCEL: // they want to go back to the dialog and insert a disk so bail out
return TRUE; } } else if (mtDest != pAppInfo->mtBootDriveType) { nMbResult = DisplayMessageBox ( hwndDlg, NCDU_DEST_NOT_FLOPPY, 0, MB_OKCANCEL_TASK_EXCL); switch (nMbResult) { case IDOK: break;
case IDCANCEL: // they want to go back to the dialog so bail out
SetFocus (GetDlgItem(hwndDlg, NCDU_TARGET_DRIVEPATH)); return TRUE; } }
if (IsDlgButtonChecked(hwndDlg, NCDU_USE_DHCP) == CHECKED) { pAppInfo->bUseDhcp = TRUE; pAppInfo->tiTcpIpInfo.IpAddr[0] = 0; pAppInfo->tiTcpIpInfo.IpAddr[1] = 0; pAppInfo->tiTcpIpInfo.IpAddr[2] = 0; pAppInfo->tiTcpIpInfo.IpAddr[3] = 0; pAppInfo->tiTcpIpInfo.SubNetMask[0] = 0; pAppInfo->tiTcpIpInfo.SubNetMask[1] = 0; pAppInfo->tiTcpIpInfo.SubNetMask[2] = 0; pAppInfo->tiTcpIpInfo.SubNetMask[3] = 0; PostMessage (GetParent(hwndDlg), NCDU_SHOW_CONFIRM_DLG, 0, 0); } else { pAppInfo->bUseDhcp = FALSE; GetDlgItemText (hwndDlg, NCDU_FLOPPY_IP_ADDR, szIp, (IP_CHARLIMIT *2)); if (LoadIpAddrArray(szIp, &pAppInfo->tiTcpIpInfo.IpAddr[0])) { GetDlgItemText (hwndDlg, NCDU_FLOPPY_SUBNET_MASK, szIp, (IP_CHARLIMIT *2)); if (LoadIpAddrArray(szIp, &pAppInfo->tiTcpIpInfo.SubNetMask[0])) { GetDlgItemText (hwndDlg, NCDU_DEFAULT_GATEWAY, szIp, (IP_CHARLIMIT *2)); if (LoadIpAddrArray(szIp, &pAppInfo->tiTcpIpInfo.DefaultGateway[0])) { PostMessage (GetParent(hwndDlg), NCDU_SHOW_CONFIRM_DLG, 0, 0); } else { // bad Default Gateway
DisplayMessageBox ( hwndDlg, NCDU_BAD_DEFAULT_GATEWAY, 0, MB_OK_TASK_EXCL); SetFocus (GetDlgItem (hwndDlg, NCDU_DEFAULT_GATEWAY)); SendDlgItemMessage (hwndDlg, NCDU_DEFAULT_GATEWAY, EM_SETSEL, (WPARAM)0, (LPARAM)-1); } } else { // bad Subnet Mask
DisplayMessageBox ( hwndDlg, NCDU_BAD_SUBNET_MASK, 0, MB_OK_TASK_EXCL); SetFocus (GetDlgItem (hwndDlg, NCDU_FLOPPY_SUBNET_MASK)); SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_SUBNET_MASK, EM_SETSEL, (WPARAM)0, (LPARAM)-1); } } else { // bad IP
DisplayMessageBox ( hwndDlg, NCDU_BAD_IP_ADDR, 0, MB_OK_TASK_EXCL); SetFocus (GetDlgItem (hwndDlg, NCDU_FLOPPY_IP_ADDR)); SendDlgItemMessage (hwndDlg, NCDU_FLOPPY_IP_ADDR, EM_SETSEL, (WPARAM)0, (LPARAM)-1); } }
return FALSE; }
static BOOL ServerConnDlg_WM_COMMAND ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++
Routine Description:
Dispatches to the correct routine based on the user input. Enables/disables the TCP/IP address info fields when the Protocol is changed Ends the dialog box if Cancel is selected Dispatches to the IDOK function if OK selected.
Arguments:
IN HWND hwndDlg Handle to dialog box window
IN WPARAM wParam LOWORD contains the ID of the control issuing the command
IN LPARAM lParam Not used
Return Value:
FALSE if processed TRUE if not processed
--*/ { switch (LOWORD(wParam)) { case NCDU_USE_DHCP: case NCDU_PROTOCOL_COMBO_BOX: SetTcpIpWindowState (hwndDlg); return TRUE;
case NCDU_BROWSE: PostMessage (hwndDlg, NCDU_BROWSE_DEST_PATH, 0, 0); return TRUE;
case IDCANCEL: PostMessage (GetParent(hwndDlg), NCDU_SHOW_TARGET_WS_DLG, 0, 0); return TRUE;
case NCDU_DEFAULT_GATEWAY: if (HIWORD(wParam) == EN_SETFOCUS) { ComputeDefaultDefaultGateway (hwndDlg); return TRUE; } else { return FALSE; }
case IDOK: return ServerConnDlg_IDOK(hwndDlg); case NCDU_SERVER_CONN_CFG_HELP: switch (HIWORD(wParam)) { case BN_CLICKED: // return ShowAppHelp (hwndDlg, LOWORD(wParam));
return PostMessage (GetParent(hwndDlg), WM_HOTKEY, (WPARAM)NCDU_HELP_HOT_KEY, 0);
default: return FALSE; }
default: return FALSE; } }
static BOOL ServerConnDlg_NCDU_BROWSE_DEST_PATH ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++
Routine Description:
Displays the file /dir browser to enter the destination path entry
Arguments:
IN HWND hwndDlg Handle to dialog box window
IN WPARAM wParam Not Used
IN LPARAM lParam Not Used
Return Value:
FALSE
--*/ { DB_DATA BrowseInfo; TCHAR szTempPath[MAX_PATH+1];
GetDlgItemText (hwndDlg, NCDU_TARGET_DRIVEPATH, szTempPath, MAX_PATH);
BrowseInfo.dwTitle = NCDU_BROWSE_COPY_DEST_PATH; BrowseInfo.szPath = szTempPath; BrowseInfo.Flags = PDB_FLAGS_NOCHECKDIR;
if (DialogBoxParam ( (HINSTANCE)GetWindowLongPtr(hwndDlg, GWLP_HINSTANCE), MAKEINTRESOURCE(NCDU_DIR_BROWSER), hwndDlg, DirBrowseDlgProc, (LPARAM)&BrowseInfo) == IDOK) {
SetDlgItemText (hwndDlg, NCDU_TARGET_DRIVEPATH, szTempPath);
} SetFocus( GetDlgItem(hwndDlg, NCDU_TARGET_DRIVEPATH));
return TRUE; }
static BOOL ServerConnDlg_NCDU_WM_NCDESTROY ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) { return TRUE; }
INT_PTR CALLBACK ServerConnDlgProc ( IN HWND hwndDlg, IN UINT message, IN WPARAM wParam, IN LPARAM lParam ) /*++
Routine Description:
Dialog box procedure for the Server connection configuration dialog box. The following windows messages are processed by this function:
WM_INITDIALOG: Dialog box initialization WM_COMMAND: user input WM_NCDESTROY: to free memory before leaving
all other messages are sent to the default dialog box proc.
Arguments:
Standard WNDPROC arguments
Return Value:
FALSE if message not processed by this module, otherwise the value returned by the dispatched routine.
--*/ { switch (message) { case WM_INITDIALOG: return (ServerConnDlg_WM_INITDIALOG (hwndDlg, wParam, lParam)); case WM_COMMAND: return (ServerConnDlg_WM_COMMAND (hwndDlg, wParam, lParam)); case NCDU_BROWSE_DEST_PATH: return (ServerConnDlg_NCDU_BROWSE_DEST_PATH (hwndDlg, wParam, lParam)); case WM_PAINT: return (Dlg_WM_PAINT (hwndDlg, wParam, lParam)); case WM_MOVE: return (Dlg_WM_MOVE (hwndDlg, wParam, lParam)); case WM_SYSCOMMAND: return (Dlg_WM_SYSCOMMAND (hwndDlg, wParam, lParam)); case WM_NCDESTROY: return (ServerConnDlg_NCDU_WM_NCDESTROY (hwndDlg, wParam, lParam)); default: return FALSE; } }
|