Leaked source code of windows server 2003
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.
 
 
 
 
 
 

427 lines
10 KiB

/*==========================================================================
*
* 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