/*----------------------------------------------------------------------------- dialerr.cpp Handle Could Not Connect dialog Copyright (C) 1996 Microsoft Corporation All rights reserved. Authors: ChrisK ChrisKauffman History: 7/22/96 ChrisK Cleaned and formatted -----------------------------------------------------------------------------*/ #include "pch.hpp" #include "resource.h" TCHAR szBuf256[256]; #define VALID_INIT (m_pcRNA && m_hLineApp && m_pszPhoneNumber) TCHAR szValidPhoneCharacters[] = {TEXT("0123456789AaBbCcDdPpTtWw!@$ -.()+*#,&\0")}; #ifndef WIN16 int g_iMyMaxPhone = 0; #endif //+--------------------------------------------------------------------------- // // Function: ProcessDBCS // // Synopsis: Converts control to use DBCS compatible font // Use this at the beginning of the dialog procedure // // Note that this is required due to a bug in Win95-J that prevents // it from properly mapping MS Shell Dlg. This hack is not needed // under winNT. // // Arguments: hwnd - Window handle of the dialog // cltID - ID of the control you want changed. // // Returns: ERROR_SUCCESS // // History: 4/31/97 a-frankh Created // 5/13/97 jmazner Stole from CM to use here //---------------------------------------------------------------------------- void ProcessDBCS(HWND hDlg, int ctlID) { #if defined(WIN16) return; #else HFONT hFont = NULL; if( IsNT() ) { return; } hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT); if (hFont == NULL) hFont = (HFONT) GetStockObject(SYSTEM_FONT); if (hFont != NULL) SendMessage(GetDlgItem(hDlg,ctlID), WM_SETFONT, (WPARAM) hFont, MAKELPARAM(TRUE, 0)); #endif } //+--------------------------------------------------------------------------- // // Function: IsSBCSString // // Synopsis: Walks through a string looking for DBCS characters // // Arguments: sz -- the string to check // // Returns: TRUE if no DBCS characters are found // FALSE otherwise // // History: 5/17/97 jmazner Stole from conn1 to use here // (Olympus #137) //---------------------------------------------------------------------------- #if !defined(WIN16) BOOL IsSBCSString( LPCTSTR sz ) { Assert(sz); #ifdef UNICODE // Check if the string contains only ASCII chars. int attrib = IS_TEXT_UNICODE_ASCII16 | IS_TEXT_UNICODE_CONTROLS; return (BOOL)IsTextUnicode((CONST LPVOID)sz, lstrlen(sz), &attrib); #else while( NULL != *sz ) { if (IsDBCSLeadByte(*sz)) return FALSE; sz++; } return TRUE; #endif } #endif //+---------------------------------------------------------------------------- // // Function: DialingErrorDialog // // Synopsis: Display and handle dialing error dialog, or as it is known // the "Could Not Connect" dialog // // Arguemtns: pED - pointer to error dialog data structure // // Returns: ERROR_USERNEXT - user hit redial // ERROR_USERCANCEL - user selected cancel // otherwise the function returns the appropriate error code // // History: 7/2/96 ChrisK Created // //----------------------------------------------------------------------------- HRESULT WINAPI DialingErrorDialog(PERRORDLGDATA pED) { HRESULT hr = ERROR_SUCCESS; CDialingErrorDlg *pcDEDlg = NULL; // // Validate parameters // if (!pED) { hr = ERROR_INVALID_PARAMETER; goto DialingErrorDialogExit; } if (pED->dwSize < sizeof(ERRORDLGDATA)) { hr = ERROR_BUFFER_TOO_SMALL; goto DialingErrorDialogExit; } // // Initialize dialog // pcDEDlg = new CDialingErrorDlg; if (!pcDEDlg) { hr = ERROR_NOT_ENOUGH_MEMORY; goto DialingErrorDialogExit; } #ifndef WIN16 if( IsNT() ) { g_iMyMaxPhone = MAXPHONE_NT; } else { g_iMyMaxPhone = MAXPHONE_95; } #endif AssertMsg( (RAS_MaxPhoneNumber >= g_iMyMaxPhone), "RAS_MaxPhone < g_iMyMaxPhone" ); // // Copy in data // pcDEDlg->m_hInst = pED->hInst; pcDEDlg->m_hwnd = pED->hParentHwnd; if (ERROR_SUCCESS != (hr = pcDEDlg->Init())) goto DialingErrorDialogExit; StrDup(&pcDEDlg->m_pszConnectoid,pED->pszRasEntryName); StrDup(&pcDEDlg->m_pszMessage,pED->pszMessage); StrDup(&pcDEDlg->m_pszDunFile,pED->pszDunFile); pcDEDlg->m_dwPhoneBook = pED->dwPhonebook; if (0 != pED->dwPhonebook) { if (pED->pdwCountryID) pcDEDlg->m_dwCountryID = *(pED->pdwCountryID); if (pED->pwStateID) pcDEDlg->m_wState = *(pED->pwStateID); pcDEDlg->m_bType = pED->bType; pcDEDlg->m_bMask = pED->bMask; } // // Help information, if one was not specified use the default trouble shooter // if (pcDEDlg->m_pszHelpFile) { StrDup(&pcDEDlg->m_pszHelpFile,pED->pszHelpFile); pcDEDlg->m_dwHelpID = pED->dwHelpID; } else { StrDup(&pcDEDlg->m_pszHelpFile,AUTODIAL_HELPFILE); pcDEDlg->m_dwHelpID = icw_trb; } // // Display dialog // hr = (HRESULT)DialogBoxParam(GetModuleHandle(TEXT("ICWDIAL")),MAKEINTRESOURCE(IDD_DIALERR), pED->hParentHwnd,GenericDlgProc,(LPARAM)pcDEDlg); // // Copy out data // if (pED->pszDunFile) GlobalFree(pED->pszDunFile); pED->pszDunFile = NULL; StrDup(&pED->pszDunFile,pcDEDlg->m_pszDunFile); DialingErrorDialogExit: if (pcDEDlg) delete pcDEDlg; pcDEDlg = NULL; return hr; } //+---------------------------------------------------------------------------- // // Function: CDialingErrorDlg (constructor) // // Synopsis: initializes CDialingErrorDlg data members // // Arguements: none // // Returns: none // // History: 7/2/96 ChrisK Created // //----------------------------------------------------------------------------- CDialingErrorDlg::CDialingErrorDlg() { m_hInst = NULL; m_hwnd = NULL; m_pszConnectoid = NULL; m_pszDisplayable = NULL; m_pszPhoneNumber = NULL; m_pszMessage = NULL; m_pszDunFile = NULL; m_dwPhoneBook = 0; m_hLineApp = NULL; m_dwTapiDev = 0; m_dwAPIVersion = 0; m_pcRNA = NULL; m_lpRasDevInfo = NULL; m_dwNumDev = 0; m_pszHelpFile = NULL; m_dwHelpID = 0; m_dwCountryID = 0; m_wState = 0; m_bType = 0; m_bMask = 0; // Normandy 10612 - ChrisK // The dial error dialog will handle its own prompt to exit. The generic // dialog proc should not ask about this. m_bShouldAsk = FALSE; } //+---------------------------------------------------------------------------- // // Function: ~CDialingErrorDlg (destructor) // // Synopsis: deallocated and cleans up data members // // Arguements: none // // Returns: none // // History: 7/2/96 ChrisK Created // //----------------------------------------------------------------------------- CDialingErrorDlg::~CDialingErrorDlg() { m_hInst = NULL; m_hwnd = NULL; if (m_pszConnectoid) GlobalFree(m_pszConnectoid); m_pszConnectoid = NULL; if (m_pszDisplayable) GlobalFree(m_pszDisplayable); m_pszDisplayable = NULL; if (m_pszPhoneNumber) GlobalFree(m_pszPhoneNumber); m_pszPhoneNumber = NULL; if (m_pszMessage) GlobalFree(m_pszMessage); m_pszMessage = NULL; if (m_pszDunFile) GlobalFree(m_pszDunFile); m_pszDunFile = NULL; m_dwPhoneBook = 0; if (m_hLineApp) lineShutdown(m_hLineApp); m_hLineApp = NULL; if (m_pszHelpFile) GlobalFree(m_pszHelpFile); m_pszHelpFile = NULL; m_dwHelpID = 0; m_dwNumDev = 0; m_dwTapiDev = 0; m_dwAPIVersion = 0; m_pcRNA = NULL; m_dwCountryID = 0; m_wState = 0; m_bType = 0; m_bMask = 0; } //+---------------------------------------------------------------------------- // // Function: CDialingErrorDlg::Init // // Synopsis: Intialize data members that may fail. We need to return an // code for these cases and C++ constructors don't support this // // Arguments: none // // Returns: ERROR_SUCCESS - success // anything else indicates a failure // // History: 7/2/96 ChrisK Created // //----------------------------------------------------------------------------- HRESULT CDialingErrorDlg::Init() { HRESULT hr = ERROR_SUCCESS; LPLINEEXTENSIONID lpExtensionID = NULL; // Initialize RAS/RNA // m_pcRNA = new RNAAPI; if (!m_pcRNA) { hr = ERROR_NOT_ENOUGH_MEMORY; goto InitExit; } // // Initialize TAPI // hr = lineInitialize(&m_hLineApp,m_hInst,LineCallback,NULL,&m_dwNumDev); if (hr) goto InitExit; lpExtensionID = (LPLINEEXTENSIONID)GlobalAlloc(LPTR,sizeof(LINEEXTENSIONID)); if (!lpExtensionID) { hr = ERROR_NOT_ENOUGH_MEMORY; goto InitExit; } hr = lineNegotiateAPIVersion(m_hLineApp, m_dwTapiDev, 0x00010004, 0x00010004, &m_dwAPIVersion, lpExtensionID); // 4/2/97 ChrisK Olypmus 2745 while (ERROR_SUCCESS != hr && m_dwTapiDev < (m_dwNumDev - 1)) { m_dwTapiDev++; hr = lineNegotiateAPIVersion(m_hLineApp, m_dwTapiDev, 0x00010004, 0x00010004, &m_dwAPIVersion, lpExtensionID); } if (hr != ERROR_SUCCESS) goto InitExit; // Initialize strings // // // 6/3/97 jmazner Olympus #4868 // allocate enough space to hold maximum length phone numbers. // //m_pszPhoneNumber = (LPTSTR)GlobalAlloc(LPTR,MAX_CANONICAL_NUMBER); m_pszPhoneNumber = (LPTSTR)GlobalAlloc(GPTR, sizeof(TCHAR)*(MAX_CANONICAL_NUMBER>g_iMyMaxPhone?MAX_CANONICAL_NUMBER:g_iMyMaxPhone + 1)); if (!m_pszPhoneNumber) { hr = ERROR_NOT_ENOUGH_MEMORY; goto InitExit; } InitExit: if (lpExtensionID) GlobalFree(lpExtensionID); return hr; } //+---------------------------------------------------------------------------- // // Function: CDialingErrorDlg::DlgProc // // Synopsis: Handle messages sent to the dial error dialog // // Arguments: See Windows documentation for DialogProc's // // Returns: See Windows documentation for DialogProc's // // History: 7/8/96 ChrisK Created // //----------------------------------------------------------------------------- LRESULT CDialingErrorDlg::DlgProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam, LRESULT lres) { LRESULT lRes = TRUE; HRESULT hr; // Normandy 11745 // WORD wIDS; FARPROC fp = NULL; LPTSTR *ppPhoneNumbers; LPTSTR pszPhoneNumber; LPTSTR *ppDunFiles; LPTSTR pszDunFile = NULL; WORD wNumber; DWORD dwSize; LPRASENTRY lpRasEntry = NULL; LPRASDEVINFO lpRasDevInfo = NULL; DWORD dwRasEntrySize = 0; DWORD dwRasDevInfoSize = 0; LRESULT idx = 0; HINSTANCE hPHBKDll = NULL; LPTSTR lpszDialNumber = NULL; static BOOL bCheckDisplayable = FALSE; static BOOL bInitComplete = FALSE; //shows dialog init is complete - MKarki static BOOL bDlgPropEnabled = TRUE; //this flags holds state of Dialing Properties PushButton MKarki - (5/3/97/) Fix for Bug#3393 //CSupport objSupportNum; //CHAR szSupportNumber[256]; //CHAR szSupportMsg[256]; static BOOL fUserEditedNumber = FALSE; Assert(NULL == m_hwnd || hwnd == m_hwnd); switch(uMsg) { case WM_INITDIALOG: Assert(VALID_INIT); // // This GOTO has been added to // display dialog again when phone numbers are // not valid - MKarki (4/21/97) Fix for Bug#2868 and 3461 // ShowErrDlgAgain: m_hwnd = hwnd; // Set limit on phone number length // // // ChrisK Olympus 4851 6/9/97 // The maximum length of this string needs to include space for a terminating // NULL // SendDlgItemMessage(hwnd,IDC_TEXTNUMBER,EM_SETLIMITTEXT,g_iMyMaxPhone - 1 ,0); #if 0 // // Get the PSS Support Number now // MKarki (5/9/97) - Fix for Bug#267 // if ((objSupportNum.GetSupportInfo(szSupportNumber)) == TRUE) { // // show the info // lstrcpy (szSupportMsg, GetSz (IDS_SUPPORTMSG)); lstrcat (szSupportMsg, szSupportNumber); SetDlgItemText(hwnd,IDC_LBSUPPORTMSG, szSupportMsg); } #endif // Show the phone number // hr = GetDisplayableNumber(); if (hr != ERROR_SUCCESS) { bCheckDisplayable = FALSE; SetDlgItemText(hwnd,IDC_TEXTNUMBER,m_pszPhoneNumber); } else { bCheckDisplayable = TRUE; SetDlgItemText(hwnd,IDC_TEXTNUMBER,m_pszDisplayable); } // Bug Normandy 5920 // ChrisK, turns out we are calling MakeBold twice // MakeBold(GetDlgItem(m_hwnd,IDC_LBLTITLE),TRUE,FW_BOLD); // Fill in error message // if (m_pszMessage) SetDlgItemText(m_hwnd,IDC_LBLERRMSG,m_pszMessage); FillModems(); // // Enable DBCS on win95-J systems // ProcessDBCS(m_hwnd, IDC_CMBMODEMS); ProcessDBCS(m_hwnd, IDC_TEXTNUMBER); // Set the focus to the Modems selection list // SetFocus(GetDlgItem(m_hwnd,IDC_CMBMODEMS)); lRes = FALSE; SetForegroundWindow(m_hwnd); if (0 == m_dwPhoneBook) { // // 8/1/97 jmazner Olympus #11118 // This ISP phonebook code is totally messed up, but we never use this // functionality anyways. Just make sure that the phonebook button is gone // unless someone explicitly asks for it. // //if (g_szISPFile[0] == '\0') // BUG: this condition should go away eventually. // see the comments with the phone book button code below. //{ ShowWindow(GetDlgItem(hwnd,IDC_LBLPHONE),SW_HIDE); ShowWindow(GetDlgItem(hwnd,IDC_CMDPHONEBOOK),SW_HIDE); //} } // // we should disable the Dialing Properites PushButton // if we have changed the phone number once // MKarki (5/3/97) - Fix for Bug#3393 // if (FALSE == bDlgPropEnabled) { EnableWindow ( GetDlgItem (hwnd, IDC_CMDDIALPROP), FALSE ); } // // This shows the INIT for the error dialog is complete // and we can start processing changes to Ph No. TEXTBOX // MKarki (4/24/97) - Fix for Bug#3511 // bInitComplete = TRUE; break; case WM_CLOSE: if (MessageBox(m_hwnd,GetSz(IDS_WANTTOEXIT),GetSz(IDS_TITLE), MB_APPLMODAL | MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDYES) EndDialog(m_hwnd,ERROR_USERCANCEL); break; case WM_DESTROY: ReleaseBold(GetDlgItem(m_hwnd,IDC_LBLTITLE)); break; case WM_HELP: // // Chrisk Olympus 5130 5/27/97 // Added support for F1 Help Key // if (m_pszHelpFile && *m_pszHelpFile) WinHelp(m_hwnd,m_pszHelpFile,HELP_CONTEXT,m_dwHelpID); break; case WM_COMMAND: switch(LOWORD(wparam)) { // // We now processes changes to ph no. EDIT BOX // If there is anychange in the phone number we // disable to Dialing Properties Push Button // MKarki (3/22/97) - Fix for Bug #3511 // case IDC_TEXTNUMBER: TCHAR lpszTempNumber[RAS_MaxPhoneNumber + 1]; if ((HIWORD (wparam) == EN_CHANGE) && (bInitComplete == TRUE)) { if ((GetDlgItemText ( hwnd, IDC_TEXTNUMBER, lpszTempNumber, RAS_MaxPhoneNumber + 1 )) && (0 != lstrcmp( lpszTempNumber, bCheckDisplayable ? m_pszDisplayable : m_pszPhoneNumber))) { // // number has been modified by the user // hide the Dialing Properties Push Button // EnableWindow ( GetDlgItem (hwnd, IDC_CMDDIALPROP), FALSE ); // // save the state of the Dialing Properties PushButton // MKarki (5/3/97) - Fix for Bug#3393 // bDlgPropEnabled = FALSE; // // 7/17/97 jmazner Olympus #8234 // fUserEditedNumber = TRUE; } } break; case IDC_CMBMODEMS: if (HIWORD(wparam) == CBN_SELCHANGE) { idx = SendDlgItemMessage(m_hwnd,IDC_CMBMODEMS,CB_GETCURSEL,0,0); // // ChrisK Olympus 245 5/25/97 // Get index of modem // idx = SendDlgItemMessage(m_hwnd,IDC_CMBMODEMS,CB_GETITEMDATA,idx,0); if (idx == CB_ERR) break; // // Get the connectoid // hr = ICWGetRasEntry(&lpRasEntry, &dwRasEntrySize, &lpRasDevInfo, &dwRasDevInfoSize, m_pszConnectoid); // UNDONE: Error Message // // Replace the device with a new one // lstrcpyn(lpRasEntry->szDeviceType,m_lpRasDevInfo[idx].szDeviceType,RAS_MaxDeviceType+1); lstrcpyn(lpRasEntry->szDeviceName,m_lpRasDevInfo[idx].szDeviceName,RAS_MaxDeviceName+1); if (lpRasDevInfo) GlobalFree(lpRasDevInfo); // // ChrisK Olympus 2461 5/30/97 // Ras will take the modem settings from the RasEntry structure. If these are // not zeroed out, then they will corrupt the entry. // lpRasDevInfo = 0; dwRasDevInfoSize = 0; hr = m_pcRNA->RasSetEntryProperties(NULL,m_pszConnectoid,(LPBYTE)lpRasEntry,dwRasEntrySize,(LPBYTE)lpRasDevInfo,dwRasDevInfoSize); lpRasDevInfo = NULL; // Set back to NULL so we don't try and free later if (lpRasEntry) GlobalFree(lpRasEntry); lpRasEntry = NULL; // DO NOT FREE DEVINFO struct!! lpRasDevInfo = NULL; dwRasEntrySize = 0; dwRasDevInfoSize = 0; } break; case IDC_CMDNEXT: // // Redial button // // NOTE: This button is actually labeled "Redial" // lpszDialNumber = (LPTSTR)GlobalAlloc(GPTR, sizeof(TCHAR)*(g_iMyMaxPhone + 2)); if (NULL == lpszDialNumber) { MsgBox(IDS_OUTOFMEMORY,MB_MYERROR); break; } // If the user has altered the phone number, make sure it can be used // if (fUserEditedNumber && (GetDlgItemText(hwnd, IDC_TEXTNUMBER, lpszDialNumber, g_iMyMaxPhone + 1)) && (0 != lstrcmp(lpszDialNumber, bCheckDisplayable ? m_pszDisplayable : m_pszPhoneNumber))) { // // return failure if we do not have a valid // phone number - MKarki 4/21/97 Bug# 2868 & 3461 // hr = CreateDialAsIsConnectoid(lpszDialNumber); lRes = (hr == ERROR_SUCCESS); } if (lpszDialNumber) GlobalFree(lpszDialNumber); // // only end this dialog, if we have a valid // phone number, else refresh the same dialog // MKarki (4/21/97) Fix for Bug#2868 & 3461 // if (lRes == TRUE) EndDialog(m_hwnd,ERROR_USERNEXT); else goto ShowErrDlgAgain; break; case IDC_CMDHELP: // // Help Button // if (m_pszHelpFile && *m_pszHelpFile) WinHelp(m_hwnd,m_pszHelpFile,HELP_CONTEXT,m_dwHelpID); break; case IDC_CMDCANCEL: // // Cancel button // if (MessageBox(m_hwnd,GetSz(IDS_WANTTOEXIT),GetSz(IDS_TITLE), MB_APPLMODAL | MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDYES) EndDialog(m_hwnd,ERROR_USERCANCEL); break; case IDC_CMDDIALPROP: // // Dialing properties // // If the user has altered the phone number, make sure it can be used // lpszDialNumber = (LPTSTR)GlobalAlloc(GPTR, sizeof(TCHAR)*(g_iMyMaxPhone + 2)); if (NULL == lpszDialNumber) { MsgBox(IDS_OUTOFMEMORY,MB_MYERROR); break; } if (fUserEditedNumber && (GetDlgItemText(hwnd, IDC_TEXTNUMBER, lpszDialNumber, g_iMyMaxPhone + 1)) && (0 != lstrcmp(lpszDialNumber, bCheckDisplayable ? m_pszDisplayable : m_pszPhoneNumber))) { hr = CreateDialAsIsConnectoid(lpszDialNumber); lRes = (hr == ERROR_SUCCESS); lstrcpy(m_pszPhoneNumber,lpszDialNumber); } // 11/25/96 jmazner Normandy #10294 //ShowWindow(m_hwnd,SW_HIDE); EnableWindow(m_hwnd, FALSE); hr = lineTranslateDialog(m_hLineApp,m_dwTapiDev,m_dwAPIVersion,m_hwnd,m_pszPhoneNumber); hr = GetDisplayableNumber(); if (hr != ERROR_SUCCESS) { bCheckDisplayable = FALSE; SetDlgItemText(hwnd,IDC_TEXTNUMBER,m_pszPhoneNumber); } else { bCheckDisplayable = TRUE; SetDlgItemText(hwnd,IDC_TEXTNUMBER,m_pszDisplayable); } if (lpszDialNumber) GlobalFree(lpszDialNumber); #if 0 // // See if support number has changed // MKarki (5/9/97) - Fix for Bug#267 // if ((objSupportNum.GetSupportInfo(szSupportNumber)) == TRUE) { // // show the info // lstrcpy (szSupportMsg, GetSz (IDS_SUPPORTMSG)); lstrcat (szSupportMsg, szSupportNumber); SetDlgItemText(hwnd,IDC_LBSUPPORTMSG, szSupportMsg); } else { // // need to clear what is being displayed now // ZeroMemory ( szSupportMsg, sizeof (szSupportMsg)); SetDlgItemText(hwnd,IDC_LBSUPPORTMSG, szSupportMsg); } #endif //ShowWindow(m_hwnd,SW_SHOW); EnableWindow(m_hwnd, TRUE); SetForegroundWindow(m_hwnd); // // 6/6/97 jmazner Olympus #4759 // SetFocus(GetDlgItem(hwnd,IDC_CMDNEXT)); break; case IDC_CMDPHONEBOOK: // BUG: This code will not work with the restructured dialer DLL. // The problem is the restructure DLL expects the call to have already // opened and load the phone book and just pass in the dwPhoneBook ID. // This code actually loads the phone book from the global ISP file. PhoneBookClick: if (!hPHBKDll) hPHBKDll = LoadLibrary(PHONEBOOK_LIBRARY); if (!hPHBKDll) { wsprintf(szBuf256,GetSz(IDS_CANTLOADINETCFG),PHONEBOOK_LIBRARY); MessageBox(m_hwnd,szBuf256,GetSz(IDS_TITLE),MB_MYERROR); } else { fp = GetProcAddress(hPHBKDll,PHBK_LOADAPI); if (!fp) MsgBox(IDS_CANTLOADPHBKAPI,MB_MYERROR); else { hr = ((PFNPHONEBOOKLOAD)fp)(GetISPFile(),&m_dwPhoneBook); if (hr != ERROR_SUCCESS) MsgBox(IDS_CANTINITPHONEBOOK,MB_MYERROR); else { fp = GetProcAddress(hPHBKDll,PHBK_DISPLAYAPI); if (!fp) MsgBox(IDS_CANTLOADPHBKAPI,MB_MYERROR); else { ppPhoneNumbers = &pszPhoneNumber; pszPhoneNumber = m_pszPhoneNumber; ppDunFiles = &pszDunFile; pszDunFile = (LPTSTR)GlobalAlloc(GPTR,sizeof(TCHAR)*(256)); // BUGBUG: ignoring error condition Assert(pszDunFile); wNumber = 1; if (pszDunFile && pszPhoneNumber) { ShowWindow(m_hwnd,SW_HIDE); hr = ((PFNPHONEDISPLAY)fp) (m_dwPhoneBook, ppPhoneNumbers, ppDunFiles, &wNumber, &m_dwCountryID, &m_wState, m_bType, m_bMask, NULL,8); ShowWindow(m_hwnd,SW_SHOW); SetForegroundWindow(m_hwnd); if (hr == ERROR_SUCCESS) { m_pcRNA->RasDeleteEntry(NULL,m_pszConnectoid); // Make a new connectoid // hr = CreateEntryFromDUNFile(pszDunFile); if (hr != ERROR_SUCCESS) { MsgBox(IDS_INVALIDPN,MB_MYERROR); goto PhoneBookClick; break; } // Get the name of the connectoid // dwSize = sizeof(TCHAR)*RAS_MaxEntryName; hr = ReadSignUpReg((LPBYTE)m_pszConnectoid, &dwSize, REG_SZ, RASENTRYVALUENAME); if (hr != ERROR_SUCCESS) { MsgBox(IDS_CANTREADKEY,MB_MYERROR); break; } // Get the connectoid // hr = ICWGetRasEntry(&lpRasEntry, &dwRasEntrySize, &lpRasDevInfo, &dwRasDevInfoSize, m_pszConnectoid); // UNDONE: ERROR MESSAGE // Break up phone number // if (!BreakUpPhoneNumber(lpRasEntry, m_pszPhoneNumber)) { MsgBox(IDS_INVALIDPN,MB_MYERROR); goto PhoneBookClick; break; } // Set Country ID // lpRasEntry->dwCountryID=m_dwCountryID; // Set connectoid with new phone number // hr = m_pcRNA->RasSetEntryProperties(NULL,m_pszConnectoid, (LPBYTE)lpRasEntry,dwRasEntrySize, (LPBYTE)lpRasDevInfo,dwRasDevInfoSize); // UNDONE: ERROR MESSAGE // Update display // hr = GetDisplayableNumber(); if (hr != ERROR_SUCCESS) { bCheckDisplayable = FALSE; SetDlgItemText(hwnd,IDC_TEXTNUMBER,m_pszPhoneNumber); // // Now we can show the Dialing Properties Push Button again // MKarki (4/24/97) - Fix for Bug#3511 // EnableWindow (GetDlgItem (hwnd, IDC_CMDDIALPROP), TRUE); // // save the state of the Dialing Properties PushButton // MKarki (5/3/97) - Fix for Bug#3393 // bDlgPropEnabled = TRUE; } else { bCheckDisplayable = TRUE; SetDlgItemText(hwnd,IDC_TEXTNUMBER,m_pszDisplayable); } fUserEditedNumber = FALSE; } } else { MsgBox(IDS_OUTOFMEMORY,MB_MYERROR); } Assert(pszDunFile); GlobalFree(pszDunFile); pszDunFile = NULL; } } } } break; } break; default: lRes = FALSE; break; } return lRes; } // ############################################################################ HRESULT CDialingErrorDlg::FillModems() { HRESULT hr = ERROR_SUCCESS; DWORD dwSize; DWORD idx; DWORD dwRasEntrySize = 0; DWORD dwRasDevInfoSize = 0; LPRASENTRY lpRasEntry=NULL; LPRASDEVINFO lpRasDevInfo=NULL; LRESULT lLast = 0; LPLINEDEVCAPS lpLineDevCaps = NULL; // // Get the connectoid // hr = ICWGetRasEntry(&lpRasEntry,&dwRasEntrySize, &lpRasDevInfo, &dwRasDevInfoSize, m_pszConnectoid); if (hr) goto FillModemExit; // // Get devices from RAS // m_lpRasDevInfo = (LPRASDEVINFO)GlobalAlloc(LPTR,sizeof(RASDEVINFO)); if (!m_lpRasDevInfo) { hr = ERROR_NOT_ENOUGH_MEMORY; goto FillModemExit; } m_dwNumDev = 0; m_lpRasDevInfo->dwSize = sizeof(RASDEVINFO); dwSize = sizeof(RASDEVINFO); hr = m_pcRNA->RasEnumDevices(m_lpRasDevInfo,&dwSize,&m_dwNumDev); if (hr == ERROR_BUFFER_TOO_SMALL) { GlobalFree(m_lpRasDevInfo); // 3/20/97 jmazner Olympus #1768 m_lpRasDevInfo = NULL; m_lpRasDevInfo = (LPRASDEVINFO)GlobalAlloc(LPTR,dwSize); if (!m_lpRasDevInfo) { hr = ERROR_NOT_ENOUGH_MEMORY; goto FillModemExit; } m_lpRasDevInfo->dwSize = sizeof(RASDEVINFO); m_dwNumDev = 0; hr = m_pcRNA->RasEnumDevices(m_lpRasDevInfo,&dwSize,&m_dwNumDev); } if (hr) goto FillModemExit; for (idx=0;idx < m_dwNumDev;idx++) { // // Add string to combo box // // // ChrisK Olympus 4560 do not add VPN's to list of modems // if (0 != lstrcmpi(TEXT("VPN"),m_lpRasDevInfo[idx].szDeviceType)) { lLast = SendDlgItemMessage(m_hwnd,IDC_CMBMODEMS,CB_ADDSTRING,0,(LPARAM)m_lpRasDevInfo[idx].szDeviceName); // // ChrisK Olympus 245 5/25/97 // Save index of modem // SendDlgItemMessage(m_hwnd,IDC_CMBMODEMS,CB_SETITEMDATA,(WPARAM)lLast,(LPARAM)idx); if (lstrcmp(m_lpRasDevInfo[idx].szDeviceName,lpRasEntry->szDeviceName) == 0) SendDlgItemMessage(m_hwnd,IDC_CMBMODEMS,CB_SETCURSEL,(WPARAM)lLast,0); } } if (m_dwNumDev == 1) SendDlgItemMessage(m_hwnd,IDC_CMBMODEMS,CB_SETCURSEL,0,0); FillModemExit: if (lpRasEntry) GlobalFree(lpRasEntry); lpRasEntry = NULL; if (lpRasDevInfo) GlobalFree(lpRasDevInfo); lpRasDevInfo = NULL; return hr; } // ############################################################################ // UNDONE: Collapse this function with the one in dialdlg.cpp HRESULT CDialingErrorDlg::GetDisplayableNumber() { HRESULT hr; LPRASENTRY lpRasEntry = NULL; LPRASDEVINFO lpRasDevInfo = NULL; LPLINETRANSLATEOUTPUT lpOutput1; LPLINETRANSLATEOUTPUT lpOutput2; HINSTANCE hRasDll = NULL; // Normandy 11745 // FARPROC fp = NULL; DWORD dwRasEntrySize = 0; DWORD dwRasDevInfoSize = 0; Assert(VALID_INIT); // Format the phone number // lpOutput1 = (LPLINETRANSLATEOUTPUT)GlobalAlloc(LPTR,sizeof(LINETRANSLATEOUTPUT)); if (!lpOutput1) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lpOutput1->dwTotalSize = sizeof(LINETRANSLATEOUTPUT); // Get phone number from connectoid // hr = ICWGetRasEntry(&lpRasEntry, &dwRasEntrySize, &lpRasDevInfo, &dwRasDevInfoSize, m_pszConnectoid); if (hr != ERROR_SUCCESS) { goto GetDisplayableNumberExit; } // // If this is a dial as is number, just get it from the structure // if (!(lpRasEntry->dwfOptions & RASEO_UseCountryAndAreaCodes)) { if (m_pszDisplayable) GlobalFree(m_pszDisplayable); m_pszDisplayable = (LPTSTR)GlobalAlloc(GPTR, sizeof(TCHAR)*(lstrlen(lpRasEntry->szLocalPhoneNumber)+1)); if (!m_pszDisplayable) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lstrcpy(m_pszPhoneNumber, lpRasEntry->szLocalPhoneNumber); lstrcpy(m_pszDisplayable, lpRasEntry->szLocalPhoneNumber); } else { // // If there is no area code, don't use parentheses // if (lpRasEntry->szAreaCode[0]) wsprintf(m_pszPhoneNumber,TEXT("+%d (%s) %s\0"),lpRasEntry->dwCountryCode,lpRasEntry->szAreaCode,lpRasEntry->szLocalPhoneNumber); else wsprintf(m_pszPhoneNumber,TEXT("+%lu %s\0"),lpRasEntry->dwCountryCode, lpRasEntry->szLocalPhoneNumber); // Turn the canonical form into the "displayable" form // hr = lineTranslateAddress(m_hLineApp,m_dwTapiDev,m_dwAPIVersion,m_pszPhoneNumber, 0,LINETRANSLATEOPTION_CANCELCALLWAITING,lpOutput1); if (hr != ERROR_SUCCESS || (lpOutput1->dwNeededSize != lpOutput1->dwTotalSize)) { lpOutput2 = (LPLINETRANSLATEOUTPUT)GlobalAlloc(LPTR,lpOutput1->dwNeededSize); if (!lpOutput2) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lpOutput2->dwTotalSize = lpOutput1->dwNeededSize; GlobalFree(lpOutput1); lpOutput1 = lpOutput2; lpOutput2 = NULL; hr = lineTranslateAddress(m_hLineApp,m_dwTapiDev,m_dwAPIVersion,m_pszPhoneNumber, 0,LINETRANSLATEOPTION_CANCELCALLWAITING,lpOutput1); } if (hr != ERROR_SUCCESS) { goto GetDisplayableNumberExit; } StrDup(&m_pszDisplayable,(LPTSTR)&((LPBYTE)lpOutput1)[lpOutput1->dwDisplayableStringOffset]); } GetDisplayableNumberExit: if (lpRasEntry) GlobalFree(lpRasEntry); lpRasEntry = NULL; if (lpRasDevInfo) GlobalFree(lpRasDevInfo); lpRasDevInfo = NULL; if (lpOutput1) GlobalFree(lpOutput1); lpOutput1 = NULL; return hr; } /** // ############################################################################ HRESULT ShowDialErrDialog(HRESULT hrErr, LPTSTR pszConnectoid, HINSTANCE hInst, HWND hwnd) { int iRC; // CDialErrDlg *pcDED = NULL; g_pcDialErr = (PDIALERR)GlobalAlloc(LPTR,sizeof(DIALERR)); if (!g_pcDialErr) { MessageBox(hwnd,GetSz(IDS_OUTOFMEMORY),GetSz(IDS_TITLE),MB_APPLMODAL | MB_ICONERROR); iRC = ERROR_NOT_ENOUGH_MEMORY; goto ShowDialErrDialogExit; } g_pcDialErr->m_pszConnectoid = (LPTSTR)GlobalAlloc(LPTR,RAS_MaxEntryName); if (!g_pcDialErr->m_pszConnectoid) { iRC = ERROR_NOT_ENOUGH_MEMORY; goto ShowDialErrDialogExit; } lstrcpyn(g_pcDialErr->m_pszConnectoid,pszConnectoid,RAS_MaxEntryName); g_pcDialErr->m_hrError = hrErr; g_pcDialErr->m_hInst = hInst; iRC = DialogBoxParam(g_pcDialErr->m_hInst,MAKEINTRESOURCE(IDD_DIALERR),hwnd,DialErrDlgProc,(LPARAM)g_pcDialErr); lstrcpyn(pszConnectoid,g_pcDialErr->m_pszConnectoid,RAS_MaxEntryName); ShowDialErrDialogExit: if (g_pcDialErr->m_lprasdevinfo) GlobalFree(g_pcDialErr->m_lprasdevinfo); if (g_pcDialErr) GlobalFree(g_pcDialErr); return iRC; } **/ /** // ############################################################################ HRESULT CDialingErrorDlg::DialErrGetDisplayableNumber() { DWORD dwNumDev; HRESULT hr; LPRASENTRY lpRasEntry; LPRASDEVINFO lpRasDevInfo; DWORD dwRasEntrySize; DWORD dwRasDevInfoSize; LPLINETRANSLATEOUTPUT lpOutput1; LPLINETRANSLATEOUTPUT lpOutput2; LPLINEEXTENSIONID lpExtensionID = NULL; HINSTANCE hRasDll = NULL; FARPROC fp = NULL; //RNAAPI * pcRNA; // Initialize TAPIness // dwNumDev = 0; hr = lineInitialize(&g_pcDialErr->m_hLineApp,g_pcDialErr->m_hInst,LineCallback,NULL,&dwNumDev); if (hr != ERROR_SUCCESS) goto GetDisplayableNumberExit; if (g_pdevice->dwTapiDev == 0xFFFFFFFF) { // if (dwNumDev == 1) g_pdevice->dwTapiDev = 0; //else // UNDONE: Tell the user to select a modem // DO NOT EXIT UNTIL THEY PICK ONE } lpExtensionID = (LPLINEEXTENSIONID )GlobalAlloc(LPTR,sizeof(LINEEXTENSIONID)); if (!lpExtensionID) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } hr = lineNegotiateAPIVersion(g_pcDialErr->m_hLineApp, g_pdevice->dwTapiDev, 0x00010004, 0x00010004, &g_pcDialErr->m_dwAPIVersion, lpExtensionID); // ditch it since we don't use it // if (lpExtensionID) GlobalFree(lpExtensionID); lpExtensionID = NULL; if (hr != ERROR_SUCCESS) goto GetDisplayableNumberExit; // Format the phone number // lpOutput1 = (LPLINETRANSLATEOUTPUT)GlobalAlloc(LPTR,sizeof(LINETRANSLATEOUTPUT)); if (!lpOutput1) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lpOutput1->dwTotalSize = sizeof(LINETRANSLATEOUTPUT); // Get phone number from connectoid // lpRasEntry = (LPRASENTRY)GlobalAlloc(LPTR,sizeof(RASENTRY)); if (!lpRasEntry) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lpRasDevInfo = (LPRASDEVINFO)GlobalAlloc(LPTR,sizeof(RASDEVINFO)); if (!lpRasDevInfo) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } dwRasEntrySize = sizeof(RASENTRY); dwRasDevInfoSize = sizeof(RASDEVINFO); lpRasEntry->dwSize = dwRasEntrySize; lpRasDevInfo->dwSize = dwRasDevInfoSize; hRasDll = LoadLibrary(TEXT("RASAPI32.DLL")); if (!hRasDll) { hr = GetLastError(); goto GetDisplayableNumberExit; } fp =GetProcAddress(hRasDll,"RasGetEntryPropertiesA"); if (!fp) { FreeLibrary(hRasDll); hRasDll = LoadLibrary(TEXT("RNAPH.DLL")); if (!hRasDll) { hr = GetLastError(); goto GetDisplayableNumberExit; } fp = GetProcAddress(hRasDll,"RasGetEntryPropertiesA"); if (!fp) { hr = GetLastError(); goto GetDisplayableNumberExit; } } hr = ((PFNRASGETENTRYPROPERTIES)fp)(NULL,g_pcDialErr->m_pszConnectoid,(LPBYTE)lpRasEntry,&dwRasEntrySize,(LPBYTE)lpRasDevInfo,&dwRasDevInfoSize); if (hr != ERROR_SUCCESS) { goto GetDisplayableNumberExit; } FreeLibrary(hRasDll); wsprintf(g_pcDialErr->m_szPhoneNumber,TEXT("+%d (%s) %s\0"),lpRasEntry->dwCountryCode,lpRasEntry->szAreaCode,lpRasEntry->szLocalPhoneNumber); // Turn the canonical form into the "displayable" form // hr = lineTranslateAddress(g_pcDialErr->m_hLineApp,g_pdevice->dwTapiDev, g_pcDialErr->m_dwAPIVersion, g_pcDialErr->m_szPhoneNumber,0, LINETRANSLATEOPTION_CANCELCALLWAITING, lpOutput1); if (hr != ERROR_SUCCESS || (lpOutput1->dwNeededSize != lpOutput1->dwTotalSize)) { lpOutput2 = (LPLINETRANSLATEOUTPUT)GlobalAlloc(LPTR,lpOutput1->dwNeededSize); if (!lpOutput2) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lpOutput2->dwTotalSize = lpOutput1->dwNeededSize; GlobalFree(lpOutput1); lpOutput1 = lpOutput2; lpOutput2 = NULL; hr = lineTranslateAddress(g_pcDialErr->m_hLineApp,g_pdevice->dwTapiDev, g_pcDialErr->m_dwAPIVersion, g_pcDialErr->m_szPhoneNumber,0, LINETRANSLATEOPTION_CANCELCALLWAITING, lpOutput1); } if (hr != ERROR_SUCCESS) { goto GetDisplayableNumberExit; } g_pcDialErr->m_pszDisplayable = (LPTSTR)GlobalAlloc(LPTR,lpOutput1->dwDisplayableStringSize+1); if (!g_pcDialErr->m_pszDisplayable) { hr = ERROR_NOT_ENOUGH_MEMORY; goto GetDisplayableNumberExit; } lstrcpyn(g_pcDialErr->m_pszDisplayable,(LPTSTR)&((LPBYTE)lpOutput1)[lpOutput1->dwDisplayableStringOffset],lpOutput1->dwDisplayableStringSize); GetDisplayableNumberExit: if (g_pcDialErr->m_hLineApp) { lineShutdown(g_pcDialErr->m_hLineApp); g_pcDialErr->m_hLineApp = NULL; } return hr; } **/ //+---------------------------------------------------------------------------- // // Function: CDialingErrorDlg::CreateDialAsIsConnectoid // // Synopsis: Using the string in the editable text box create a dia-as-is // connectoid // // Arguemnts: lpszDialNumber string containing the to-be-dailed number // // Returns: Error value (ERROR_SUCCESS == success) // // History: 8/29/96 Chrisk Created // //----------------------------------------------------------------------------- HRESULT CDialingErrorDlg::CreateDialAsIsConnectoid(LPCTSTR lpszDialNumber) { HRESULT hr = ERROR_SUCCESS; LPRASENTRY lpRasEntry=NULL; LPRASDEVINFO lpRasDevInfo=NULL; RNAAPI *pcRNA = NULL; LPCTSTR p, p2; DWORD dwRasEntrySize = 0; DWORD dwRasDevInfoSize = 0; Assert(lpszDialNumber); // Check that the phone number only contains valid characters // // // 5/17/97 jmazner Olympus #137 // check for DBCS characters // #ifndef WIN16 if( !IsSBCSString( lpszDialNumber) ) { MsgBox(IDS_SBCSONLY,MB_MYERROR); SetFocus(GetDlgItem(m_hwnd,IDC_TEXTNUMBER)); SendMessage(GetDlgItem(m_hwnd, IDC_TEXTNUMBER), EM_SETSEL, (WPARAM) 0, (LPARAM) -1); hr = ERROR_INVALID_PARAMETER; goto CreateDialAsIsConnectoidExit; } #endif for (p = lpszDialNumber;*p;p++) { for(p2 = szValidPhoneCharacters;*p2;p2++) { if (*p == *p2) break; // p2 for loop } if (!*p2) break; // p for loop } if (*p) { MsgBox(IDS_INVALIDPHONE,MB_MYERROR); // // Set the focus back to the phone number field // SetFocus(GetDlgItem(m_hwnd,IDC_TEXTNUMBER)); { hr = ERROR_INVALID_PARAMETER; goto CreateDialAsIsConnectoidExit; } } //hr = ICWGetRasEntry(&lpRasEntry,&lpRasDevInfo,m_pszConnectoid); hr = ICWGetRasEntry(&lpRasEntry, &dwRasEntrySize, &lpRasDevInfo, &dwRasDevInfoSize, m_pszConnectoid); if (ERROR_SUCCESS != hr) goto CreateDialAsIsConnectoidExit; // Replace the phone number with the new one // lstrcpy(lpRasEntry->szLocalPhoneNumber, lpszDialNumber); // // This is dummy information and will not effect the dialed string // This information is required due to bugs in RAS apis. // lpRasEntry->dwCountryID = 1; lpRasEntry->dwCountryCode = 1; lpRasEntry->szAreaCode[0] = '8'; lpRasEntry->szAreaCode[1] = '\0'; // Set to dial as is // lpRasEntry->dwfOptions &= ~RASEO_UseCountryAndAreaCodes; if (!pcRNA) pcRNA = new RNAAPI; if (!pcRNA) { hr = ERROR_NOT_ENOUGH_MEMORY; goto CreateDialAsIsConnectoidExit; } // jmazner 10/10/96 Normandy #9066 // Don't assume that sizeof lpRasEntry and lpRasDevInfo buffers is that of their // respective structs; RasGetEntryProperties sometimes needs these buffers to be // larger than just the struct! // hr = pcRNA->RasSetEntryProperties(NULL,m_pszConnectoid,(LPBYTE)lpRasEntry, // sizeof(RASENTRY),(LPBYTE)lpRasDevInfo,sizeof(RASDEVINFO)); hr = pcRNA->RasSetEntryProperties(NULL,m_pszConnectoid,(LPBYTE)lpRasEntry, dwRasEntrySize,(LPBYTE)lpRasDevInfo,dwRasDevInfoSize); if (hr != ERROR_SUCCESS) { MsgBox(IDS_CANTSAVEKEY,MB_MYERROR); goto CreateDialAsIsConnectoidExit; } CreateDialAsIsConnectoidExit: if (lpRasEntry) GlobalFree(lpRasEntry); lpRasEntry = NULL; if (lpRasDevInfo) GlobalFree(lpRasDevInfo); lpRasDevInfo = NULL; if (pcRNA) delete pcRNA; pcRNA = NULL; return hr; }