/*----------------------------------------------------------------------------- dialdlg.cpp Implement functionality of dialing and download progress dialog Copyright (C) 1996 Microsoft Corporation All rights reserved. Authors: ChrisK ChrisKauffman History: 7/22/96 ChrisK Cleaned and formatted -----------------------------------------------------------------------------*/ #include "pch.hpp" #include "icwdl.h" #include "resource.h" // the progress bar messages are defined in commctrl.h, but we can't include // it, because it introduces a conflicting definition for strDup. // so, just take out the one #define that we need //#include #define PBM_SETPOS (WM_USER+2) #define WM_DIAL WM_USER + 3 #define MAX_EXIT_RETRIES 10 #define MAX_RETIES 3 #define VALID_INIT (m_pcRNA && m_pcDLAPI) // ############################################################################ void CALLBACK LineCallback(DWORD hDevice, DWORD dwMessage, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3) { } //+---------------------------------------------------------------------------- // // Function: NeedZapper // // Synopsis: Checks to see if we need to handle the RNA connection dialog. // Only builds earlier than 1071 will have the RNA connection dialog // // Arguments: None // // Returns: True - the RNA dialog will have to be handled // // History: ArulM Created 7/18/96 // ChrisK Installed into autodialer 7/19/96 // //----------------------------------------------------------------------------- static BOOL NeedZapper(void) { OSVERSIONINFO oi; memset(&oi, 0, sizeof(oi)); oi.dwOSVersionInfoSize = sizeof(oi); if( GetVersionEx(&oi) && (oi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) && (oi.dwMajorVersion==4) && (oi.dwMinorVersion==0) && (LOWORD(oi.dwBuildNumber) <= 1070) ) return TRUE; else return FALSE; } // ############################################################################ VOID WINAPI ProgressCallBack( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength ) { if (dwContext) ((CDialingDlg*)dwContext)->ProgressCallBack(hInternet,dwContext,dwInternetStatus, lpvStatusInformation, dwStatusInformationLength); } // ############################################################################ HRESULT WINAPI DialingDownloadDialog(PDIALDLGDATA pDD) { HRESULT hr = ERROR_SUCCESS; CDialingDlg *pcDialDlg; LPLINEEXTENSIONID lpExtensionID=NULL; // Validate parameters // Assert(pDD); if (!pDD) { hr = ERROR_INVALID_PARAMETER; goto DialingDownloadDialogExit; } if (pDD->dwSize < sizeof(DIALDLGDATA)) { hr = ERROR_BUFFER_TOO_SMALL; goto DialingDownloadDialogExit; } // Alloc and fill dialog object // pcDialDlg = new CDialingDlg; if (!pcDialDlg) { hr = ERROR_NOT_ENOUGH_MEMORY; goto DialingDownloadDialogExit; } if (ERROR_SUCCESS != (hr = pcDialDlg->Init())) goto DialingDownloadDialogExit; StrDup(&pcDialDlg->m_pszConnectoid,pDD->pszRasEntryName); StrDup(&pcDialDlg->m_pszMessage,pDD->pszMessage); StrDup(&pcDialDlg->m_pszUrl,pDD->pszMultipartMIMEUrl); StrDup(&pcDialDlg->m_pszDunFile,pDD->pszDunFile); pcDialDlg->m_pfnStatusCallback = pDD->pfnStatusCallback; pcDialDlg->m_hInst = pDD->hInst; pcDialDlg->m_bSkipDial = pDD->bSkipDial; // Initialize TAPI // hr = lineInitialize(&pcDialDlg->m_hLineApp,pcDialDlg->m_hInst,LineCallback,NULL,&pcDialDlg->m_dwNumDev); if (hr != ERROR_SUCCESS) goto DialingDownloadDialogExit; AssertMsg(pcDialDlg->m_dwTapiDev < pcDialDlg->m_dwNumDev,"The user has selected an invalid TAPI device.\n"); lpExtensionID = (LPLINEEXTENSIONID)GlobalAlloc(GPTR,sizeof(LINEEXTENSIONID)); if (!lpExtensionID) { hr = ERROR_NOT_ENOUGH_MEMORY; goto DialingDownloadDialogExit; } hr = lineNegotiateAPIVersion(pcDialDlg->m_hLineApp, pcDialDlg->m_dwTapiDev, 0x00010004, 0x00010004,&pcDialDlg->m_dwAPIVersion, lpExtensionID); // 4/2/97 ChrisK Olympus 2745 while (ERROR_SUCCESS != hr && pcDialDlg->m_dwTapiDev < (pcDialDlg->m_dwNumDev - 1)) { pcDialDlg->m_dwTapiDev++; hr = lineNegotiateAPIVersion(pcDialDlg->m_hLineApp, pcDialDlg->m_dwTapiDev, 0x00010004, 0x00010004,&pcDialDlg->m_dwAPIVersion, lpExtensionID); } // Delete the extenstion ID since we don't use it, but keep the version information. // if (lpExtensionID) GlobalFree(lpExtensionID); if (hr != ERROR_SUCCESS) goto DialingDownloadDialogExit; // Call back filter for reconnect pcDialDlg->m_pfnRasDialFunc1 = pDD->pfnRasDialFunc1; // Display dialog // hr = (HRESULT)DialogBoxParam(GetModuleHandle(TEXT("ICWDIAL")),MAKEINTRESOURCE(IDD_DIALING), pDD->hParentHwnd,GenericDlgProc,(LPARAM)pcDialDlg); if (pDD->phRasConn) *(pDD->phRasConn) = pcDialDlg->m_hrasconn; // 4/2/97 ChrisK Olympus 296 // This is now handled inside the dialog //#if !defined(WIN16) // if ((ERROR_USERNEXT == hr) && NeedZapper()) // MinimizeRNAWindow(pDD->pszRasEntryName,GetModuleHandle("ICWDIAL")); //#endif // BUGBUG: on an error wait for the connection to die DialingDownloadDialogExit: // Close tapi line // if (NULL != pcDialDlg) { // 4/2/97 ChrisK Olympus 296 if (pcDialDlg->m_hLineApp) { lineShutdown(pcDialDlg->m_hLineApp); pcDialDlg->m_hLineApp = NULL; } // // ChrisK 296 6/3/97 // Broaden window // // StopRNAReestablishZapper(g_hRNAZapperThread); } // // 5/23/97 jmazner Olympus #4652 // delete(pcDialDlg); return hr; } // ############################################################################ CDialingDlg::CDialingDlg() { m_hrasconn = NULL; m_pszConnectoid = NULL; m_hThread = NULL; m_dwThreadID = 0; m_hwnd = NULL; m_pszUrl = NULL; m_pszDisplayable = NULL; m_dwDownLoad = 0; m_pszPhoneNumber = NULL; m_pszMessage = NULL; m_pfnStatusCallback = NULL; m_unRasEvent = 0; m_pszDunFile = NULL; m_hLineApp = NULL; m_dwNumDev = 0; m_dwTapiDev = 0; m_dwAPIVersion = 0; m_pcRNA = NULL; // m_hDownLoadDll = NULL; m_bProgressShowing = FALSE; m_dwLastStatus = 0; m_pcDLAPI = NULL; m_bSkipDial = FALSE; // Normandy 11919 - ChrisK // Do not prompt to exit on dialing dialog since we don't exit the app from // here m_bShouldAsk = FALSE; // // ChrisK 5240 Olympus // Only the thread that creates the dwDownload should invalidate it // so we need another method to track if the cancel button has been // pressed. // m_fDownloadHasBeenCanceled = FALSE; } // ############################################################################ HRESULT CDialingDlg::Init() { HRESULT hr = ERROR_SUCCESS; m_pcRNA = new RNAAPI; if (!m_pcRNA) { hr = ERROR_NOT_ENOUGH_MEMORY; goto InitExit; } m_pcDLAPI = new CDownLoadAPI; if (!m_pcDLAPI) { hr = ERROR_NOT_ENOUGH_MEMORY; goto InitExit; } m_pszPhoneNumber = (LPTSTR)GlobalAlloc(GPTR,sizeof(TCHAR)*256); if (!m_pszPhoneNumber) { hr = ERROR_NOT_ENOUGH_MEMORY; goto InitExit; } InitExit: return hr; } // ############################################################################ CDialingDlg::~CDialingDlg() { TraceMsg(TF_GENERAL, "ICWDIAL: CDialingDlg::~CDialingDlg"); // // 5/25/97 ChrisK I know this will leak the connection but that's ok // since we sweep this up later and in the meantime we need to close // out the object // //if (m_hrasconn && m_pcRNA) //{ // m_pcRNA->RasHangUp(m_hrasconn); //} //m_hrasconn = NULL; if (m_pszConnectoid) GlobalFree(m_pszConnectoid); m_pszConnectoid = NULL; if (m_pszUrl) GlobalFree(m_pszUrl); m_pszUrl = NULL; if (m_pszDisplayable) GlobalFree(m_pszDisplayable); m_pszDisplayable = NULL; // // ChrisK 5240 Olympus // Only the thread that creates the dwDownload should invalidate it // so we need another method to track if the cancel button has been // pressed. // // // ChrisK 6/24/97 Olympus 6373 // We have to call DownLoadClose even if the download was canceled because // we have to release the semaphores // if (m_dwDownLoad && m_pcDLAPI) { m_pcDLAPI->DownLoadClose(m_dwDownLoad); m_fDownloadHasBeenCanceled = TRUE; } m_dwDownLoad = 0; if (m_hThread) { // // 5/23/97 jmazner Olympus #4652 // // we want to make sure the thread is killed before // we delete the m_pcDLApi that it relies on. // WaitForSingleObject(m_hThread, INFINITE); CloseHandle(m_hThread); } m_hThread = NULL; m_dwThreadID = 0; m_hwnd = NULL; if (m_pszPhoneNumber) GlobalFree(m_pszPhoneNumber); m_pszPhoneNumber = NULL; if (m_pszMessage) GlobalFree(m_pszMessage); m_pszMessage = NULL; m_pfnStatusCallback=NULL; if (m_pszDunFile) GlobalFree(m_pszDunFile); m_pszDunFile = NULL; if (m_hLineApp) lineShutdown(m_hLineApp); m_hLineApp = NULL; m_dwNumDev = 0; m_dwTapiDev = 0; m_dwAPIVersion = 0; if (m_pcRNA) delete m_pcRNA; m_pcRNA = NULL; m_bProgressShowing = FALSE; m_dwLastStatus = 0; if (m_pcDLAPI) delete m_pcDLAPI; m_pcDLAPI = NULL; // // 4/2/97 ChrisK Olympus 296 // StopRNAReestablishZapper(g_hRNAZapperThread); } // ############################################################################ LRESULT CDialingDlg::DlgProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam, LRESULT lres) { HRESULT hr; // Normandy 11745 // WORD wIDS; FARPROC fp; DWORD dwThreadResults; INT iRetries; static bDisconnect; Assert(VALID_INIT); switch(uMsg) { case WM_INITDIALOG: // // Register with caller's filter // if (m_pfnRasDialFunc1) (m_pfnRasDialFunc1)(NULL,WM_RegisterHWND,RASCS_OpenPort,HandleToUlong(hwnd),0); m_hwnd = hwnd; m_bProgressShowing = FALSE; ShowWindow(GetDlgItem(m_hwnd,IDC_PROGRESS),SW_HIDE); m_unRasEvent = RegisterWindowMessageA(RASDIALEVENT); if (m_unRasEvent == 0) m_unRasEvent = WM_RASDIALEVENT; // Bug Normandy 5920 // ChrisK, turns out we are calling MakeBold twice // MakeBold(GetDlgItem(m_hwnd,IDC_LBLTITLE),TRUE,FW_BOLD); IF_NTONLY bDisconnect = FALSE; ENDIF_NTONLY // // Show number to be dialed // if (m_bSkipDial) { PostMessage(m_hwnd,m_unRasEvent,RASCS_Connected,SUCCESS); } else { hr = GetDisplayableNumberDialDlg(); if (hr != ERROR_SUCCESS) { SetDlgItemText(m_hwnd,IDC_LBLNUMBER,m_pszPhoneNumber); } else { SetDlgItemText(m_hwnd,IDC_LBLNUMBER,m_pszDisplayable); } PostMessage(m_hwnd,WM_DIAL,0,0); } lres = TRUE; break; case WM_DIAL: SetForegroundWindow(m_hwnd); hr = DialDlg(); if (hr != ERROR_SUCCESS) EndDialog(m_hwnd,hr); lres = TRUE; break; case WM_COMMAND: switch(LOWORD(wparam)) { case IDC_CMDCANCEL: // // Tell the user what we are doing, since it may take awhile // SetDlgItemText(m_hwnd,IDC_LBLSTATUS,GetSz(IDS_RAS_HANGINGUP)); // // Cancel download first, HangUp second.... // // // ChrisK 5240 Olympus // Only the thread that creates the dwDownload should invalidate it // so we need another method to track if the cancel button has been // pressed. // if (m_dwDownLoad && m_pcDLAPI && !m_fDownloadHasBeenCanceled) { m_pcDLAPI->DownLoadCancel(m_dwDownLoad); m_fDownloadHasBeenCanceled = TRUE; } if (m_pcRNA && m_hrasconn) { m_pcRNA->RasHangUp(m_hrasconn); } PostMessage(m_hwnd,m_unRasEvent,(WPARAM)RASCS_Disconnected,(LPARAM)ERROR_USER_DISCONNECTION); lres = TRUE; break; } break; case WM_CLOSE: // CANCEL First, HangUp second.... // // // ChrisK 5240 Olympus // Only the thread that creates the dwDownload should invalidate it // so we need another method to track if the cancel button has been // pressed. // if (m_dwDownLoad && m_pcDLAPI && !m_fDownloadHasBeenCanceled) { m_pcDLAPI->DownLoadCancel(m_dwDownLoad); m_fDownloadHasBeenCanceled = TRUE; } if (m_pcRNA && m_hrasconn) { m_pcRNA->RasHangUp(m_hrasconn); } EndDialog(hwnd,ERROR_USERCANCEL); m_hwnd = NULL; lres = TRUE; break; case WM_DOWNLOAD_DONE: dwThreadResults = STILL_ACTIVE; iRetries = 0; if (m_pcRNA && m_hrasconn) { m_pcRNA->RasHangUp(m_hrasconn); m_hrasconn = NULL; } do { if (!GetExitCodeThread(m_hThread,&dwThreadResults)) { AssertMsg(0,"CONNECT:GetExitCodeThread failed.\n"); } iRetries++; if (dwThreadResults == STILL_ACTIVE) Sleep(500); } while (dwThreadResults == STILL_ACTIVE && iRetries < MAX_EXIT_RETRIES); if (dwThreadResults == ERROR_SUCCESS) EndDialog(hwnd,ERROR_USERNEXT); else EndDialog(hwnd,dwThreadResults); lres = TRUE; break; default: if (uMsg == m_unRasEvent) { TCHAR szRasError[10]; TCHAR szRasMessage[256]; wsprintf(szRasError,TEXT("%d %d"),wparam,lparam); RegSetValue(HKEY_LOCAL_MACHINE,TEXT("Software\\Microsoft\\iSignUp"),REG_SZ, szRasError,lstrlen(szRasError)); TraceMsg(TF_GENERAL, "AUTODIAL: Ras message %d error (%d).\n",wparam,lparam); hr = m_pfnStatusCallback((DWORD)wparam, szRasMessage, 256); if (!hr) SetDlgItemText(m_hwnd,IDC_LBLSTATUS,szRasMessage); switch(wparam) { case RASCS_Connected: #if !defined(WIN16) // 4/2/97 ChrisK Olympus 296 // // ChrisK Olympus 6060 6/10/97 // If the URL is blank, then we don't need the zapper thread. // if (NeedZapper()) { HMODULE hMod; hMod = GetModuleHandle(TEXT("ICWDIAL")); MinimizeRNAWindow(m_pszConnectoid,hMod); if (m_pszUrl && m_pszUrl[0]) { g_hRNAZapperThread = LaunchRNAReestablishZapper(hMod); } hMod = NULL; } #endif if (m_pszUrl) { // // we should now let the user know that we // are downloading // MKarki (5/5/97) - Fix for Bug#423 // SetDlgItemText(m_hwnd,IDC_LBLSTATUS,GetSz (IDS_DOWNLOADING)); // The connection is open and ready. Start the download. // m_dwThreadID = 0; m_hThread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)DownloadThreadInit,this,0,&m_dwThreadID); if (!m_hThread) { hr = GetLastError(); if (m_pcRNA && m_hrasconn) { m_pcRNA->RasHangUp(m_hrasconn); m_hrasconn = NULL; } EndDialog(m_hwnd,hr); break; } } else { EndDialog(m_hwnd,ERROR_USERNEXT); } break; case RASCS_Disconnected: IF_NTONLY // There is a possibility that we will get multiple disconnects in NT // and we only want to handle the first one. Note: the flag is reset // in the INITIALIZE event, so we should handle 1 disconnect per instance // of the dialog. if (bDisconnect) break; else bDisconnect = TRUE; ENDIF_NTONLY if (m_hrasconn && m_pcRNA) m_pcRNA->RasHangUp(m_hrasconn); m_hrasconn = NULL; EndDialog(m_hwnd,lparam); break; default: IF_NTONLY if (SUCCESS != lparam) { PostMessage(m_hwnd,m_unRasEvent,(WPARAM)RASCS_Disconnected,lparam); } ENDIF_NTONLY } } } return lres; } // ############################################################################ HRESULT CDialingDlg::GetDisplayableNumberDialDlg() { HRESULT hr; LPRASENTRY lpRasEntry = NULL; LPRASDEVINFO lpRasDevInfo = NULL; DWORD dwRasEntrySize = 0; DWORD dwRasDevInfoSize = 0; LPLINETRANSLATEOUTPUT lpOutput1 = NULL; LPLINETRANSLATEOUTPUT lpOutput2 = NULL; HINSTANCE hRasDll = NULL; FARPROC fp = NULL; Assert(VALID_INIT); // Format the phone number // lpOutput1 = (LPLINETRANSLATEOUTPUT)GlobalAlloc(GPTR,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(GPTR,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 CDialingDlg::DialDlg() { TCHAR szPassword[PWLEN+2]; LPRASDIALPARAMS lpRasDialParams = NULL; HRESULT hr = ERROR_SUCCESS; BOOL bPW; Assert(VALID_INIT); // Get connectoid information // lpRasDialParams = (LPRASDIALPARAMS)GlobalAlloc(GPTR,sizeof(RASDIALPARAMS)); if (!lpRasDialParams) { hr = ERROR_NOT_ENOUGH_MEMORY; goto DialExit; } lpRasDialParams->dwSize = sizeof(RASDIALPARAMS); lstrcpyn(lpRasDialParams->szEntryName,m_pszConnectoid,RAS_MaxEntryName); bPW = FALSE; hr = m_pcRNA->RasGetEntryDialParams(NULL,lpRasDialParams,&bPW); if (hr != ERROR_SUCCESS) { goto DialExit; } // Add the user's password // szPassword[0] = 0; if (GetISPFile() != NULL && *(GetISPFile()) != TEXT('\0')) { // GetPrivateProfileString examines one character before the filename // if it is an empty string, which could result in AV, if the address // refers to an invalid page. GetPrivateProfileString( INFFILE_USER_SECTION,INFFILE_PASSWORD, NULLSZ,szPassword,PWLEN + 1,GetISPFile()); } // if didnt get password, then try to get from DUN file (if any) if(!szPassword[0] && m_pszDunFile) { // 4-29-97 Chrisk Olympus 3985 // Due to the wrong filename being used, the password was always being set to // NULL and therefore requiring the user to provide the password to log onto the // signup server. GetPrivateProfileString( INFFILE_USER_SECTION,INFFILE_PASSWORD, NULLSZ,szPassword,PWLEN + 1,m_pszDunFile); //NULLSZ,szPassword,PWLEN + 1,g_szCurrentDUNFile); } if(szPassword[0]) { lstrcpyn(lpRasDialParams->szPassword, szPassword,PWLEN+1); TraceMsg(TF_GENERAL, "ICWDIAL: Password is not blank.\r\n"); } else { TraceMsg(TF_GENERAL, "ICWDIAL: Password is blank.\r\n"); } // Dial connectoid // Assert(!m_hrasconn); #if !defined(WIN16) && defined(DEBUG) if (FCampusNetOverride()) { // // Skip dialing because the server is on the campus network // PostMessage(m_hwnd,RegisterWindowMessageA(RASDIALEVENT),RASCS_Connected,0); } else { #endif // !WIN16 && DEBUG if (m_pfnRasDialFunc1) hr = m_pcRNA->RasDial(NULL,NULL,lpRasDialParams,1,m_pfnRasDialFunc1,&m_hrasconn); else hr = m_pcRNA->RasDial(NULL,NULL,lpRasDialParams,0xFFFFFFFF,m_hwnd,&m_hrasconn); if (hr != ERROR_SUCCESS) { if (m_hrasconn && m_pcRNA) { m_pcRNA->RasHangUp(m_hrasconn); m_hrasconn = NULL; } goto DialExit; } #if !defined(WIN16) && defined(DEBUG) } #endif if (lpRasDialParams) GlobalFree(lpRasDialParams); lpRasDialParams = NULL; DialExit: return hr; } // ############################################################################ VOID CDialingDlg::ProgressCallBack( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength ) { TCHAR szRasMessage[256]; HRESULT hr = ERROR_SUCCESS; WPARAM *puiStatusInfo = NULL; // // 5/28/97 jmazner Olympus #4579 // *lpvStatusInformation is the percentage of completed download, // as a value from 0 to 100. // puiStatusInfo = (WPARAM *) lpvStatusInformation; Assert( puiStatusInfo ); Assert( *puiStatusInfo <= 100 ); Assert(VALID_INIT); if (!m_bProgressShowing) ShowWindow(GetDlgItem(m_hwnd,IDC_PROGRESS),SW_SHOW); if (m_dwLastStatus != dwInternetStatus) { hr = m_pfnStatusCallback(dwInternetStatus,szRasMessage,256); if (!hr) SetDlgItemText(m_hwnd,IDC_LBLSTATUS,szRasMessage); m_dwLastStatus = dwInternetStatus; TraceMsg(TF_GENERAL, "CONNECT:inet status:%s, %d, %d.\n",szRasMessage,m_dwLastStatus,dwInternetStatus); } // // 5/28/97 jmazner Olympus #4579 // Send update messages to the progress bar // PostMessage(GetDlgItem(m_hwnd,IDC_PROGRESS), PBM_SETPOS, *puiStatusInfo, 0); m_bProgressShowing = TRUE; }