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.
884 lines
26 KiB
884 lines
26 KiB
/*-----------------------------------------------------------------------------
|
|
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 <commctrl.h>
|
|
#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;
|
|
|
|
}
|