|
|
/*==========================================================================
* * Copyright (C) 1998-2000 Microsoft Corporation. All Rights Reserved. * * File: IPUI.cpp * Content: Winsock service provider IP UI functions * * * History: * Date By Reason * ==== == ====== * 10/15/1999 jtk Dervied from ComPortUI.cpp ***************************************************************************/
#include "dnwsocki.h"
#ifndef DPNBUILD_NOSPUI
//**********************************************************************
// Constant definitions
//**********************************************************************
//
// expected return from IP dialog
//
static const INT_PTR g_iExpectedIPDialogReturn = 0x12345678;
//**********************************************************************
// Macro definitions
//**********************************************************************
//**********************************************************************
// Structure definitions
//**********************************************************************
//**********************************************************************
// Variable definitions
//**********************************************************************
//**********************************************************************
// Function prototypes
//**********************************************************************
static INT_PTR CALLBACK SettingsDialogProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static HRESULT SetIPHostName( const HWND hDlg, const CEndpoint *const pEndpoint ); static HRESULT GetDialogData( const HWND hDlg, CEndpoint *const pEndpoint );
//**********************************************************************
// Function definitions
//**********************************************************************
//**********************************************************************
// ------------------------------
// DisplayIPHostNameDialog - dialog for comport settings
//
// Entry: Pointer to endpoint
//
// Exit: Error code
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "DisplayIPHostNameSettingsDialog"
void DisplayIPHostNameSettingsDialog( void *const pContext ) { CEndpoint *pEndpoint; INT_PTR iDlgReturn;
DNASSERT( pContext != NULL );
//
// intialize
//
pEndpoint = static_cast<CEndpoint*>( pContext ); DBG_CASSERT( sizeof( pEndpoint ) == sizeof( LPARAM ) );
DPFX(DPFPREP, 5, "Starting IP settings dialog for endpoint 0x%p.", pEndpoint ); SetLastError( ERROR_SUCCESS ); iDlgReturn = DialogBoxParam( g_hDLLInstance, // handle of module for resources
MAKEINTRESOURCE( IDD_IP_SETTINGS ), // resource for dialog
NULL, // parent window (none)
SettingsDialogProc, // dialog message proc
reinterpret_cast<LPARAM>( pEndpoint ) // startup parameter
); if ( iDlgReturn != g_iExpectedIPDialogReturn ) { DWORD dwError;
dwError = GetLastError(); DPFX(DPFPREP, 0, "Failed to start IP settings dialog!" ); DisplayErrorCode( 0, dwError ); pEndpoint->SettingsDialogComplete( DPNERR_OUTOFMEMORY ); }
return; } //**********************************************************************
//**********************************************************************
// ------------------------------
// SetopIPHostNameSettingsDialog - stop dialog dialog for serial settings
//
// Entry: Handle of dialog
//
// Exit: Nothing
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "StopIPHostNameSettingsDialog"
void StopIPHostNameSettingsDialog( const HWND hDlg ) { DNASSERT( hDlg != NULL ); if ( PostMessage( hDlg, WM_COMMAND, MAKEWPARAM( IDCANCEL, NULL ), NULL ) == 0 ) { DWORD dwError;
dwError = GetLastError(); DPFX(DPFPREP, 0, "Failed to stop dialog!" ); DisplayErrorCode( 0, dwError ); DNASSERT( FALSE ); } } //**********************************************************************
//**********************************************************************
// ------------------------------
// SettingsDialogProc - dialog proc serial settings
//
// Entry: Window handle
// Message
// Message LPARAM
// Message WPARAM
//
// Exit: Error code
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "SettingsDialogProc"
static INT_PTR CALLBACK SettingsDialogProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { CEndpoint *pEndpoint; HRESULT hr;
//
// initialize
//
hr = DPN_OK; pEndpoint = NULL;
//
// Get the dialog context. Note that the dialog context will be NULL
// until the WM_INITDIALOG message is processed so the endpoint may note be
// availble yet.
//
DBG_CASSERT( sizeof( pEndpoint ) == sizeof( LPARAM ) ); pEndpoint = reinterpret_cast<CEndpoint*>( GetWindowLongPtr( hDlg, GWLP_USERDATA ) );
switch ( uMsg ) { //
// initialize dialog
//
case WM_INITDIALOG: { //
// since this is the first dialog message, the default code to set
// pEndpoint isn't getting valid data
//
DBG_CASSERT( sizeof( pEndpoint ) == sizeof( lParam ) ); pEndpoint = reinterpret_cast<CEndpoint*>( lParam ); pEndpoint->Lock(); if (pEndpoint->GetState() == ENDPOINT_STATE_DISCONNECTING) { hr = DPNERR_USERCANCEL; goto Failure; } else { pEndpoint->SetActiveDialogHandle( hDlg ); } pEndpoint->Unlock();
//
// SetWindowLongPtr() returns NULL in case of error. It's possible that
// the old value from SetWindowLongPtr() was really NULL in which case it's not
// an error. To be safe, clear any residual error code before calling
// SetWindowLongPtr().
//
SetLastError( 0 ); if ( SetWindowLongPtr( hDlg, GWLP_USERDATA, lParam ) == NULL ) { DWORD dwError;
dwError = GetLastError(); if ( dwError != ERROR_SUCCESS ) { DPFX(DPFPREP, 0, "Problem setting user data for window!" ); DisplayErrorCode( 0, dwError ); hr = DPNERR_GENERIC; goto Failure; } }
//
// set dialog parameters
//
if ( ( hr = SetIPHostName( hDlg, pEndpoint ) ) != DPN_OK ) { DPFX(DPFPREP, 0, "Problem setting device in WM_INITDIALOG!" ); DisplayDNError( 0, hr ); goto Failure; }
return TRUE;
break; }
//
// a control did something
//
case WM_COMMAND: { //
// what was the control?
//
switch ( LOWORD( wParam ) ) { case IDOK: { if ( ( hr = GetDialogData( hDlg, pEndpoint ) ) != DPN_OK ) { DPFX(DPFPREP, 0, "Problem getting UI data!" ); DisplayDNError( 0, hr ); goto Failure; }
//
// pass any error code on to 'DialogComplete'
//
EndDialog( hDlg, g_iExpectedIPDialogReturn ); pEndpoint->SettingsDialogComplete( hr );
break; }
case IDCANCEL: { EndDialog( hDlg, g_iExpectedIPDialogReturn ); pEndpoint->SettingsDialogComplete( DPNERR_USERCANCEL );
break; }
default: { break; } }
break; }
// window is closing
case WM_CLOSE: { break; } }
Exit: return FALSE;
Failure: DNASSERT( pEndpoint != NULL ); DNASSERT( hr != DPN_OK ); pEndpoint->SettingsDialogComplete( hr ); EndDialog( hDlg, g_iExpectedIPDialogReturn );
goto Exit; } //**********************************************************************
//**********************************************************************
// ------------------------------
// SetIPHostName - set hostname field
//
// Entry: Window handle
// Pointer to endpoint
//
// Exit: Error code
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "SetIPHostName"
static HRESULT SetIPHostName( const HWND hDlg, const CEndpoint *const pEndpoint ) { HRESULT hr; HWND hEditControl;
//
// initialize
//
hr = DPN_OK; hEditControl = GetDlgItem( hDlg, IDC_EDIT_IP_HOSTNAME ); if ( hEditControl == NULL ) { DWORD dwErrorCode;
hr = DPNERR_GENERIC; dwErrorCode = GetLastError(); DPFX(DPFPREP, 0, "Problem getting handle of hostname edit control!" ); DisplayErrorCode( 0, dwErrorCode ); goto Failure; }
//
// set edit field limit (this message does not have a return result)
//
SendMessage( hEditControl, EM_LIMITTEXT, TEMP_HOSTNAME_LENGTH, 0 );
//
// add string to dialog
//
if ( SetWindowText( hEditControl, TEXT("") ) == FALSE ) { DWORD dwErrorCode;
hr = DPNERR_OUTOFMEMORY; dwErrorCode = GetLastError(); DPFX(DPFPREP, 0, "Problem setting IP hostname in dialog!" ); DisplayErrorCode( 0, dwErrorCode ); goto Failure; }
Failure: return hr; } //**********************************************************************
//**********************************************************************
// ------------------------------
// GetDialogData - set endpoint data from serial dialog
//
// Entry: Window handle
// Pointer to endpoint
//
// Exit: Error code
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "GetDialogData"
static HRESULT GetDialogData( HWND hDlg, CEndpoint *pEndpoint ) { HRESULT hr; UINT_PTR uHostNameLength; TCHAR HostName[ TEMP_HOSTNAME_LENGTH ]; HWND hEditControl;
//
// initialize
//
hr = DPN_OK;
//
// get control ID and then the host name
//
hEditControl = GetDlgItem( hDlg, IDC_EDIT_IP_HOSTNAME ); if ( hEditControl == NULL ) { DWORD dwErrorCode;
DNASSERT( FALSE ); hr = DPNERR_OUTOFMEMORY; dwErrorCode = GetLastError(); DPFX(DPFPREP, 0, "Failed to get control handle when attempting to read IP hostname!" ); DisplayDNError( 0, dwErrorCode ); goto Failure; }
//
// Clear the error since Japanese Windows 9x does not seem to set it properly.
//
SetLastError(0); uHostNameLength = GetWindowText( hEditControl, HostName, LENGTHOF( HostName ) ); if ( uHostNameLength == 0 ) { DWORD dwErrorCode;
//
// zero, possible empty name or error
//
dwErrorCode = GetLastError(); if ( dwErrorCode != ERROR_SUCCESS ) { hr = DPNERR_OUTOFMEMORY; DPFX(DPFPREP, 0, "Failed to read hostname from dialog!" ); DisplayErrorCode( 0, dwErrorCode ); goto Failure; } }
pEndpoint->SetTempHostName( HostName, uHostNameLength );
Failure: return hr; } //**********************************************************************
#endif // !DPNBUILD_NOSPUI
|