///////////////////////////////////////// // File: RWPost.cpp // ////////////////////////////////////////// //#define STRICT // Include Files // //Modifications : //MDX1 03/11/99 Suresh // In SendHTTPData() the MSID will be got from Cookie // it will no longer be red from the Registry // // #include #include #include #include "resource.h" #include "Ithread.h" #include "icw.h" #include "util.h" #include "tcp.h" #include "rw_common.h" #include "dconv.h" #include "RwPost.h" #include "mcm.h" #include "ATK_RAS.h" #include "tcp.h" #define CONNECTION_TIME_OUT 1000 * 60 #define MAX_PROXY_AUTH_RETRY 2 static CInternetThread theInternetClass; extern BOOL bOemDllLoaded; extern HANDLE hOemDll; static DWORD dwConnectionStatus = DIALUP_NOT_REQUIRED; extern DWORD InvokePost(HWND hWnd,CInternetThread *p); void InitializeInetThread(HINSTANCE hIns) { theInternetClass.Initialize(hIns); } // // Returns // DIALUP_NOT_REQUIRED : Use Network for tx // DIALUP_REQUIRED : Use Dialupo for Tx // RWZ_ERROR_NOTCPIP : No TCP/IPO // CONNECTION_CANNOT_BE_ESTABLISHED : No modem or RAS setup DWORD CheckInternetConnectivityExists(HWND hWnd, HINSTANCE hInstance) { static int iAuthRetry =0; // Retry count for the number of times to invoke Proxy Auth Dlg static CHAR szProxyServer[MAX_PATH]; CHAR szProxySettings[MAX_PATH]; static int iChkInternetConnection = 0; static DWORD sdwConnectionStatus = CONNECTION_CANNOT_BE_ESTABLISHED; BOOL bNeedsReboot; BOOL bRet; DWORD dwPingStatus; DWORD dwError= RWZ_NOERROR; BOOL bProxyExists; MODEMSTATUS mStatus; DWORD dwTimeOut = CONNECTION_TIME_OUT; int iProxyPort; TCHAR szUserName[48] = _T(""), szPassword[48] = _T(""); int iDisableAutoDial; iDisableAutoDial=1; if( sdwConnectionStatus == DIALUP_NOT_REQUIRED ) return DIALUP_NOT_REQUIRED; if( sdwConnectionStatus == DIALUP_REQUIRED ) return DIALUP_REQUIRED; // Disable Auto Dial only // if there are not active Dialup Connection // if( ATK_IsRasDllOk() == RAS_DLL_LOADED ) { if( IsDialupConnectionActive() ) { iDisableAutoDial=0; } } if(iDisableAutoDial) { DisableAutoDial();// Disable the Auto Dial } // Ping Current Host to check if TCP is // installed /configured. // // if it is for the first time // RWZ_PINGSTATUS_NOTCPIP : if no socket library or get hostname fails // RWZ_PINGSTATUS_SUCCESS : if gethostname and ping is successful // RWZ_PINGSTATUS_FAIL : if gethostname is succesful and ping via icmp fails dwPingStatus = PingHost(); RW_DEBUG <<"\n Ping To Host (40: No TCP/IP 41: Success 42: Failure)=: " << dwPingStatus << flush; if (dwPingStatus == RWZ_PINGSTATUS_NOTCPIP ) { return RWZ_ERROR_NOTCPIP; } if( dwPingStatus == RWZ_PINGSTATUS_SUCCESS ){ bProxyExists = theInternetClass.GetSystemProxyServer(szProxyServer,MAX_PATH, &iProxyPort); if (1 /*bProxyExists*/) { //theInternetClass.GetSystemProxySettings(szProxySettings,MAX_PATH); //theInternetClass.SetSystemProxySettings(szProxySettings); theInternetClass.SetSystemProxySettings("itgproxy"); if(1 /*Ping(szProxyServer)*/) { DWORD dwChkSite; int iExit; iExit =0; RW_DEBUG <<"\n Ping Success" << flush; theInternetClass.m_UserName[0] = _T('\0'); theInternetClass.m_Password[0] = _T('\0'); do { dwChkSite = ChkSiteAvailability(hWnd, theInternetClass.m_strIISServer, dwTimeOut, (LPTSTR) theInternetClass.GetProxyServer(), theInternetClass.m_UserName,theInternetClass.m_Password); RW_DEBUG <<"\n After ChkSiteAvailability : " << dwChkSite << flush; if( dwChkSite == RWZ_SITE_REQUIRES_AUTHENTICATION) { if( iAuthRetry++ > MAX_PROXY_AUTH_RETRY) { iExit =1; } // Modified on 2/4/98 // No Need to call our Proxy Auth Dlg insted use // InternetErrorDlg() to invoke Auth Dlg //if(GetProxyAuthenticationInfo(hInstance,ConvertToUnicode(szProxyServer), // theInternetClass.m_UserName,theInternetClass.m_Password)) { //} }else { // Exit because Connectivity is OK iExit = 1; } }while(!iExit); if( dwChkSite == RWZ_SITE_CONNECTED) { theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG; // Modified on 2/4/98to use the PRECONFIGIED rather than the PROXY specified by // the user programatically // The INTERNET_OPEN_TYPE_PROXY is changed ..... // This change is done in order for IE Auth Dlg dwError = DIALUP_NOT_REQUIRED; sdwConnectionStatus = DIALUP_NOT_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; goto ExitChk; } } } // No Procy so check for connection using existing LAN // already opened Dialup Connection // Set to NULL Proxy // theInternetClass.SetProxyServer("",80);// Set it To Null theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_DIRECT; if( ATK_IsRasDllOk() == RAS_DLL_LOADED ) { if( IsDialupConnectionActive() ) { // Already Dialup COnnection is Active dwError = DIALUP_NOT_REQUIRED; sdwConnectionStatus = DIALUP_NOT_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; goto ExitChk; } } // // Check Lan Connection bRet = CheckHostName( ConvertToANSIString(theInternetClass.m_strIISServer)); if(bRet) { theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_DIRECT; if(ChkSiteAvailability(NULL, theInternetClass.m_strIISServer, dwTimeOut, _T(""),szUserName,szPassword)) { dwError = DIALUP_NOT_REQUIRED; sdwConnectionStatus = DIALUP_NOT_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; goto ExitChk; } } } dwError = DIALUP_REQUIRED; sdwConnectionStatus = DIALUP_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_DIRECT; RW_DEBUG << "\n Before MDMCHK..." << flush; //MDMCHK: // Install Modem // /**bNeedsReboot = theInternetClass.InstallModem(hWnd); if(bNeedsReboot) { // ????? // This will be abnormally terminating the Registration Wizard, // So support modem installation in OS which dosent call for a reboot } **/ mStatus = MSDetectModemTAPI(hInstance); if(mStatus != kMsModemOk ) { dwError = CONNECTION_CANNOT_BE_ESTABLISHED; sdwConnectionStatus = CONNECTION_CANNOT_BE_ESTABLISHED; } if(dwError == DIALUP_REQUIRED ) { // Load RASPAI32.DLL and Exit if it can not be loaded if( ATK_IsRasDllOk() != RAS_DLL_LOADED ) { // dwError = CONNECTION_CANNOT_BE_ESTABLISHED; sdwConnectionStatus = CONNECTION_CANNOT_BE_ESTABLISHED; #ifdef _LOG_IN_FILE RW_DEBUG << "\n RASAPI32.DLL NOT FOUND ..."; #endif } } ExitChk: #ifdef _LOG_IN_FILE RW_DEBUG <<"\n Chk Connection ( 1 = via NTWK, 2 = DIalup , 3 = Problem) " << dwError << flush; #endif theInternetClass.UnLoadInetCfgDll(); return dwError; } // // Returns // DIALUP_NOT_REQUIRED : Use Network for tx // DIALUP_REQUIRED : Use Dialupo for Tx // RWZ_ERROR_NOTCPIP : No TCP/IPO // CONNECTION_CANNOT_BE_ESTABLISHED : No modem or RAS setup DWORD CheckInternetConnectivityExistsOldLogic(HWND hWnd, HINSTANCE hInstance) { static int iAuthRetry =0; // Retry count for the number of times to invoke Proxy Auth Dlg static CHAR szProxyServer[MAX_PATH]; CHAR szProxySettings[MAX_PATH]; static int iChkInternetConnection = 0; static DWORD sdwConnectionStatus = CONNECTION_CANNOT_BE_ESTABLISHED; BOOL bNeedsReboot; BOOL bRet; DWORD dwPingStatus; DWORD dwError= RWZ_NOERROR; BOOL bProxyExists; MODEMSTATUS mStatus; DWORD dwTimeOut = CONNECTION_TIME_OUT; int iProxyPort; TCHAR szUserName[48] = _T(""), szPassword[48] = _T(""); int iDisableAutoDial; iDisableAutoDial=1; if( sdwConnectionStatus == DIALUP_NOT_REQUIRED ) return DIALUP_NOT_REQUIRED; if( sdwConnectionStatus == DIALUP_REQUIRED ) return DIALUP_REQUIRED; // Disable Auto Dial only // if there are not active Dialup Connection // if( ATK_IsRasDllOk() == RAS_DLL_LOADED ) { if( IsDialupConnectionActive() ) { iDisableAutoDial=0; } } if(iDisableAutoDial) { DisableAutoDial();// Disable the Auto Dial } // Ping Current Host to check if TCP is // installed /configured. // // if it is for the first time // RWZ_PINGSTATUS_NOTCPIP : if no socket library or get hostname fails // RWZ_PINGSTATUS_SUCCESS : if gethostname and ping is successful // RWZ_PINGSTATUS_FAIL : if gethostname is succesful and ping via icmp fails dwPingStatus = PingHost(); RW_DEBUG <<"\n Ping To Host (40: No TCP/IP 41: Success 42: Failure)=: " << dwPingStatus << flush; if (dwPingStatus == RWZ_PINGSTATUS_NOTCPIP ) { return RWZ_ERROR_NOTCPIP; } if( dwPingStatus == RWZ_PINGSTATUS_SUCCESS ){ bProxyExists = theInternetClass.GetSystemProxyServer(szProxyServer,MAX_PATH, &iProxyPort); if (bProxyExists) { theInternetClass.GetSystemProxySettings(szProxySettings,MAX_PATH); theInternetClass.SetSystemProxySettings(szProxySettings); if(Ping(szProxyServer)) { DWORD dwChkSite; int iExit; iExit =0; RW_DEBUG <<"\n Ping Success" << flush; theInternetClass.m_UserName[0] = _T('\0'); theInternetClass.m_Password[0] = _T('\0'); do { dwChkSite = ChkSiteAvailability(hWnd, theInternetClass.m_strIISServer, dwTimeOut, (LPTSTR) theInternetClass.GetProxyServer(), theInternetClass.m_UserName,theInternetClass.m_Password); RW_DEBUG <<"\n After ChkSiteAvailability : " << dwChkSite << flush; if( dwChkSite == RWZ_SITE_REQUIRES_AUTHENTICATION) { if( iAuthRetry++ > MAX_PROXY_AUTH_RETRY) { iExit =1; } // Modified on 2/4/98 // No Need to call our Proxy Auth Dlg insted use // InternetErrorDlg() to invoke Auth Dlg //if(GetProxyAuthenticationInfo(hInstance,ConvertToUnicode(szProxyServer), // theInternetClass.m_UserName,theInternetClass.m_Password)) { //} }else { // Exit because Connectivity is OK iExit = 1; } }while(!iExit); if( dwChkSite == RWZ_SITE_CONNECTED) { theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG; // Modified on 2/4/98to use the PRECONFIGIED rather than the PROXY specified by // the user programatically // The INTERNET_OPEN_TYPE_PROXY is changed ..... // This change is done in order for IE Auth Dlg dwError = DIALUP_NOT_REQUIRED; sdwConnectionStatus = DIALUP_NOT_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; goto ExitChk; } } } // No Procy so check for connection using existing LAN // already opened Dialup Connection // Set to NULL Proxy // theInternetClass.SetProxyServer("",80);// Set it To Null theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_DIRECT; if( ATK_IsRasDllOk() == RAS_DLL_LOADED ) { if( IsDialupConnectionActive() ) { // Already Dialup COnnection is Active dwError = DIALUP_NOT_REQUIRED; sdwConnectionStatus = DIALUP_NOT_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; goto ExitChk; } } // // Check Lan Connection bRet = CheckHostName( ConvertToANSIString(theInternetClass.m_strIISServer)); if(bRet) { theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_DIRECT; if(ChkSiteAvailability(NULL, theInternetClass.m_strIISServer, dwTimeOut, _T(""),szUserName,szPassword)) { dwError = DIALUP_NOT_REQUIRED; sdwConnectionStatus = DIALUP_NOT_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; goto ExitChk; } } } dwError = DIALUP_REQUIRED; sdwConnectionStatus = DIALUP_REQUIRED; dwConnectionStatus = DIALUP_NOT_REQUIRED; theInternetClass.m_dwAccessType = INTERNET_OPEN_TYPE_DIRECT; RW_DEBUG << "\n Before MDMCHK..." << flush; //MDMCHK: // Install Modem // bNeedsReboot = theInternetClass.InstallModem(hWnd); if(bNeedsReboot) { // ????? // This will be abnormally terminating the Registration Wizard, // So support modem installation in OS which dosent call for a reboot } mStatus = MSDetectModemTAPI(hInstance); if(mStatus != kMsModemOk ) { dwError = CONNECTION_CANNOT_BE_ESTABLISHED; sdwConnectionStatus = CONNECTION_CANNOT_BE_ESTABLISHED; } if(dwError == DIALUP_REQUIRED ) { // Load RASPAI32.DLL and Exit if it can not be loaded if( ATK_IsRasDllOk() != RAS_DLL_LOADED ) { // dwError = CONNECTION_CANNOT_BE_ESTABLISHED; sdwConnectionStatus = CONNECTION_CANNOT_BE_ESTABLISHED; #ifdef _LOG_IN_FILE RW_DEBUG << "\n RASAPI32.DLL NOT FOUND ..."; #endif } } ExitChk: #ifdef _LOG_IN_FILE RW_DEBUG <<"\n Chk Connection ( 1 = via NTWK, 2 = DIalup , 3 = Problem) " << dwError << flush; #endif theInternetClass.UnLoadInetCfgDll(); return dwError; } DWORD SendHTTPData(HWND hWnd, HINSTANCE hInstance) { char czB [MAX_BUFFER + 1]; // Buffer for Tx DWORD dwBufSize = MAX_BUFFER; DWORD dwOemBufSize; DWORD dwRet; _TCHAR szValue[256]; DWORD dwTimeOut = CONNECTION_TIME_OUT; // MDX : 03/11/99 // Get MSID From Cookie , No need to check from Registry #ifdef _LOG_IN_FILE RW_DEBUG << "\n*******Getting Cookie********\n"<< flush; #endif if(dwConnectionStatus == DIALUP_REQUIRED){ ChkSiteAvailability(hWnd, theInternetClass.m_strIISServer, dwTimeOut, NULL, theInternetClass.m_UserName, theInternetClass.m_Password); } else{ ChkSiteAvailability(hWnd, theInternetClass.m_strIISServer, dwTimeOut, (LPTSTR) theInternetClass.GetProxyServer(), theInternetClass.m_UserName, theInternetClass.m_Password); } SetMSID(hInstance); dwRet = PrepareRegWizTxbuffer(hInstance, czB, &dwBufSize); dwOemBufSize = MAX_BUFFER - dwBufSize; dwRet = OemTransmitBuffer(hInstance,czB + dwBufSize,&dwOemBufSize); dwBufSize += dwOemBufSize; switch(dwRet) { case RWZ_NOERROR: theInternetClass.SetBuffer(czB, dwBufSize+1); theInternetClass.SetSSLFlag(TRUE); dwRet = theInternetClass.PostData(hWnd); // dwRet = InvokePost(hWnd, &theInternetClass); #ifdef _LOG_IN_FILE RW_DEBUG << "\n PostData() returned: "<