/*========================================================================== * * Copyright (C) 1998-2000 Microsoft Corporation. All Rights Reserved. * * File: ModemUI.cpp * Content: Modem service provider UI functions * * * History: * Date By Reason * ==== == ====== * 03/24/99 jtk Created ***************************************************************************/ #include "dnmdmi.h" //********************************************************************** // Constant definitions //********************************************************************** // default size of temp strings used to add stuff to dialog #define DEFAULT_DIALOG_STRING_SIZE 100 #define DEFAULT_DEVICE_SELECTION_INDEX 0 #define MAX_MODEM_NAME_LENGTH 255 //********************************************************************** // Macro definitions //********************************************************************** //********************************************************************** // Structure definitions //********************************************************************** //********************************************************************** // Variable definitions //********************************************************************** static const INT_PTR g_iExpectedIncomingModemSettingsReturn = 0x23456789; static const INT_PTR g_iExpectedOutgoingModemSettingsReturn = 0x3456789A; //********************************************************************** // Function prototypes //********************************************************************** static INT_PTR CALLBACK IncomingSettingsDialogProc( HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam ); static HRESULT SetAddressParametersFromIncomingDialogData( const HWND hDialog, CModemEndpoint *const pModemEndpoint ); static INT_PTR CALLBACK OutgoingSettingsDialogProc( HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam ); static HRESULT SetOutgoingPhoneNumber( const HWND hDialog, const CModemEndpoint *const pModemEndpoint ); static HRESULT SetAddressParametersFromOutgoingDialogData( const HWND hDialog, CModemEndpoint *const pModemEndpoint ); static HRESULT DisplayModemConfigDialog( const HWND hDialog, const HWND hDeviceComboBox, const CModemEndpoint *const pModemEndpoint ); static HRESULT SetModemDataInDialog( const HWND hComboBox, const CModemEndpoint *const pModemEndpoint ); static HRESULT GetModemSelectionFromDialog( const HWND hComboBox, CModemEndpoint *const pModemEndpoint ); static INT_PTR CALLBACK ModemStatusDialogProc( HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam ); //********************************************************************** // Function definitions //********************************************************************** //********************************************************************** // ------------------------------ // DisplayIncomingModemSettingsDialog - dialog for incoming modem connection // // Entry: Pointer to startup param // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "DisplayIncomingModemSettingsDialog" void DisplayIncomingModemSettingsDialog( void *const pContext ) { INT_PTR iDlgReturn; CModemEndpoint *pModemEndpoint; DNASSERT( pContext != NULL ); // // intialize // pModemEndpoint = static_cast( pContext ); DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( LPARAM ) ); SetLastError( ERROR_SUCCESS ); iDlgReturn = DialogBoxParam( g_hModemDLLInstance, // handle of module for resources MAKEINTRESOURCE( IDD_INCOMING_MODEM_SETTINGS ), // resource for dialog NULL, // no parent IncomingSettingsDialogProc, // dialog message proc reinterpret_cast( pModemEndpoint ) // startup parameter ); if ( iDlgReturn != g_iExpectedIncomingModemSettingsReturn ) { DWORD dwError; dwError = GetLastError(); DPFX(DPFPREP, 0, "Failed to start incoming modem settings dialog!" ); DisplayErrorCode( 0, dwError ); pModemEndpoint->SettingsDialogComplete( DPNERR_OUTOFMEMORY ); } return; } //********************************************************************** //********************************************************************** // ------------------------------ // DisplayOutgoingModemSettingsDialog - dialog for Outgoing modem connection // // Entry: Pointer to startup param // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "DisplayOutgoingModemSettingsDialog" void DisplayOutgoingModemSettingsDialog( void *const pContext ) { INT_PTR iDlgReturn; CModemEndpoint *pModemEndpoint; DNASSERT( pContext != NULL ); // // intialize // pModemEndpoint = static_cast( pContext ); DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( LPARAM ) ); SetLastError( ERROR_SUCCESS ); iDlgReturn = DialogBoxParam( g_hModemDLLInstance, // handle of module for resources MAKEINTRESOURCE( IDD_OUTGOING_MODEM_SETTINGS ), // resource for dialog NULL, // OutgoingSettingsDialogProc, // dialog message proc reinterpret_cast( pModemEndpoint ) // startup parameter ); if ( iDlgReturn != g_iExpectedOutgoingModemSettingsReturn ) { DWORD dwError; dwError = GetLastError(); DPFX(DPFPREP, 0, "Failed to start outgoing modem settings dialog!" ); DisplayErrorCode( 0, dwError ); pModemEndpoint->SettingsDialogComplete( DPNERR_OUTOFMEMORY ); } return; } //********************************************************************** //********************************************************************** // ------------------------------ // StopModemSettingsDialog - stop dialog dialog for modem settings // // Entry: Handle of dialog // // Exit: Nothing // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "StopModemSettingsDialog" void StopModemSettingsDialog( 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 ); } } //********************************************************************** ////********************************************************************** //// ------------------------------ //// DisplayModemStatusDialog - dialog for modem status //// //// Entry: Pointer to destination for dialog handle //// Pointer to startup param //// //// Exit: Error code //// ------------------------------ //HRESULT DisplayModemStatusDialog( HWND *const phDialog, CModemEndpoint *const pEndpoint ) //{ // HRESULT hr; // HWND hDialog; // // // // intialize // hr = DPN_OK; // // DBG_CASSERT( sizeof( pEndpoint ) == sizeof( LPARAM ) ); // hDialog = CreateDialogParam( g_hModemDLLInstance, // handle of module for resources // MAKEINTRESOURCE( IDD_MODEM_STATUS ), // resource for dialog // GetForegroundWindow(), // parent window (whatever is on top) // ModemStatusDialogProc, // dialog message proc // reinterpret_cast( pEndpoint ) // startup parameter // ); // if ( hDialog == NULL ) // { // DPFX(DPFPREP, 0, "Could not create modem status dialog!" ); // DisplayErrorCode( 0, GetLastError() ); // goto Failure; // } // // *phDialog = hDialog; // ShowWindow( hDialog, SW_SHOW ); // UpdateWindow( hDialog ); // //Exit: // return hr; // //Failure: // goto Exit; //} ////********************************************************************** // // ////********************************************************************** //// ------------------------------ //// StopModemStatusDialog - stop dialog for modem connection status //// //// Entry: Handle of dialog //// //// Exit: Nothing //// ------------------------------ //void StopModemStatusDialog( const HWND hDialog ) //{ // DNASSERT( hDialog != NULL ); // // if ( SendMessage( hDialog, WM_COMMAND, MAKEWPARAM( IDCANCEL, NULL ), NULL ) != 0 ) // { // // we didn't handle the message // DNASSERT( FALSE ); // } //} ////********************************************************************** //********************************************************************** // ------------------------------ // OutgoingSettingsDialogProc - dialog proc for outgoing modem connection // // Entry: Window handle // Message LPARAM // Message WPARAM // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "OutgoingSettingsDialogProc" static INT_PTR CALLBACK OutgoingSettingsDialogProc( HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam ) { CModemEndpoint *pModemEndpoint; HRESULT hr; // // initialize // hr = DPN_OK; // note the active endpoint pointer DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( LONG_PTR ) ); pModemEndpoint = reinterpret_cast( GetWindowLongPtr( hDialog, GWLP_USERDATA ) ); switch ( uMsg ) { // initialize dialog case WM_INITDIALOG: { // since this is the first dialog message, the default code to set // pModemEndpoint isn't getting valid data DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( lParam ) ); pModemEndpoint = reinterpret_cast( lParam ); pModemEndpoint->SetActiveDialogHandle( hDialog ); // // 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( hDialog, GWLP_USERDATA, lParam ) == NULL ) { DWORD dwError; dwError = GetLastError(); if ( dwError != ERROR_SUCCESS ) { DPFX(DPFPREP, 0, "Problem setting user data for window!" ); DisplayErrorCode( 0, dwError ); goto Failure; } } // // set dialog information // hr = SetModemDataInDialog( GetDlgItem( hDialog, IDC_COMBO_OUTGOING_MODEM_DEVICE ), pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem setting modem device!" ); DisplayDNError( 0, hr ); goto Failure; } hr = SetOutgoingPhoneNumber( hDialog, pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem setting phone number!" ); DisplayDNError( 0, hr ); goto Failure; } return TRUE; break; } // a control did something case WM_COMMAND: { // what was the control? switch ( LOWORD( wParam ) ) { case IDOK: { hr = SetAddressParametersFromOutgoingDialogData( hDialog, pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem getting dialog data!" ); DisplayDNError( 0, hr ); goto Failure; } // pass any error code on to 'DialogComplete' pModemEndpoint->SettingsDialogComplete( hr ); EndDialog( hDialog, g_iExpectedOutgoingModemSettingsReturn ); break; } case IDCANCEL: { pModemEndpoint->SettingsDialogComplete( DPNERR_USERCANCEL ); EndDialog( hDialog, g_iExpectedOutgoingModemSettingsReturn ); break; } case IDC_BUTTON_MODEM_CONFIGURE: { hr = DisplayModemConfigDialog( hDialog, GetDlgItem( hDialog, IDC_COMBO_OUTGOING_MODEM_DEVICE ), pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem with DisplayModemConfigDialog in outgoing dialog!" ); DisplayDNError( 0, hr ); } break; } } break; } // window is closing case WM_CLOSE: { break; } } Exit: return FALSE; Failure: DNASSERT( pModemEndpoint != NULL ); DNASSERT( hr != DPN_OK ); pModemEndpoint->SettingsDialogComplete( hr ); EndDialog( hDialog, g_iExpectedOutgoingModemSettingsReturn ); goto Exit; } //********************************************************************** //********************************************************************** // ------------------------------ // IncomingSettingsDialogProc - dialog proc for incoming modem connection // // Entry: Window handle // Message LPARAM // Message WPARAM // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "IncomingSettingsDialogProc" static INT_PTR CALLBACK IncomingSettingsDialogProc( HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam ) { CModemEndpoint *pModemEndpoint; HRESULT hr; // // initialize // hr = DPN_OK; // // note the modem port pointer // DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( LONG_PTR ) ); pModemEndpoint = reinterpret_cast( GetWindowLongPtr( hDialog, GWLP_USERDATA ) ); switch ( uMsg ) { // // initialize dialog // case WM_INITDIALOG: { // // since this is the first dialog message, the default code to set // pModemEndpoint isn't getting valid data // DBG_CASSERT( sizeof( pModemEndpoint) == sizeof( lParam ) ); pModemEndpoint = reinterpret_cast( lParam ); pModemEndpoint->SetActiveDialogHandle( hDialog ); // // 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( hDialog, GWLP_USERDATA, lParam ) == NULL ) { DWORD dwError; dwError = GetLastError(); if ( dwError != ERROR_SUCCESS ) { DPFX(DPFPREP, 0, "Problem setting user data for window!" ); DisplayErrorCode( 0, dwError ); goto Failure; } } // // set dialog information // hr = SetModemDataInDialog( GetDlgItem( hDialog, IDC_COMBO_INCOMING_MODEM_DEVICE ), pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem setting modem device!" ); DisplayDNError( 0, hr ); goto Failure; } return TRUE; break; } // // a control did something // case WM_COMMAND: { // what was the control? switch ( LOWORD( wParam ) ) { case IDOK: { hr = SetAddressParametersFromIncomingDialogData( hDialog, pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem getting dialog data!" ); DisplayDNError( 0, hr ); goto Failure; } // // pass any error code on to 'DialogComplete' // pModemEndpoint->SettingsDialogComplete( hr ); EndDialog( hDialog, g_iExpectedIncomingModemSettingsReturn ); break; } case IDCANCEL: { pModemEndpoint->SettingsDialogComplete( DPNERR_USERCANCEL ); EndDialog( hDialog, g_iExpectedIncomingModemSettingsReturn ); break; } case IDC_BUTTON_MODEM_CONFIGURE: { hr = DisplayModemConfigDialog( hDialog, GetDlgItem( hDialog, IDC_COMBO_INCOMING_MODEM_DEVICE ), pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem with DisplayModemConfigDialog in incoming dialog!" ); DisplayDNError( 0, hr ); } break; } } break; } // // window is closing // case WM_CLOSE: { DNASSERT( FALSE ); break; } } Exit: return FALSE; Failure: DNASSERT( pModemEndpoint != NULL ); DNASSERT( hr != DPN_OK ); pModemEndpoint->SettingsDialogComplete( hr ); EndDialog( hDialog, g_iExpectedIncomingModemSettingsReturn ); goto Exit; } //********************************************************************** ////********************************************************************** //// ------------------------------ //// ModemStatusDialogProc - dialog proc for modem status //// //// Entry: Window handle //// Message LPARAM //// Message WPARAM //// //// Exit: Error code //// ------------------------------ //static INT_PTR CALLBACK ModemStatusDialogProc( HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam ) //{ // CModemEndpoint *pModemEndpoint; // HRESULT hr; // // // initialize // hr = DPN_OK; // // // note the active endpoint pointer // DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( LONG_PTR ) ); // pModemEndpoint = reinterpret_cast( GetWindowLongPtr( hDialog, GWLP_USERDATA ) ); // // switch ( uMsg ) // { // // initialize dialog // case WM_INITDIALOG: // { // // since this is the first dialog message, the default code to set // // pModemEndpoint isn't getting valid data // DBG_CASSERT( sizeof( pModemEndpoint ) == sizeof( lParam ) ); // pModemEndpoint = reinterpret_cast( lParam ); // // // // // 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( hDialog, GWLP_USERDATA, lParam ) == NULL ) // { // DWORD dwError; // // dwError = GetLastError(); // if ( dwError != ERROR_SUCCESS ) // { // DPFX(DPFPREP, 0, "Problem setting user data for window!" ); // DisplayErrorCode( 0, dwError ); // goto Failure; // } // } // // // set dialog information // // return TRUE; // // break; // } // // // a control did something // case WM_COMMAND: // { // // what was the control? // switch ( LOWORD( wParam ) ) // { // case IDOK: // { //// HRESULT hr; // // //// if ( ( hr = GetDialogData( hDialog, pModemEndpoint ) ) != DPN_OK ) //// { //// DPFX(DPFPREP, 0, "Problem getting dialog data!" ); //// DisplayDNError( 0, hr ); //// goto Failure; //// } // //// // pass any error code on to 'DialogComplete' //// pModemEndpoint->DialogComplete( hr ); // DestroyWindow( hDialog ); // // break; // } // //// case IDCANCEL: //// { //// pModemEndpoint->DialogComplete( DPNERR_USERCANCEL ); //// DestroyWindow( hDialog ); //// //// break; //// } // } // // break; // } // // // window is closing // case WM_CLOSE: // { // break; // } // } // //Exit: // return FALSE; // //Failure: // DNASSERT( pModemEndpoint != NULL ); // DNASSERT( hr != DPN_OK ); //// pModemEndpoint->StatusDialogComplete( hr ); // DestroyWindow( hDialog ); // // goto Exit; //} ////********************************************************************** //********************************************************************** // ------------------------------ // SetModemDataInDialog - set device for modem dialog // // Entry: Window handle of modem combo box // Pointer to modem port // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "SetModemDataInDialog" HRESULT SetModemDataInDialog( const HWND hComboBox, const CModemEndpoint *const pModemEndpoint ) { HRESULT hr; LRESULT lResult; DWORD dwModemCount; MODEM_NAME_DATA *pModemNameData; DWORD dwModemNameDataSize; BOOL fSelectionSet; UINT_PTR uIndex; DNASSERT( hComboBox != NULL ); DNASSERT( pModemEndpoint != NULL ); // // initialize // hr = DPN_OK; pModemNameData = NULL; dwModemNameDataSize = 0; fSelectionSet = FALSE; lResult = SendMessage( hComboBox, CB_RESETCONTENT, 0, 0 ); // DNASSERT( lResult == CB_OKAY ); // <-- Win2K is busted!!!! hr = GenerateAvailableModemList( pModemEndpoint->GetSPData()->GetThreadPool()->GetTAPIInfo(), &dwModemCount, pModemNameData, &dwModemNameDataSize ); switch ( hr ) { // // no modems to list, no more processing to be done // case DPN_OK: { goto Exit; } // // expected return // case DPNERR_BUFFERTOOSMALL: { break; } // // error // default: { DPFX(DPFPREP, 0, "SetModemDataInDialog: Failed to get size of modem list!" ); DisplayDNError( 0, hr ); goto Failure; break; } } pModemNameData = static_cast( DNMalloc( dwModemNameDataSize ) ); if ( pModemNameData == NULL ) { hr = DPNERR_OUTOFMEMORY; DPFX(DPFPREP, 0, "SetModemDataInDialog: Failed to allocate memory to fill modem dialog list!" ); goto Failure; } hr = GenerateAvailableModemList( pModemEndpoint->GetSPData()->GetThreadPool()->GetTAPIInfo(), &dwModemCount, pModemNameData, &dwModemNameDataSize ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "SetModemDataInDialog: Failed to get size of modem list!" ); DisplayDNError( 0, hr ); goto Failure; } for ( uIndex = 0; uIndex < dwModemCount; uIndex++ ) { LRESULT AddResult; DBG_CASSERT( sizeof( pModemNameData[ uIndex ].pModemName ) == sizeof( LPARAM ) ); AddResult = SendMessage( hComboBox, CB_INSERTSTRING, 0, reinterpret_cast( pModemNameData[ uIndex ].pModemName ) ); switch ( AddResult ) { case CB_ERR: { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Problem adding serial device to combo box!" ); goto Failure; break; } case CB_ERRSPACE: { hr = DPNERR_OUTOFMEMORY; DPFX(DPFPREP, 0, "Out of memory when ading serial device to combo box!" ); goto Failure; break; } // // we added the string OK, set the associated device id and check // to see if this is the current value to set selection // default: { LRESULT SetResult; SetResult = SendMessage ( hComboBox, CB_SETITEMDATA, AddResult, pModemNameData[ uIndex ].dwModemID ); if ( SetResult == CB_ERR ) { DWORD dwError; hr = DPNERR_OUTOFMEMORY; dwError = GetLastError(); DPFX(DPFPREP, 0, "Problem setting modem device info!" ); DisplayErrorCode( 0, dwError ); goto Failure; } if ( pModemEndpoint->GetDeviceID() == uIndex ) { LRESULT SetSelectionResult; SetSelectionResult = SendMessage( hComboBox, CB_SETCURSEL, AddResult, 0 ); if ( SetSelectionResult == CB_ERR ) { DWORD dwError; hr = DPNERR_GENERIC; dwError = GetLastError(); DPFX(DPFPREP, 0, "Problem setting default modem device selection!" ); DisplayErrorCode( 0, dwError ); DNASSERT( FALSE ); goto Failure; } fSelectionSet = TRUE; } break; } } } if ( fSelectionSet == FALSE ) { LRESULT SetSelectionResult; SetSelectionResult = SendMessage( hComboBox, CB_SETCURSEL, 0, 0 ); if ( SetSelectionResult == CB_ERR ) { DWORD dwError; dwError = GetLastError(); DPFX(DPFPREP, 0, "Problem setting default modem selection!" ); DisplayErrorCode( 0, dwError ); } } Exit: if ( pModemNameData != NULL ) { DNFree( pModemNameData ); pModemNameData = NULL; } return hr; Failure: goto Exit; } //********************************************************************** //********************************************************************** // ------------------------------ // GetModemSelectionFromDialog - get modem selection from dialog // // Entry: Window handle of modem combo box // Pointer to modem port // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "GetModemSelectionFromDialog" static HRESULT GetModemSelectionFromDialog( const HWND hComboBox, CModemEndpoint *const pModemEndpoint ) { HRESULT hr; LRESULT Selection; LRESULT DeviceID; // // initialize // hr = DPN_OK; if ( hComboBox == NULL ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Invalid control handle passed to GetModemSelectionFromDialog!" ); goto Failure; } // // get modem selection // Selection = SendMessage( hComboBox, CB_GETCURSEL, 0, 0 ); if ( Selection == CB_ERR ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Could not get current modem selection!" ); DNASSERT( FALSE ); goto Failure; } // // get device ID // DeviceID = SendMessage( hComboBox, CB_GETITEMDATA, Selection, 0 ); if ( DeviceID == CB_ERR ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Could not get selection item data!" ); DNASSERT( FALSE ); goto Failure; } // // Now that we finally have the device ID, set it. Make sure // we clear any existing ID first, or the ID setting code will // complain. I like paranoid code, so work around the ASSERT. // DNASSERT( DeviceID <= UINT32_MAX ); hr = pModemEndpoint->SetDeviceID( INVALID_DEVICE_ID ); DNASSERT( hr == DPN_OK ); hr = pModemEndpoint->SetDeviceID( static_cast( DeviceID ) ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem setting modem device ID!" ); DisplayDNError( 0, hr ); goto Failure; } Exit: return hr; Failure: goto Exit; } //********************************************************************** //********************************************************************** // ------------------------------ // SetOutgoingPhoneNumber - set phone number for modem dialog // // Entry: Window handle // Pointer to modem port // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "SetOutgoingPhoneNumber" HRESULT SetOutgoingPhoneNumber( const HWND hDialog, const CModemEndpoint *const pModemEndpoint ) { HRESULT hr; // // initialize // hr = DPN_OK; if ( SetWindowText( GetDlgItem( hDialog, IDC_EDIT_MODEM_PHONE_NUMBER ), pModemEndpoint->GetPhoneNumber() ) == FALSE ) { DPFX(DPFPREP, 0, "Problem setting default phone number!" ); DisplayErrorCode( 0, GetLastError() ); goto Exit; } Exit: return hr; } //********************************************************************** //********************************************************************** // ------------------------------ // SetAddressParamtersFromIncomingDialogData - set address data from incoming modem settings dialog // // Entry: Window handle // Pointer to modem port // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "SetAddressParametersFromIncomingDialogData" static HRESULT SetAddressParametersFromIncomingDialogData( const HWND hDialog, CModemEndpoint *const pModemEndpoint ) { HRESULT hr; HWND hControl; // // initialize // hr = DPN_OK; hControl = GetDlgItem( hDialog, IDC_COMBO_INCOMING_MODEM_DEVICE ); if ( hControl == NULL ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Problem getting handle of combo box!" ); DisplayErrorCode( 0, GetLastError() ); goto Failure; } hr = GetModemSelectionFromDialog( hControl, pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem getting modem device!" ); DisplayDNError( 0, hr ); goto Failure; } Failure: return hr; } //********************************************************************** //********************************************************************** // ------------------------------ // SetAddressParamtersFromOutgoingDialogData - set endpoint data from outgoing modem settings dialog // // Entry: Window handle // Pointer to modem port // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "SetAddressParametersFromOutgoingDialogData" static HRESULT SetAddressParametersFromOutgoingDialogData( const HWND hDialog, CModemEndpoint *const pModemEndpoint ) { HRESULT hr; HWND hControl; DWORD dwPhoneNumberLength; TCHAR TempBuffer[ MAX_PHONE_NUMBER_LENGTH + 1 ]; DNASSERT( hDialog != NULL ); DNASSERT( pModemEndpoint != NULL ); // initialize hr = DPN_OK; hControl = GetDlgItem( hDialog, IDC_COMBO_OUTGOING_MODEM_DEVICE ); if ( hControl == NULL ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Problem getting handle of combo box!" ); DisplayErrorCode( 0, GetLastError() ); goto Failure; } hr = GetModemSelectionFromDialog( hControl, pModemEndpoint ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem getting modem device!" ); DisplayDNError( 0, hr ); goto Failure; } // get phone number from dialog hControl = GetDlgItem( hDialog, IDC_EDIT_MODEM_PHONE_NUMBER ); if ( hControl == NULL ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Problem getting handle of phone number edit field!" ); DisplayErrorCode( 0, GetLastError() ); goto Failure; } dwPhoneNumberLength = GetWindowText( hControl, TempBuffer, (sizeof(TempBuffer)/sizeof(TCHAR)) - 1 ); if ( dwPhoneNumberLength == 0 ) { #ifdef DBG DWORD dwErrorReturn; dwErrorReturn = GetLastError(); DPFX(DPFPREP, 0, "User entered an invalid phone number in dialog (err = %u)!", dwErrorReturn ); #endif // DBG hr = DPNERR_ADDRESSING; goto Failure; } else { hr = pModemEndpoint->SetPhoneNumber( TempBuffer ); if ( hr != DPN_OK ) { DPFX(DPFPREP, 0, "Problem setting new phone number!" ); DisplayDNError( 0, hr ); goto Failure; } } Failure: return hr; } //********************************************************************** //********************************************************************** // ------------------------------ // DisplayModemConfigDialog - display dialog to configure modem // // Entry: Window handle // Pointer to modem port // // Exit: Error code // ------------------------------ #undef DPF_MODNAME #define DPF_MODNAME "DisplayModemConfigDialog" static HRESULT DisplayModemConfigDialog( const HWND hDialog, const HWND hDeviceComboBox, const CModemEndpoint *const pModemEndpoint ) { HRESULT hr; LRESULT lSelection; LRESULT lDeviceID; LONG lTAPIReturn; DNASSERT( hDialog != NULL ); DNASSERT( pModemEndpoint != NULL ); // // initialize // hr = DPN_OK; if ( hDeviceComboBox == NULL ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Invalid device combo box handle!" ); goto Exit; } // // ask for current selection in combo box // lSelection = SendMessage( hDeviceComboBox, CB_GETCURSEL, 0, 0 ); if ( lSelection == CB_ERR ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Failed to get current modem selection when configuring modem!" ); DNASSERT( FALSE ); goto Exit; } // // ask for the device ID for this selection, note that the device IDs are // lDeviceID = SendMessage( hDeviceComboBox, CB_GETITEMDATA, lSelection, 0 ); if ( lDeviceID == CB_ERR ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Problem getting device ID from selected modem when calling for config dialog!" ); goto Exit; } // display dialog DNASSERT( lDeviceID <= UINT32_MAX ); lTAPIReturn = p_lineConfigDialog( TAPIIDFromModemID( static_cast( lDeviceID ) ), hDialog, TEXT("comm/datamodem") ); if ( lTAPIReturn != LINEERR_NONE ) { hr = DPNERR_GENERIC; DPFX(DPFPREP, 0, "Problem with modem config dialog!" ); DisplayTAPIError( 0, lTAPIReturn ); goto Exit; } Exit: return hr; } //**********************************************************************