//********************************************************************* //* Microsoft Windows ** //* Copyright(c) Microsoft Corp., 1994 ** //********************************************************************* #include "appdefs.h" #include "obcomglb.h" #include "wininet.h" #include "perhist.h" #include "shlobj.h" #include "ispcsv.h" #include "util.h" const VARIANT c_vaEmpty = {0}; const LARGE_INTEGER c_li0 = { 0, 0 }; WCHAR szTempBuffer[TEMP_BUFFER_LENGTH]; #define MAX_MESSAGE_LEN 256 * 4 #define ReadVerifyDW(x) if (!ReadDW(&(x), pcCSVFile)) \ { \ goto ReadOneLineError; \ } #define ReadVerifyW(x) if (!ReadW(&(x), pcCSVFile)) \ { \ goto ReadOneLineError; \ } //Accepts -1 as a valid number. currently this is used for LCID, since all langs has a LDID == -1 #define ReadVerifyWEx(x) if (!ReadWEx(&(x), pcCSVFile)) \ { \ goto ReadOneLineError; \ } #define ReadVerifyB(x) if (!ReadB(&(x), pcCSVFile)) \ { \ goto ReadOneLineError; \ } #define ReadVerifyBOOL(x) if (!ReadBOOL(&(x), pcCSVFile)) \ { \ goto ReadOneLineError; \ } #define ReadVerifySPECIAL(x, y, z) if (!ReadSPECIAL(&(x), &(y), &(z), pcCSVFile)) \ { \ goto ReadOneLineError; \ } #define ReadVerifySZ(x, y) if (!ReadSZ(&x[0],y+sizeof(L'\0'),pcCSVFile)) \ { \ goto ReadOneLineError; \ } CISPCSV::~CISPCSV(void) { if (hbmTierIcon) DeleteObject(hbmTierIcon); } // Do an strip of Single Quotes from a source string. The source is formatted as: // 'some text', and the dest string ends up being // some text void CISPCSV::StripQuotes ( LPWSTR lpszDst, LPWSTR lpszSrc ) { lstrcpyn(lpszDst, lpszSrc + 1, lstrlen(lpszSrc) - 1); } BOOL CISPCSV::ValidateFile(WCHAR* pszFile) { WCHAR szDownloadDir[MAX_PATH]; if (!lstrlen(pszFile)) return FALSE; if (!GetOOBEPath((LPWSTR)szDownloadDir)) return FALSE; lstrcat(szDownloadDir, L"\\"); lstrcat(szDownloadDir, pszFile); if (GetFileAttributes(szDownloadDir) == 0xFFFFFFFF) return FALSE; return TRUE; } // ############################################################################ BOOL CISPCSV::ReadDW(DWORD far *pdw, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer, TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2Dw(szTempBuffer, pdw)); } // ############################################################################ BOOL CISPCSV::ReadW(WORD far *pw, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer, TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2W(szTempBuffer, pw)); } // ############################################################################ //Accepts -1 as a valid number. currently this is used for LCID, since all langs has a LDID == -1 BOOL CISPCSV::ReadWEx(WORD far *pw, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer, TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2WEx(szTempBuffer, pw)); } // ############################################################################ BOOL CISPCSV::ReadB(BYTE far *pb, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer, TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2B(szTempBuffer, pb)); } // ############################################################################ BOOL CISPCSV::ReadBOOL(BOOL far *pbool, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer, TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2BOOL(szTempBuffer, pbool)); } // ############################################################################ // A special int can be either a BOOL (TRUE, FALSE) or a int, 0 or -1 // if the value is 0 or -1, then the pbIsSpecial bool is set to TRUE BOOL CISPCSV::ReadSPECIAL(BOOL far *pbool, BOOL far *pbIsSpecial, int far *pInt, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer, TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2SPECIAL(szTempBuffer, pbool, pbIsSpecial, pInt)); } // ############################################################################ BOOL CISPCSV::ReadSZ(LPWSTR psz, DWORD cch, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(psz, cch)) return FALSE; return TRUE; } // ############################################################################ BOOL CISPCSV::ReadToEOL(CCSVFile far *pcCSVFile) { return pcCSVFile->SkipTillEOL(); } HRESULT CISPCSV::ReadOneLine ( CCSVFile far *pcCSVFile ) { HRESULT hr = ERROR_SUCCESS; WCHAR szTemp[MAX_ISP_NAME]; if (!ReadSZ(szTemp, MAX_CHARS_IN_BUFFER(szTemp), pcCSVFile)) { hr = ERROR_NO_MORE_ITEMS; // no more enteries goto ReadOneLineExit; } // Strip the single quotes from the isp Name StripQuotes(szISPName, szTemp); ReadVerifyW(wOfferID); ReadVerifySZ(szISPLogoPath, MAX_CHARS_IN_BUFFER(szISPLogoPath)); ReadVerifySZ(szISPMarketingHTMPath, MAX_CHARS_IN_BUFFER(szISPMarketingHTMPath)); ReadVerifySZ(szISPTierLogoPath, MAX_CHARS_IN_BUFFER(szISPTierLogoPath)); ReadVerifySZ(szISPTeaserPath, MAX_CHARS_IN_BUFFER(szISPTeaserPath)); ReadVerifySZ(szISPFilePath, MAX_CHARS_IN_BUFFER(szISPFilePath)); ReadVerifyDW(dwCfgFlag); ReadVerifyDW(dwRequiredUserInputFlags); ReadVerifySZ(szBillingFormPath, MAX_CHARS_IN_BUFFER(szBillingFormPath)); ReadVerifySZ(szPayCSVPath, MAX_CHARS_IN_BUFFER(szPayCSVPath)); ReadVerifySZ(szOfferGUID, MAX_CHARS_IN_BUFFER(szOfferGUID)); ReadVerifySZ(szMir, MAX_CHARS_IN_BUFFER(szMir)); ReadVerifyWEx(wLCID); //Accepts -1 as a valid number. currently this is used for LCID, since all langs has a LDID == -1 ReadToEOL(pcCSVFile); bCNS = (ICW_CFGFLAG_CNS & dwCfgFlag) ? TRUE : FALSE; bSecureConnection = (ICW_CFGFLAG_SECURE & dwCfgFlag) ? TRUE : FALSE; //If this is nooffer we won't try to validate if (!(dwCfgFlag & ICW_CFGFLAG_OFFERS)) { if (!ValidateFile(szISPMarketingHTMPath)) hr = ERROR_FILE_NOT_FOUND; return hr; } if (!(dwCfgFlag & ICW_CFGFLAG_AUTOCONFIG)) { if (!ValidateFile(szISPMarketingHTMPath)) return ERROR_FILE_NOT_FOUND; } if (dwCfgFlag & ICW_CFGFLAG_OEM_SPECIAL) { if (!ValidateFile(szISPTierLogoPath) || !ValidateFile(szISPTeaserPath)) dwCfgFlag &= ~ICW_CFGFLAG_OEM_SPECIAL ; } //Try and validate the integrity of various offers //based on type. //OLS, CNS, NO-CNS if (!ValidateFile(szISPLogoPath)) return ERROR_FILE_NOT_FOUND; if (!ValidateFile(szISPFilePath)) return ERROR_FILE_NOT_FOUND; // Validate the billing path only when billing option is set if (dwCfgFlag & ICW_CFGFLAG_BILL) { if(!ValidateFile(szBillingFormPath)) return ERROR_FILE_NOT_FOUND; } // Validate the payment path only when payment option is set if (dwCfgFlag & ICW_CFGFLAG_PAYMENT) { if(!ValidateFile(szPayCSVPath)) return ERROR_FILE_NOT_FOUND; } ReadOneLineExit: return hr; ReadOneLineError: hr = ERROR_INVALID_DATA; goto ReadOneLineExit; } HRESULT CISPCSV::ReadFirstLine ( CCSVFile far *pcCSVFile ) { WCHAR szTemp[TEMP_BUFFER_LENGTH]; for (int i = 0; i < NUM_ISPCSV_FIELDS; i++) { if (!ReadSZ(szTemp, MAX_CHARS_IN_BUFFER(szTemp), pcCSVFile)) { return(ERROR_INVALID_DATA); } } ReadToEOL(pcCSVFile); return (ERROR_SUCCESS); } void CISPCSV::MakeCompleteURL(LPWSTR lpszURL, LPWSTR lpszSRC) { WCHAR szCurrentDir[MAX_PATH]; // Form the URL if(GetOOBEPath((LPWSTR)szCurrentDir)) { wsprintf (lpszURL, L"FILE://%s\\%s", szCurrentDir, lpszSRC); } }