|
|
//**********************************************************************
// File name: connect.cpp
//
// Implementation of connection point sink objects
//
// Functions:
//
// Copyright (c) 1992 - 1998 Microsoft Corporation. All rights reserved.
//**********************************************************************
#include "pre.h"
#include <ras.h>
BOOL DoOfferDownload(); extern BOOL g_bWebGateCheck; extern BOOL g_bConnectionErr;
/*
* CRefDialEvent::QueryInterface * CRefDialEvent::AddRef * CRefDialEvent::Release * * Purpose: * IUnknown members for CRefDialEvent object. */
STDMETHODIMP CRefDialEvent::QueryInterface( REFIID riid, void **ppv ) { *ppv = NULL;
if ( IID_IDispatch == riid || DIID__RefDialEvents == riid ) { *ppv = this; } if ( NULL != *ppv ) { ((LPUNKNOWN)*ppv)->AddRef(); return NOERROR; }
return E_NOINTERFACE; }
//IDispatch
STDMETHODIMP CRefDialEvent::Invoke( /* [in] */ DISPID dispIdMember, /* [in] */ REFIID /*riid*/, /* [in] */ LCID /*lcid*/, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS* pDispParams, /* [out] */ VARIANT* pVarResult, /* [out] */ EXCEPINFO* /*pExcepInfo*/, /* [out] */ UINT* puArgErr) { HRESULT hr = S_OK;
switch(dispIdMember) { case DISPID_RasDialStatus: { ASSERT(pDispParams->rgvarg); switch(pDispParams->rgvarg->iVal) { //Dialing
case RASCS_OpenPort: case RASCS_PortOpened: case RASCS_ConnectDevice: { if(!gpWizardState->iRedialCount) gpWizardState->lpSelectedISPInfo->DisplayTextWithISPName(GetDlgItem(m_hWnd,IDC_ISPDIAL_STATUS), IDS_ISPDIAL_STATUSDIALINGFMT, NULL); else gpWizardState->lpSelectedISPInfo->DisplayTextWithISPName(GetDlgItem(m_hWnd,IDC_ISPDIAL_STATUS), IDS_ISPDIAL_STATUSREDIALINGFMT, NULL); break; } //Connecting to network
case RASCS_DeviceConnected: case RASCS_AllDevicesConnected: case RASCS_Authenticate: case RASCS_StartAuthentication: case RASCS_LogonNetwork: { gpWizardState->lpSelectedISPInfo->DisplayTextWithISPName(GetDlgItem(m_hWnd,IDC_ISPDIAL_STATUS), IDS_ISPDIAL_STATUSCONNECTINGFMT, NULL); break; } case RASCS_Disconnected: { BSTR bstrDialStatus = NULL; gpWizardState->pRefDial->get_DialStatusString(&bstrDialStatus); SetWindowText(GetDlgItem(m_hWnd, IDC_ISPDIAL_STATUS), W2A(bstrDialStatus)); SysFreeString(bstrDialStatus); break; } default: break; } break; } case DISPID_RasConnectComplete: /* Incomplete */ { if (pDispParams && !gfISPDialCancel) { if( gpWizardState->bDoneWebServRAS = pDispParams->rgvarg[0].lVal ) { gpWizardState->lpSelectedISPInfo->DisplayTextWithISPName(GetDlgItem(m_hWnd,IDC_ISPDIAL_STATUS), IDS_ISPDIAL_STATUSCONNECTINGFMT, NULL); if (!DoOfferDownload()) hr = E_FAIL; } } if( !gfISPDialCancel ) PropSheet_PressButton(GetParent(m_hWnd),PSBTN_NEXT); break; } } return hr; }
BOOL DoOfferDownload() { // If Ras is complete
if (gpWizardState->bDoneWebServRAS) { ShowProgressAnimation(); // Download the first page from Webgate
BSTR bstrURL = NULL; BSTR bstrQueryURL = NULL; BOOL bRet;
TCHAR szTemp[10]; // Big enough to format a WORD
// Add the PID, GIUD, and Offer ID to the ISP data object
gpWizardState->pRefDial->ProcessSignedPID(&bRet); if (bRet) { BSTR bstrSignedPID = NULL; gpWizardState->pRefDial->get_SignedPID(&bstrSignedPID); gpWizardState->pISPData->PutDataElement(ISPDATA_SIGNED_PID, W2A(bstrSignedPID), FALSE); SysFreeString(bstrSignedPID); } else { gpWizardState->pISPData->PutDataElement(ISPDATA_SIGNED_PID, NULL, FALSE); }
// GUID comes from the ISPCSV file
gpWizardState->pISPData->PutDataElement(ISPDATA_GUID, gpWizardState->lpSelectedISPInfo->get_szOfferGUID(), FALSE);
// Offer ID comes from the ISPCSV file as a WORD
// NOTE: This is the last one, so besure AppendQueryPair does not add an Ampersand
wsprintf (szTemp, TEXT("%d"), gpWizardState->lpSelectedISPInfo->get_wOfferID()); gpWizardState->pISPData->PutDataElement(ISPDATA_OFFERID, szTemp, FALSE);
if (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_AUTOCONFIG) { // BUGBUG: If ISDN get the ISDN Autoconfig URL
if (gpWizardState->bISDNMode) { gpWizardState->pRefDial->get_ISDNAutoConfigURL(&bstrURL); } else { gpWizardState->pRefDial->get_AutoConfigURL(&bstrURL); } } else { // Get the signup URL
if (gpWizardState->bISDNMode) { gpWizardState->pRefDial->get_ISDNURL(&bstrURL); } else { gpWizardState->pRefDial->get_SignupURL(&bstrURL); }
}
//This flag is only to be used by ICWDEBUG.EXE
if (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_ISPURLOVERRIDE) gpWizardState->pISPData->GetQueryString(A2W(gpWizardState->cmnStateData.ispInfo.szIspURL), &bstrQueryURL); else // Get the full signup url with Query string params added to it
gpWizardState->pISPData->GetQueryString(bstrURL, &bstrQueryURL); // Setup WebGate
gpWizardState->pWebGate->put_Path(bstrQueryURL); gpWizardState->pWebGate->FetchPage(0,0,&bRet); // Memory cleanup
SysFreeString(bstrURL);
// If the fetch failed, then return the error code
if (!bRet) return FALSE; // Wait for the fetch to complete
WaitForEvent(gpWizardState->hEventWebGateDone); // Start the Idle Timer
StartIdleTimer(); // Now that webgate is done with it, free the queryURL
SysFreeString(bstrQueryURL); HideProgressAnimation(); } return TRUE; }
/*
* CWebGateEvent::QueryInterface * CWebGateEvent::AddRef * CWebGateEvent::Release * * Purpose: * IUnknown members for CWebGateEvent object. */
STDMETHODIMP CWebGateEvent::QueryInterface( REFIID riid, void **ppv ) { *ppv = NULL;
if ( IID_IDispatch == riid || DIID__WebGateEvents == riid ) { *ppv = this; } if ( NULL != *ppv ) { ((LPUNKNOWN)*ppv)->AddRef(); return NOERROR; }
return E_NOINTERFACE; }
STDMETHODIMP CWebGateEvent::Invoke( /* [in] */ DISPID dispIdMember, /* [in] */ REFIID /*riid*/, /* [in] */ LCID /*lcid*/, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS* pDispParams, /* [out] */ VARIANT* pVarResult, /* [out] */ EXCEPINFO* /*pExcepInfo*/, /* [out] */ UINT* puArgErr) {
switch(dispIdMember) { case DISPID_WEBGATE_DownloadComplete: { gpWizardState->bDoneWebServDownload = pDispParams->rgvarg[0].lVal; g_bWebGateCheck = FALSE; SetEvent(gpWizardState->hEventWebGateDone); break; } case DISPID_WEBGATE_DownloadProgress: { if (g_bWebGateCheck) { BOOL bConnected = FALSE; //This flag is only to be used by ICWDEBUG.EXE
if (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_MODEMOVERRIDE) bConnected = TRUE; else gpWizardState->pRefDial->get_RasGetConnectStatus(&bConnected);
if (!bConnected) { g_bWebGateCheck = FALSE; g_bConnectionErr = TRUE; SetEvent(gpWizardState->hEventWebGateDone); } } break; } } return S_OK; }
/*
* CINSHandlerEvent::QueryInterface * CINSHandlerEvent::AddRef * CINSHandlerEvent::Release * * Purpose: * IUnknown members for CINSHandlerEvent object. */
STDMETHODIMP CINSHandlerEvent::QueryInterface( REFIID riid, void **ppv ) { *ppv = NULL;
if ( IID_IDispatch == riid || DIID__INSHandlerEvents == riid ) { *ppv = this; } if ( NULL != *ppv ) { ((LPUNKNOWN)*ppv)->AddRef(); return NOERROR; }
return E_NOINTERFACE; }
STDMETHODIMP CINSHandlerEvent::Invoke( /* [in] */ DISPID dispIdMember, /* [in] */ REFIID /*riid*/, /* [in] */ LCID /*lcid*/, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS* pDispParams, /* [out] */ VARIANT* pVarResult, /* [out] */ EXCEPINFO* /*pExcepInfo*/, /* [out] */ UINT* puArgErr) {
switch(dispIdMember) { case DISPID_INSHandler_KillConnection: { gpWizardState->pRefDial->DoHangup(); break; } } return S_OK; }
|