bool GRecord::VerifyGRecordInFile(Path path, Error &error) { // assumes FileName member is set // Load File into Buffer (assume name is already set) if (!LoadFileToBuffer(path, error)) return false; // load Existing Digest "old" char old_g_record[DIGEST_LENGTH + 1]; if (!ReadGRecordFromFile(path, old_g_record, ARRAY_SIZE(old_g_record), error)) return false; // recalculate digest from buffer FinalizeBuffer(); char new_g_record[DIGEST_LENGTH + 1]; GetDigest(new_g_record); if (strcmp(old_g_record, new_g_record) != 0) { error.Set(grecord_domain, "Invalid G record"); return false; } return true; }
PParams CDataServer::ReloadHRD(const nString& FileName, bool Cache) { char* Buffer; int BytesRead = LoadFileToBuffer(FileName, Buffer); PParams Params; if (!pHRDParser.isvalid()) pHRDParser = n_new(CHRDParser); if (pHRDParser->ParseBuffer(Buffer, BytesRead, Params)) { n_printf("FileIO: HRD \"%s\" successfully loaded from HDD\n", FileName.Get()); if (Cache) HRDCache.Add(FileName.Get(), Params); //!!!???mangle/unmangle path to avoid duplicates? } else n_printf("FileIO: HRD parsing of \"%s\" failed\n", FileName.Get()); n_delete_array(Buffer); return Params; }
bool GRecord::VerifyGRecordInFile(const TCHAR *path) { // assumes FileName member is set // Load File into Buffer (assume name is already set) LoadFileToBuffer(path); // load Existing Digest "old" char old_g_record[DIGEST_LENGTH + 1]; if (!ReadGRecordFromFile(path, old_g_record, ARRAY_SIZE(old_g_record))) return false; // recalculate digest from buffer FinalizeBuffer(); char new_g_record[DIGEST_LENGTH + 1]; GetDigest(new_g_record); return strcmp(old_g_record, new_g_record) == 0; }
bool GRecord::VerifyGRecordInFile() { // assumes FileName member is set // Load File into Buffer (assume name is already set) LoadFileToBuffer(); // load Existing Digest "old" char old_g_record[BUFF_LEN]; if (!ReadGRecordFromFile(old_g_record, BUFF_LEN)) return false; // recalculate digest from buffer FinalizeBuffer(); char new_g_record[BUFF_LEN]; GetDigest(new_g_record); return strcmp(old_g_record, new_g_record) == 0; }
CHAR* WebFetcher::GetHttp(LPCSTR lpServerName) { // start download file char *pBuf = NULL ; int nBufLen = 0 ; TRY { // connection CInternetSession sess ; sess.SetOption (INTERNET_OPTION_CONNECT_TIMEOUT, 30 * 1000) ; sess.SetOption (INTERNET_OPTION_CONNECT_BACKOFF, 1000) ; sess.SetOption (INTERNET_OPTION_CONNECT_RETRIES, 1) ; DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD ; CHttpFile * pF = (CHttpFile*)sess.OpenURL(lpServerName, 1, dwFlag); ASSERT(pF); if (!pF) {AfxThrowInternetException(1);} // connection status CString str ; pF->QueryInfo (HTTP_QUERY_STATUS_CODE, str) ; // Proxy Authentication Required if (str == _T("407")) { CString strUsername, strPassword ; // pPara->pThis->df_Notify (GetMsg_ProxyValidate(), &WM_DLF_PROXY_VALIDATE(&lpServerName, &strUsername, &strPassword)) ; pF->SetOption (INTERNET_OPTION_PROXY_USERNAME, (VOID*)(LPCTSTR)strUsername, strUsername.GetLength()) ; pF->SetOption (INTERNET_OPTION_PROXY_PASSWORD, (VOID*)(LPCTSTR)strPassword, strPassword.GetLength()) ; pF->SendRequest (NULL) ; } pF->QueryInfo (HTTP_QUERY_STATUS_CODE, str) ; if (str != _T("200")) { pF->Close() ; delete pF ; AfxThrowInternetException(1); } // confirm update pF->QueryInfo (HTTP_QUERY_LAST_MODIFIED, str) ; /* if (!pPara->pThis->df_Notify (GetMsg_CheckTime(), &WM_DLF_CHECKTIME(&lpServerName, &str))) { pF->Close() ; delete pF ; AfxThrowInternetException(1); } */ // start download pF->QueryInfo (HTTP_QUERY_CONTENT_LENGTH, str) ; // file's length // pPara->pThis->df_Notify (GetMsg_StartDownload(), &pPara->strFileURL) ; if (_ttoi(str)) { // know file's size int nLen = (nBufLen = _ttoi(str)) ; char * p = (pBuf = new char[nLen+8]) ; ZeroMemory (p, nLen+8) ; // while (IsWindow(pPara->pThis->GetSafeHwnd())) while (true) { // download 8K every int n = pF->Read (p, (nLen < 8192) ? nLen : 8192) ; if (n <= 0) break ; // success exit p += n ; nLen -= n ; //pPara->pThis->df_Notify (GetMsg_Progress(), &WM_DLF_PROGRESS(&pPara->strFileURL, nBufLen-nLen, nBufLen)) ; } // interrupted if (nLen != 0) { delete[] pBuf; pBuf=NULL; nBufLen = 0 ; } } else { // don't know file's size, save context to a temp file. bstr_t strFile = QueryTempFilePath() ; CFile outFile (strFile, CFile::modeCreate|CFile::modeReadWrite) ; int n = (int)pF->GetLength() ; while (n) { char * pa = new char[n] ; n = pF->Read (pa, n) ; outFile.Write (pa, n) ; // pPara->pThis->df_Notify (GetMsg_Progress(), &WM_DLF_PROGRESS(&pPara->strFileURL, (int)outFile.GetLength(), 0)) ; n = (int)pF->GetLength() ; delete[] pa ; } outFile.Close() ; // success if (n == 0) { DWORD dw ; if (::InternetQueryDataAvailable ((HINTERNET)(*pF), &dw, 0, 0) && (dw == 0)) { LoadFileToBuffer (strFile, pBuf, nBufLen) ; } } ::DeleteFile(strFile) ; } pF->Close() ; delete pF ; } CATCH_ALL(e) {} END_CATCH_ALL /* if (pBuf) { //pPara->pThis->df_Notify (GetMsg_DownFinished(), &WM_DLF_FINISHED(&pPara->strFileURL, pBuf, nBufLen)) ; delete[] pBuf ; } else { //pPara->pThis->df_Notify (GetMsg_Error(), &pPara->strFileURL) ; }*/ //AfxMessageBox(pBuf); return pBuf; //} }