int CPostData::TransferDataPost() { CUrlCrack url; if (!url.Crack(m_strUrl.c_str())) return ERR_URLCRACKERROR; m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) return ERR_NETWORKERROR; DWORD dwTimeOut = 60000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { CloseHandles(); return ERR_NETWORKERROR; } LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION, (DWORD)this); if (m_hInetFile == NULL) { CloseHandles(); return ERR_NETWORKERROR; } HttpAddRequestHeaders(m_hInetFile, _T("Content-Type: application/x-www-form-urlencoded\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); HttpAddRequestHeaders(m_hInetFile, _T("User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); TCHAR szHeaders[1024]; _stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, m_lpPostData, m_dwPostDataLength); if (!bSend) { CloseHandles(); return ERR_NETWORKERROR; } CloseHandles(); return ERR_SUCCESS; }
int CPostData::TBigDataPost() { //CString sTraceBuffer; CUrlCrack url; if (!url.Crack(m_strUrl.c_str())) return ERR_URLCRACKERROR; m_hInetSession = ::InternetOpen(MS_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) return ERR_NETWORKERROR; DWORD dwTimeOut = 360000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { CloseHandles(); return ERR_NETWORKERROR; } LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; DWORD dwFlags = 0; if( url.GetPort() == 443 ) { dwFlags = INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID; } else if( url.GetPort() == 80 ) { //for HTTP dwFlags = INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE ; } m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, dwFlags, (DWORD)this); if (m_hInetFile == NULL) { CloseHandles(); return ERR_NETWORKERROR; } return ERR_SUCCESS; }
UINT DownloadFile(LPCWSTR asSource, LPCWSTR asTarget, DWORD& crc, DWORD& size, BOOL abShowAllErrors = FALSE) { UINT iRc = E_UNEXPECTED; UINT nWait; wchar_t* pszCommand = NULL; wchar_t* szCmdDirectory = NULL; // Destination directory for file creation MCHKHEAP; // Split target into directory and file-name LPCWSTR pszName = PointToName(asTarget); if (pszName > asTarget) { szCmdDirectory = lstrdup(asTarget); if (!szCmdDirectory) { iRc = E_OUTOFMEMORY; goto wrap; } szCmdDirectory[pszName-asTarget] = 0; } // Prepare command line for downloader tool pszCommand = CreateCommand(asSource, pszName, iRc); if (!pszCommand) { _ASSERTE(iRc!=0); goto wrap; } _ASSERTE(m_PI.hProcess==NULL); MCHKHEAP; nWait = ExecuteDownloader(pszCommand, szCmdDirectory); // Now check the result of downloader proc if (nWait != 0) { iRc = nWait; goto wrap; } if (!CalcFileHash(asTarget, size, crc)) { iRc = GetLastError(); if (!iRc) iRc = E_UNEXPECTED; goto wrap; } iRc = 0; // OK wrap: MCHKHEAP; SafeFree(pszCommand); SafeFree(szCmdDirectory); CloseHandles(); return iRc; };
/// --------------------------------------------------------------------------- /// Destructor. /// --------------------------------------------------------------------------- prConsoleWindow::~prConsoleWindow() { if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)HandlerRoutine, false) == 0) { prDebugShowLastError(PRFILE_LINE); } CloseHandles(); FreeConsole(); }
/* ============== ~CServerCtrlDlg ============== */ CServerCtrlDlg::~CServerCtrlDlg( void ) { // Quitting the front end can kill HLDS, if you want it to, since we created that process if ( PI.hProcess ) { // Kill process TerminateProcess( PI.hProcess, 0 ); memset( &PI, 0, sizeof( PI ) ); } // Close remaining handles. CloseHandles(); }
void CloseInternet(bool bFull) { DWORD nWait = WAIT_OBJECT_0; if (m_PI.hProcess) { nWait = WaitForSingleObject(m_PI.hProcess, 0); if (nWait != WAIT_OBJECT_0) { TerminateProcess(m_PI.hProcess, CERR_DOWNLOAD_FAILED); } } CloseHandles(); };
bool HttpSnaffle::Open(const std::string& userAgent, const std::string& serverName, int port) { CloseHandles(); myServerName = serverName; myUserAgent = userAgent; myInet = InternetOpenA(userAgent.c_str(), INTERNET_OPEN_TYPE_PRECONFIG, "", "", 0); if (myInet == NULL) return false; myServerConnection = InternetConnectA(myInet, serverName.c_str(), port, "", "", INTERNET_SERVICE_HTTP, 0, myContext); if (myServerConnection == NULL) return false; return true; }
int CDownloadThread::TransferDataGet() { CUrlCrack url; if (!url.Crack(m_strDownURl.c_str())) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_URLCRACKERROR, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的url = %s Crack 异常!", m_strDownURl.c_str())); return ERR_URLCRACKERROR; } NEED_STOP; m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) { NEED_STOP; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPEN, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的InetOpen异常!LastErrCode = %d", GetLastError())); return ERR_INTOPEN; } NEED_STOP; DWORD dwTimeOut = 60000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { NEED_STOP; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTCONNECT, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的连接异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTCONNECT; } NEED_STOP; LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; DWORD dwFlags = 0; if(INTERNET_DEFAULT_HTTPS_PORT == url.GetPort()) { dwFlags = INTERNET_FLAG_SECURE; } else if(INTERNET_DEFAULT_HTTP_PORT == url.GetPort()) { dwFlags = INTERNET_FLAG_RELOAD /*| INTERNET_FLAG_DONT_CACHE*/ | INTERNET_FLAG_KEEP_CONNECTION; } m_hInetFile = HttpOpenRequest(m_hInetConnection, NULL, url.GetPath(), NULL, NULL, ppszAcceptTypes, dwFlags, (DWORD)this); if (m_hInetFile == NULL) { NEED_STOP; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPENREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的连接异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTOPENREQ; } if(INTERNET_DEFAULT_HTTPS_PORT == url.GetPort()) { DWORD dwOptionFlags; DWORD dwBuffLen = sizeof(dwOptionFlags); InternetQueryOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwOptionFlags, &dwBuffLen); dwOptionFlags |= (SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID); InternetSetOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, &dwOptionFlags, sizeof (dwOptionFlags) ); } NEED_STOP; // m_wcsOriginalFileName = m_strSaveFile; TranslanteToBreakDownloadName(m_strSaveFile, m_wcsBreakFileName); //GetBreakDownloadName(); TCHAR szHeaders[100]; _stprintf_s(szHeaders, _countof(szHeaders), _T("Moneyhubuid: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); HttpAddRequestHeaders(m_hInetFile, _T("User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); if(m_bBreakDownload) { _stprintf_s(szHeaders,_countof(szHeaders),_T("Range: bytes=%d-"), IsBreakPointFile(m_wcsBreakFileName.c_str()) ); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD_IF_NEW ) ; } BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, NULL, 0); if (!bSend) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTSENDREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的发送请求异常!LastErrCode = %d", GetLastError())); int Error = GetLastError(); CloseHandles(); if(Error == ERROR_INTERNET_TIMEOUT && m_bBreakDownload) return ERROR_INTERNET_TIMEOUT; return ERR_INTSENDREQ; } NEED_STOP; TCHAR szStatusCode[32]; DWORD dwInfoSize = sizeof(szStatusCode); if (!HttpQueryInfo(m_hInetFile, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTQUREYINFO, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTQUREYINFO; } else { long nStatusCode = _ttol(szStatusCode); if (nStatusCode != HTTP_STATUS_PARTIAL_CONTENT && nStatusCode != HTTP_STATUS_OK) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTFILENOTFOUND, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的!= HTTP_STATUS_OK异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTFILENOTFOUND; } } TCHAR szContentLength[32]; dwInfoSize = sizeof(szContentLength); if (::HttpQueryInfo(m_hInetFile, HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize, NULL)) { if(m_bBreakDownload) m_ui64FileSize = (UINT64)_ttoi64(szContentLength) + IsBreakPointFile(m_wcsBreakFileName.c_str()); else m_ui64FileSize = (UINT64)_ttoi64(szContentLength); m_ui64TotalRead = 0; } else { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTFILENOTFOUND, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTFILENOTFOUND; } NEED_STOP; if(m_bBreakDownload) return DownLoadBreakpointFile(); else return DownloadNoBreakFile(); }
BOOL CPostData::UseHttpSendReqEx( std::string& lpost) { long lgg; lgg = lpost.size(); USES_CONVERSION; INTERNET_BUFFERS BufferIn; DWORD dwBytesWritten; BOOL bRet; TCHAR head[1024]; std::wstring strt = MS_CONTENTTYPE; std::wstring strt1 = CA2W(CSNManager::GetInstance()->GetSN().c_str()); _stprintf_s(head, _countof(head), _T("%s\r\nSN: %s;\r\nMoneyhubUID: %s;\r\n"), strt.c_str() ,strt1.c_str() ,m_strHWID.c_str()); //TCHAR head[]= strt.c_str(); BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Must be set or error will occur BufferIn.Next = NULL; BufferIn.lpcszHeader = head; BufferIn.dwHeadersLength = 0; BufferIn.dwHeadersTotal = sizeof(head); BufferIn.lpvBuffer = (LPSTR)lpost.c_str(); BufferIn.dwBufferLength = 0; BufferIn.dwBufferTotal = lgg; // This is the only member used other than dwStructSize BufferIn.dwOffsetLow = 0; BufferIn.dwOffsetHigh = 0; if(!HttpSendRequestEx( m_hInetFile, &BufferIn, NULL, 0, 2)) { CloseHandles(); printf( "Error on HttpSendRequestEx %d\n",GetLastError() ); return FALSE; } bRet=TRUE; bRet = InternetWriteFile( m_hInetFile, (LPSTR)lpost.c_str(), lgg, &dwBytesWritten); if(!bRet) { CloseHandles(); printf( "\nError on InternetWriteFile %lu\n",GetLastError() ); return FALSE; } bRet = HttpEndRequest(m_hInetFile, NULL, 0, 0); if(!bRet) { CloseHandles(); printf( "Error on HttpEndRequest %lu \n", GetLastError()); return FALSE; } char pcBuffer[BUFFSIZE]; DWORD dwBytesRead; LPSTR lpszData1; lpszData1 = new char[1024*1024]; lpszData1[0]='\0'; //printf("\nThe following was returned by the server:\n"); do { dwBytesRead=0; if(InternetReadFile(m_hInetFile, pcBuffer, BUFFSIZE-1, &dwBytesRead)) { pcBuffer[dwBytesRead]=0x00; // Null-terminate buffer strcat(lpszData1,pcBuffer); //printf("%s", pcBuffer); } else return FALSE; //lpszData1 =""; //printf("\nInternetReadFile failed"); }while(dwBytesRead>0); //printf("\n"); lpost = ""; lpost = CW2A(UTF8ToUnicode(lpszData1).c_str()); delete []lpszData1; CloseHandles(); //return ERR_SUCCESS; return TRUE; }
int CPostData::TBigDataPost() { //CString sTraceBuffer; CUrlCrack url; if (!url.Crack(m_strUrl.c_str())) return ERR_URLCRACKERROR; m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) return ERR_NETWORKERROR; DWORD dwTimeOut = 10000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, L"HttpSendRequestEx"); CloseHandles(); return ERR_NETWORKERROR; } LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; DWORD dwFlags = 0; if( url.GetPort() == 443 ) { dwFlags = INTERNET_FLAG_SECURE; //dwFlags = INTERNET_FLAG_NO_CACHE_WRITE | // INTERNET_FLAG_KEEP_CONNECTION | // INTERNET_FLAG_PRAGMA_NOCACHE | // INTERNET_FLAG_SECURE | // INTERNET_FLAG_IGNORE_CERT_CN_INVALID | // INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | // SECURITY_FLAG_IGNORE_UNKNOWN_CA | // INTERNET_OPTION_SECURITY_FLAGS; } else if( url.GetPort() == 80 ) { //for HTTP //dwFlags = INTERNET_FLAG_NO_CACHE_WRITE | // INTERNET_FLAG_KEEP_CONNECTION | // INTERNET_FLAG_PRAGMA_NOCACHE ; dwFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_DONT_CACHE ; } //m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, dwFlags, (DWORD)this); m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, dwFlags, (DWORD)this); if (m_hInetFile == NULL) { CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, L"HttpSendRequestEx m_hInetFile"); CloseHandles(); return ERR_NETWORKERROR; } //if( url.GetPort() == 443 ) { DWORD dwBuffLen = sizeof(dwFlags); InternetQueryOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen); dwFlags |= (SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID); InternetSetOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags) ); } HttpAddRequestHeaders(m_hInetFile, _T("Content-Type: application/x-www-form-urlencoded\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); HttpAddRequestHeaders(m_hInetFile, _T("User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); HttpAddRequestHeaders(m_hInetFile, _T("Accept-Language: zh-CN"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); return ERR_SUCCESS; }
BOOL CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { wchar_t resultStr[255]; int iCbSelectionType, iCbSelectionSize; DWORD dr0Result = 0, dr1Result = 0, dr2Result = 0, dr3Result = 0, globalResult = 0; //WORD b = 0; switch(uMsg) { case WM_INITDIALOG: SetClassLongPtr(hDlg, GCLP_HICON, (long)LoadIcon(0, IDI_APPLICATION)); // Get handles for controls in main windows GetControlHandles(hDlg); // Populates combo boxes PopulateCombos(hDlg); // disable all the combo boxes DisableComboBox(hTypeDr0); DisableComboBox(hTypeDr1); DisableComboBox(hTypeDr2); DisableComboBox(hTypeDr3); DisableComboBox(hSizeDr0); DisableComboBox(hSizeDr1); DisableComboBox(hSizeDr2); DisableComboBox(hSizeDr3); return 1; case WM_COMMAND: if (HIWORD(wParam) == CBN_SELCHANGE) { if (LOWORD(wParam) == TYPE_DR0) { iCbSelectionType = SendMessage(hTypeDr0, CB_GETCURSEL, 0, 0); if (iCbSelectionType != ONEXEC) EnableComboBox(hSizeDr0); else { SendMessage(hSizeDr0, CB_SETCURSEL, 0, 0); DisableComboBox(hSizeDr0); } } //----------------------------------------------------------- if (LOWORD(wParam) == TYPE_DR1) { iCbSelectionType = SendMessage(hTypeDr1, CB_GETCURSEL, 0, 0); if (iCbSelectionType != ONEXEC) EnableComboBox(hSizeDr1); else { SendMessage(hSizeDr1, CB_SETCURSEL, 0, 0); DisableComboBox(hSizeDr1); } } //----------------------------------------------------------- if (LOWORD(wParam) == TYPE_DR2) { iCbSelectionType = SendMessage(hTypeDr2, CB_GETCURSEL, 0, 0); if (iCbSelectionType != ONEXEC) EnableComboBox(hSizeDr2); else { SendMessage(hSizeDr2, CB_SETCURSEL, 0, 0); DisableComboBox(hSizeDr2); } } //----------------------------------------------------------- if (LOWORD(wParam) == TYPE_DR3) { iCbSelectionType = SendMessage(hTypeDr3, CB_GETCURSEL, 0, 0); if (iCbSelectionType != ONEXEC) EnableComboBox(hSizeDr3); else { SendMessage(hSizeDr3, CB_SETCURSEL, 0, 0); DisableComboBox(hSizeDr3); } } //----------------------------------------------------------- } switch(wParam) { case EXIT: CloseHandles(); EndDialog(hDlg, 0); break; case IDCANCEL: CloseHandles(); EndDialog(hDlg, 0); break; case HELP: ShowHelp(hDlg); break; case CHECK_DR0: if(IsDlgButtonChecked(hDlg, CHECK_DR0) == BST_CHECKED) { SendMessage(hTypeDr0, CB_SETCURSEL, 0, 0); SendMessage(hSizeDr0, CB_SETCURSEL, 0, 0); EnableComboBox(hTypeDr0); DisableComboBox(hSizeDr0); } else { DisableComboBox(hSizeDr0); DisableComboBox(hTypeDr0); } break; case CHECK_DR1: if(IsDlgButtonChecked(hDlg, CHECK_DR1) == BST_CHECKED) { SendMessage(hTypeDr1, CB_SETCURSEL, 0, 0); SendMessage(hSizeDr1, CB_SETCURSEL, 0, 0); EnableComboBox(hTypeDr1); DisableComboBox(hSizeDr1); } else { DisableComboBox(hTypeDr1); DisableComboBox(hSizeDr1); } break; case CHECK_DR2: if(IsDlgButtonChecked(hDlg, CHECK_DR2) == BST_CHECKED) { SendMessage(hTypeDr2, CB_SETCURSEL, 0, 0); SendMessage(hSizeDr2, CB_SETCURSEL, 0, 0); EnableComboBox(hTypeDr2); DisableComboBox(hSizeDr2); } else { DisableComboBox(hTypeDr2); DisableComboBox(hSizeDr2); } break; case CHECK_DR3: if(IsDlgButtonChecked(hDlg, CHECK_DR3) == BST_CHECKED) { SendMessage(hTypeDr3, CB_SETCURSEL, 0, 0); SendMessage(hSizeDr3, CB_SETCURSEL, 0, 0); EnableComboBox(hTypeDr3); DisableComboBox(hSizeDr3); } else { DisableComboBox(hTypeDr3); DisableComboBox(hSizeDr3); } break; case CALCULATE: // first, we need to check if there is at least one checkbox selected if((IsDlgButtonChecked(hDlg, CHECK_DR0) == BST_UNCHECKED) && (IsDlgButtonChecked(hDlg, CHECK_DR1) == BST_UNCHECKED) && (IsDlgButtonChecked(hDlg, CHECK_DR2) == BST_UNCHECKED) && (IsDlgButtonChecked(hDlg, CHECK_DR3) == BST_UNCHECKED)) { MessageBox(hDlg, "No selection was made!!!\nYou MUST select at least one register", "No selection :(", MB_ICONERROR); } else { // we must know which checboxes were selected, can be one or more than one // also, we MUST ensure that a selection was made in both combos if(IsDlgButtonChecked(hDlg, CHECK_DR0) == BST_CHECKED) { // we know the user selected DR0 so, we add the corresponding values dr0Result += LOCAL_EXACT_BPM_ENABLED + DR0_LOCAL_EXACT_BPM_ENABLED; // get the DR0_TYPE and DR0_SIZE values iCbSelectionType = SendMessage(hTypeDr0, CB_GETCURSEL, 0, 0); iCbSelectionSize = SendMessage(hSizeDr0, CB_GETCURSEL, 0, 0); // if the user select ONEXEC, then, the unique size for it is 1 // this is a special case so we evaluate it separate if(iCbSelectionType == ONEXEC) { dr0Result += DR0_EXECUTION + DR0_LEN1; } else { // we make sure the user selected Type and Size for the corresponding DR register if((iCbSelectionType != CB_ERR) && (iCbSelectionSize != CB_ERR)) { // switch for the DR type switch(iCbSelectionType) { case ONREAD: dr0Result += DR0_RW; break; case ONWRITE: dr0Result += DR0_W; break; default: break; } // switch for the DR size switch(iCbSelectionSize) { case SIZE1: dr0Result += DR0_LEN1; break; case SIZE2: dr0Result += DR0_LEN2; break; case SIZE4: dr0Result += DR0_LEN4; break; default: break; } } } } // --------------------------------------------------------------- if(IsDlgButtonChecked(hDlg, CHECK_DR1) == BST_CHECKED) { dr1Result += LOCAL_EXACT_BPM_ENABLED + DR1_LOCAL_EXACT_BPM_ENABLED; iCbSelectionType = SendMessage(hTypeDr1, CB_GETCURSEL, 0, 0); iCbSelectionSize = SendMessage(hSizeDr1, CB_GETCURSEL, 0, 0); if(iCbSelectionType == ONEXEC) { dr1Result += DR1_EXECUTION + DR1_LEN1; } else { // we make sure the user selected Type and Size for the corresponding DR register if((iCbSelectionType != CB_ERR) && (iCbSelectionSize != CB_ERR)) { // switch for the DR type switch(iCbSelectionType) { case ONREAD: dr1Result += DR1_RW; break; case ONWRITE: dr1Result += DR1_W; break; default: break; } // switch for the DR size switch(iCbSelectionSize) { case SIZE1: dr1Result += DR1_LEN1; break; case SIZE2: dr1Result += DR1_LEN2; break; case SIZE4: dr1Result += DR1_LEN4; break; default: break; } } } } // --------------------------------------------------------------- if(IsDlgButtonChecked(hDlg, CHECK_DR2) == BST_CHECKED) { dr2Result += LOCAL_EXACT_BPM_ENABLED + DR2_LOCAL_EXACT_BPM_ENABLED; iCbSelectionType = SendMessage(hTypeDr2, CB_GETCURSEL, 0, 0); iCbSelectionSize = SendMessage(hSizeDr2, CB_GETCURSEL, 0, 0); if(iCbSelectionType == ONEXEC) { dr2Result += DR2_EXECUTION + DR2_LEN1; } else { // we make sure the user selected Type and Size for the corresponding DR register if((iCbSelectionType != CB_ERR) && (iCbSelectionSize != CB_ERR)) { // switch for the DR type switch(iCbSelectionType) { case ONREAD: dr2Result += DR2_RW; break; case ONWRITE: dr2Result += DR2_W; break; default: break; } // switch for the DR size switch(iCbSelectionSize) { case SIZE1: dr2Result += DR2_LEN1; break; case SIZE2: dr2Result += DR2_LEN2; break; case SIZE4: dr2Result += DR2_LEN4; break; default: break; } } } } // --------------------------------------------------------------- if(IsDlgButtonChecked(hDlg, CHECK_DR3) == BST_CHECKED) { dr3Result += LOCAL_EXACT_BPM_ENABLED + DR3_LOCAL_EXACT_BPM_ENABLED; iCbSelectionType = SendMessage(hTypeDr3, CB_GETCURSEL, 0, 0); iCbSelectionSize = SendMessage(hSizeDr3, CB_GETCURSEL, 0, 0); if(iCbSelectionType == ONEXEC) { dr3Result += DR3_EXECUTION + DR3_LEN1; } else { // we make sure the user selected Type and Size for the corresponding DR register if((iCbSelectionType != CB_ERR) && (iCbSelectionSize != CB_ERR)) { // switch for the DR type switch(iCbSelectionType) { case ONREAD: dr3Result += DR3_RW; break; case ONWRITE: dr3Result += DR3_W; break; default: break; } // switch for the DR size switch(iCbSelectionSize) { case SIZE1: dr3Result += DR3_LEN1; break; case SIZE2: dr3Result += DR3_LEN2; break; case SIZE4: dr3Result += DR3_LEN4; break; default: break; } } } } // --------------------------------------------------------------- // final result globalResult = dr0Result + dr1Result + dr2Result + dr3Result; wsprintf((LPSTR)resultStr, "0x%X", globalResult); SetDlgItemText(hDlg, EDIT_CALCULATE, (LPCSTR)resultStr); // we make sure the variables are zeroed globalResult = 0; dr0Result = 0; dr1Result = 0; dr2Result = 0; dr3Result = 0; } break; } } return 0; }
int CHttpDownloader::TransferDataGet() { CUrlCrack url; if (!url.Crack(m_strUrl.c_str())) return ERR_URLCRACKERROR; NEED_STOP; //LPCTSTR lpszUserAgent = _T("Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)"); //m_hInetSession = ::InternetOpen(lpszUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) return ERR_NETWORKERROR; NEED_STOP; DWORD dwTimeOut = 60000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { //服务器连接错误,反馈 CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_NAME, MY_ERROR_ID_SERVICE, MY_ERROR_DESCRIPT_SERVICE); CloseHandles(); return ERR_NETWORKERROR; } NEED_STOP; LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; m_hInetFile = HttpOpenRequest(m_hInetConnection, NULL, url.GetPath(), NULL, NULL, ppszAcceptTypes, INTERNET_FLAG_RELOAD /*| INTERNET_FLAG_DONT_CACHE*/ | INTERNET_FLAG_KEEP_CONNECTION, (DWORD)this); if (m_hInetFile == NULL) { CloseHandles(); return ERR_NETWORKERROR; } NEED_STOP; getBreakDownloadName(); TCHAR szHeaders[100]; //_stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %08X%08X%08X%08X\r\n"), m_hwid.dw1, m_hwid.dw2, m_hwid.dw3, m_hwid.dw4); _stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); _stprintf_s(szHeaders,_countof(szHeaders),_T("Range: bytes=%d-"), isBreakPointFile(m_strSaveFile.c_str()) ); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD_IF_NEW ) ; BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, NULL, 0); if (!bSend) { CloseHandles(); return ERR_NETWORKERROR; } NEED_STOP; TCHAR szStatusCode[32]; DWORD dwInfoSize = sizeof(szStatusCode); if (!HttpQueryInfo(m_hInetFile, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL)) { CloseHandles(); return ERR_FILENOTFOUND; } else { long nStatusCode = _ttol(szStatusCode); if (nStatusCode != HTTP_STATUS_PARTIAL_CONTENT && nStatusCode != HTTP_STATUS_OK) { CloseHandles(); return ERR_FILENOTFOUND; } } TCHAR szContentLength[32]; dwInfoSize = sizeof(szContentLength); if (::HttpQueryInfo(m_hInetFile, HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize, NULL)) { m_ui64FileSize = (UINT64)_ttoi64(szContentLength) + isBreakPointFile(m_strSaveFile.c_str()); if (m_pUpdateMgr) m_pUpdateMgr->SetProgressVal(m_ui64FileSize, 0); } else { CloseHandles(); return ERR_FILENOTFOUND; } NEED_STOP; return this->downLoadBreakpointFile(); }
int CDownloadThread::TransferDataGet() { CUrlCrack url; if (!url.Crack(m_strDownURl.c_str())) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_URLCRACKERROR, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的url = %s Crack 异常!", m_strDownURl.c_str())); return ERR_URLCRACKERROR; } NEED_STOP; m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) { NEED_STOP; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPEN, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的InetOpen异常!LastErrCode = %d", GetLastError())); return ERR_INTOPEN; } NEED_STOP; DWORD dwTimeOut = 60000; if (!InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_SETOPTION, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); } if (!InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_SETOPTION, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的INTERNET_OPTION_CONTROL_SEND_TIMEOUT异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); } if (!InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_SETOPTION, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的INTERNET_OPTION_SEND_TIMEOUT异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); } if (!InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_SETOPTION, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的INTERNET_OPTION_RECEIVE_TIMEOUT异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); } if (!InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_SETOPTION, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的INTERNET_OPTION_CONNECT_TIMEOUT异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); } m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { NEED_STOP; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTCONNECT, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的连接异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTCONNECT; } NEED_STOP; LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; m_hInetFile = HttpOpenRequest(m_hInetConnection, NULL, url.GetPath(), NULL, NULL, ppszAcceptTypes, INTERNET_FLAG_RELOAD /*| INTERNET_FLAG_DONT_CACHE*/ | INTERNET_FLAG_KEEP_CONNECTION, (DWORD)this); if (m_hInetFile == NULL) { NEED_STOP; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPENREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的连接异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTOPENREQ; } NEED_STOP; // m_wcsOriginalFileName = m_strSaveFile; TranslanteToBreakDownloadName(m_strSaveFile, m_wcsBreakFileName); //GetBreakDownloadName(); TCHAR szHeaders[100]; _stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); _stprintf_s(szHeaders,_countof(szHeaders),_T("Range: bytes=%d-"), IsBreakPointFile(m_wcsBreakFileName.c_str()) ); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD_IF_NEW ) ; BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, NULL, 0); if (!bSend) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTSENDREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的发送请求异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTSENDREQ; } NEED_STOP; TCHAR szStatusCode[32]; DWORD dwInfoSize = sizeof(szStatusCode); if (!HttpQueryInfo(m_hInetFile, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTQUREYINFO, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTQUREYINFO; } else { long nStatusCode = _ttol(szStatusCode); if (nStatusCode != HTTP_STATUS_PARTIAL_CONTENT && nStatusCode != HTTP_STATUS_OK) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTFILENOTFOUND, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的!= HTTP_STATUS_OK异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTFILENOTFOUND; } } TCHAR szContentLength[32]; dwInfoSize = sizeof(szContentLength); if (::HttpQueryInfo(m_hInetFile, HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize, NULL)) { m_ui64FileSize = (UINT64)_ttoi64(szContentLength) + IsBreakPointFile(m_wcsBreakFileName.c_str()); m_ui64TotalRead = 0; } else { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTFILENOTFOUND, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataGet的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); // OutputDebugString(strErr); CloseHandles(); return ERR_INTFILENOTFOUND; } NEED_STOP; return DownLoadBreakpointFile(); }
int CHttpDownloader::TransferDataPost() { CUrlCrack url; if (!url.Crack(m_strUrl.c_str())) return ERR_URLCRACKERROR; NEED_STOP; //LPCTSTR lpszUserAgent = _T("Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)"); //m_hInetSession = ::InternetOpen(lpszUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) return ERR_NETWORKERROR; NEED_STOP; DWORD dwTimeOut = 60000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { //服务器连接错误,反馈 CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_NAME, MY_ERROR_ID_SERVICE, MY_ERROR_DESCRIPT_SERVICE); CloseHandles(); return ERR_NETWORKERROR; } NEED_STOP; LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION, (DWORD)this); if (m_hInetFile == NULL) { CloseHandles(); return ERR_NETWORKERROR; } NEED_STOP; HttpAddRequestHeaders(m_hInetFile, _T("Content-Type: application/x-www-form-urlencoded\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); TCHAR szHeaders[1024]; //_stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %08X%08X%08X%08X\r\n"), m_hwid.dw1, m_hwid.dw2, m_hwid.dw3, m_hwid.dw4); _stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, m_lpPostData, m_dwPostDataLength); if (!bSend) { CloseHandles(); return ERR_NETWORKERROR; } NEED_STOP; TCHAR szStatusCode[32]; DWORD dwInfoSize = sizeof(szStatusCode); if (!HttpQueryInfo(m_hInetFile, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL)) { CloseHandles(); return ERR_FILENOTFOUND; } else { long nStatusCode = _ttol(szStatusCode); if (nStatusCode != HTTP_STATUS_OK) { CloseHandles(); return ERR_FILENOTFOUND; } } NEED_STOP; m_hSaveFile = CreateFile(m_strSaveFile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (m_hSaveFile == INVALID_HANDLE_VALUE) { //xml文件创建失败 CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_NAME, MY_ERROR_ID_FILE, MY_ERROR_DESCRIPT_FILE); CloseHandles(); return ERR_DISKERROR; } NEED_STOP; LPBYTE lpszData = NULL; DWORD dwSize = 0; while (true) { NEED_STOP; if (!InternetQueryDataAvailable(m_hInetFile, &dwSize, 0, 0)) break; lpszData = new BYTE[dwSize]; DWORD dwDownloaded = 0; if (!InternetReadFile(m_hInetFile, (LPVOID)lpszData, dwSize, &dwDownloaded)) { delete []lpszData; CloseHandles(); return ERR_FILENOTFOUND; } else { DWORD dwBytesWritten = 0; if (!WriteFile(m_hSaveFile, lpszData, dwDownloaded, &dwBytesWritten, NULL)) { //xml文件写入失败 CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_NAME, MY_EEEOR_ID_FILER, MY_ERROR_DESCRIPT_FILER); CloseHandles(); return ERR_DISKERROR; } delete []lpszData; if (dwDownloaded == 0) break; } } CloseHandles(); return ERR_SUCCESS; }
/* ============== OnBtnStart ============== */ void CServerCtrlDlg::OnBtnStart( void ) { STARTUPINFO SI; // Still active? Or did user kill it or did it crash if ( PI.hProcess ) { DWORD dwEC; if ( GetExitCodeProcess( PI.hProcess, &dwEC ) ) { if ( dwEC == STILL_ACTIVE ) { return; } else { memset( &PI, 0, sizeof( PI ) ); CloseHandles(); } } } // Really still active if ( PI.hProcess || m_hMappedFile || m_hSend || m_hReceive ) return; // Startup dedicated server SECURITY_ATTRIBUTES SA; memset( &SA, 0, sizeof( SA ) ); SA.nLength = sizeof( SA ); // HLDS must be able to inherit the handles we pass via command line so we need to mark the handle as inheritable SA.bInheritHandle = TRUE; SA.lpSecurityDescriptor = NULL; // Create handles && hlds process m_hMappedFile = CreateFileMapping( (HANDLE)0xFFFFFFFF, &SA, PAGE_READWRITE, 0, 16384, NULL ); if ( !m_hMappedFile ) { AfxMessageBox( "Couldn't create mapped file", MB_OK ); return; } // Uses same security attributes to make handle inheritable m_hSend = CreateEvent( &SA, FALSE, FALSE, NULL ); m_hReceive = CreateEvent( &SA, FALSE, FALSE, NULL ); memset( &SI, 0, sizeof( SI ) ); SI.cb = sizeof( SI ); memset( &PI, 0, sizeof( PI ) ); char sz[ 256 ]; char szdir[ 256 ]; // FIXME: You'll want to fill in your executable path here, of course. // The key thing is to invoke the engine using the three HANDLES that were just created sprintf( szdir, "d:\\quiver" ); sprintf( sz, "%s\\hlds.exe +sv_lan 1 -HFILE %i -HPARENT %i -HCHILD %i", szdir, (int)m_hMappedFile, (int)m_hSend, (int)m_hReceive ); // Run it if ( !CreateProcess( NULL, sz, &SA, NULL, TRUE, 0, NULL, szdir, &SI, &PI ) ) { AfxMessageBox( "Couldn't create dedicated server process? Correct path", MB_OK ); } }
HttpSnaffle::~HttpSnaffle() { CloseHandles(); }
int CDownloadThread::TransferDataPost() { CUrlCrack url; if (!url.Crack(m_strDownURl.c_str())) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_URLCRACKERROR, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的url = %s Crack 异常!", m_strDownURl.c_str())); return ERR_URLCRACKERROR; } NEED_STOP; m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPEN, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetOpen异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); return ERR_INTOPEN; } NEED_STOP; DWORD dwTimeOut = 60000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTCONNECT, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetConnect异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTCONNECT; } LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION, (DWORD)this); if (m_hInetFile == NULL) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPENREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpOpenRequest异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTOPENREQ; } NEED_STOP; HttpAddRequestHeaders(m_hInetFile, _T("Content-Type: application/x-www-form-urlencoded\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); TCHAR szHeaders[1024]; _stprintf_s(szHeaders, _countof(szHeaders), _T("MoneyhubUID: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, (LPVOID)m_strSendData.c_str (), m_dwPostDataLength); if (!bSend) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTSENDREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpSendRequest异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTSENDREQ; } NEED_STOP; TCHAR szStatusCode[32]; DWORD dwInfoSize = sizeof(szStatusCode); if (!HttpQueryInfo(m_hInetFile, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTQUREYINFO, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTQUREYINFO; } else { long nStatusCode = _ttol(szStatusCode); if (nStatusCode != HTTP_STATUS_OK) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTFILENOTFOUND, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTFILENOTFOUND; } } NEED_STOP; m_hSaveFile = CreateFile(m_strSaveFile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (m_hSaveFile == INVALID_HANDLE_VALUE) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_CREATEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的CreateFile异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_CREATEFILE; } NEED_STOP; LPBYTE lpszData = NULL; DWORD dwSize = 0; while (true) { NEED_STOP; if (!InternetQueryDataAvailable(m_hInetFile, &dwSize, 0, 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTQUERYDATAAVAILABLE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetQueryDataAvailable异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); // ERR_INTQUERYDATAAVAILABLE break; } lpszData = new BYTE[dwSize]; DWORD dwDownloaded = 0; if (!InternetReadFile(m_hInetFile, (LPVOID)lpszData, dwSize, &dwDownloaded)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTREADFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetReadFile异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); delete []lpszData; CloseHandles(); return ERR_INTREADFILE; } else { DWORD dwBytesWritten = 0; if (!WriteFile(m_hSaveFile, lpszData, dwDownloaded, &dwBytesWritten, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_WRITEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的WriteFile异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_WRITEFILE; } delete []lpszData; if (dwDownloaded == 0) break; } } CloseHandles(); return ERR_SUCCESS; }
int CDownloadThread::TransferDataPost(BOOL bWithFile) { if(!bWithFile) // 不是用文件下载数据 { ATLASSERT(NULL != m_pRead && m_nLength > 0 && NULL != m_pReadLength); if (NULL == m_pRead || m_nLength <= 0 || NULL == m_pReadLength) return ERR_PARAM; } CUrlCrack url; if (!url.Crack(m_strDownURl.c_str())) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_URLCRACKERROR, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的url = %s Crack 异常!", m_strDownURl.c_str())); return ERR_URLCRACKERROR; } NEED_STOP; m_hInetSession = ::InternetOpen(MONEYHUB_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (m_hInetSession == NULL) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPEN, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetOpen异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); return ERR_INTOPEN; } NEED_STOP; DWORD dwTimeOut = 60000; InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_SEND_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); InternetSetOptionEx(m_hInetSession, INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeOut, sizeof(DWORD), 0); m_hInetConnection = ::InternetConnect(m_hInetSession, url.GetHostName(), url.GetPort(), NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD)this); if (m_hInetConnection == NULL) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTCONNECT, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetConnect异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTCONNECT; } LPCTSTR ppszAcceptTypes[2]; ppszAcceptTypes[0] = _T("*/*"); ppszAcceptTypes[1] = NULL; DWORD dwFlags = 0; if(INTERNET_DEFAULT_HTTPS_PORT == url.GetPort()) { dwFlags = INTERNET_FLAG_SECURE; } else if(INTERNET_DEFAULT_HTTP_PORT == url.GetPort()) { dwFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION ; } m_hInetFile = HttpOpenRequest(m_hInetConnection, _T("POST"), url.GetPath(), NULL, NULL, ppszAcceptTypes, dwFlags, (DWORD)this); if (m_hInetFile == NULL) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTOPENREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpOpenRequest异常!LastErrCode = %d", GetLastError())); CloseHandles(); return ERR_INTOPENREQ; } if(INTERNET_DEFAULT_HTTPS_PORT == url.GetPort()) { DWORD dwOptionFlags; DWORD dwBuffLen = sizeof(dwOptionFlags); InternetQueryOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwOptionFlags, &dwBuffLen); dwOptionFlags |= (SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID); InternetSetOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, &dwOptionFlags, sizeof (dwOptionFlags) ); } NEED_STOP; HttpAddRequestHeaders(m_hInetFile, _T("Content-Type: application/x-www-form-urlencoded\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); HttpAddRequestHeaders(m_hInetFile, _T("User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); HttpAddRequestHeaders(m_hInetFile, _T("Accept-Language: zh-CN"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); TCHAR szHeaders[1024]; _stprintf_s(szHeaders, _countof(szHeaders), _T("Moneyhubuid: %s\r\n"), m_strHWID.c_str()); HttpAddRequestHeaders(m_hInetFile, szHeaders, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE); BOOL bSend = ::HttpSendRequest(m_hInetFile, NULL, 0, (LPVOID)m_strSendData.c_str (), m_dwPostDataLength); if (!bSend) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTSENDREQ, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpSendRequest异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTSENDREQ; } NEED_STOP; TCHAR szStatusCode[32]; DWORD dwInfoSize = sizeof(szStatusCode); if (!HttpQueryInfo(m_hInetFile, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTQUREYINFO, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTQUREYINFO; } else { long nStatusCode = _ttol(szStatusCode); if (nStatusCode != HTTP_STATUS_OK) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTFILENOTFOUND, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的HttpQueryInfo异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_INTFILENOTFOUND; } } NEED_STOP; if (bWithFile) { m_hSaveFile = CreateFile(m_strSaveFile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (m_hSaveFile == INVALID_HANDLE_VALUE) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_CREATEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的CreateFile异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); CloseHandles(); return ERR_CREATEFILE; } } NEED_STOP; LPBYTE lpszData = NULL; DWORD dwSize = 0; while (true) { NEED_STOP; if (!InternetQueryDataAvailable(m_hInetFile, &dwSize, 0, 0)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTQUERYDATAAVAILABLE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetQueryDataAvailable异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); // ERR_INTQUERYDATAAVAILABLE break; } lpszData = new BYTE[dwSize]; DWORD dwDownloaded = 0; if (!InternetReadFile(m_hInetFile, (LPVOID)lpszData, dwSize, &dwDownloaded)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTREADFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的InternetReadFile异常!LastErrCode = %d", GetLastError())); //OutputDebugString(strErr); delete []lpszData; CloseHandles(); return ERR_INTREADFILE; } else { if (bWithFile) // 用文件 { DWORD dwBytesWritten = 0; if (!WriteFile(m_hSaveFile, lpszData, dwDownloaded, &dwBytesWritten, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_WRITEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"TransferDataPost的WriteFile异常!LastErrCode = %d", GetLastError())); delete []lpszData; CloseHandles(); return ERR_WRITEFILE; } } else { if (m_nLength < (*m_pReadLength) + dwDownloaded) { delete []lpszData; CloseHandles(); return ERR_WRITEFILE; } memcpy(m_pRead + (*m_pReadLength), lpszData, dwDownloaded); *m_pReadLength += dwDownloaded; } delete []lpszData; if (dwDownloaded == 0) break; } } CloseHandles(); return ERR_SUCCESS; }
bool CHttpDownloader::downLoadBreakpointFile() { DWORD dwBytesRead = 0; char szReadBuf[1024]; DWORD dwBytesToRead = sizeof(szReadBuf); wchar_t wcsNum[255]; DWORD dwRegType = 0, dwReturnSize = sizeof(wcsNum), dwFilePoint; UINT64 uI64Num = 0; bool bIsBreak = false; uI64Num = isBreakPointFile(m_strSaveFile.c_str()); dwFilePoint = (DWORD)(uI64Num); if( dwFilePoint > 0 )//续传文件 { bIsBreak = true; m_hSaveFile = CreateFile(m_strSaveFile.c_str(), MYWIRTEFILE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (m_hSaveFile == INVALID_HANDLE_VALUE)//断点文件不存在 { m_hSaveFile = CreateFile(m_strSaveFile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } else { if(INVALID_SET_FILE_POINTER == SetFilePointer(m_hSaveFile,dwFilePoint,NULL,FILE_BEGIN) ) { CloseHandles(); return ERR_DISKERROR; } m_ui64TotalRead = dwFilePoint; } } else//重新下载 { m_hSaveFile = CreateFile(m_strSaveFile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } if ( INVALID_HANDLE_VALUE == m_hSaveFile ) { CloseHandles(); return ERR_DISKERROR; } do { NEED_STOP; if (!::InternetReadFile(m_hInetFile, szReadBuf, dwBytesToRead, &dwBytesRead)) { CloseHandles(); if(m_repeatNum < REPEATNUM) { m_repeatNum ++; DWORD dwBegin = GetTickCount(); while( GetTickCount() - dwBegin < 1000 * m_repeatNum * 20) Sleep(20000); return this->TransferDataGet() == 0 ? false:true ; } else return ERR_FILENOTFOUND; } else if (dwBytesRead) { DWORD dwBytesWritten = 0; if (!WriteFile(m_hSaveFile, szReadBuf, dwBytesRead, &dwBytesWritten, NULL)) { //文件写入错误,反馈 CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_NAME, MY_EEEOR_ID_FILER, MY_ERROR_DESCRIPT_FILER); CloseHandles(); return ERR_DISKERROR; } m_ui64TotalRead += dwBytesRead; if (m_pUpdateMgr) m_pUpdateMgr->SetProgressVal(m_ui64FileSize, m_ui64TotalRead); } } while (dwBytesRead); CloseHandles(); if( !MoveFileExW(m_strSaveFile.c_str(), m_wcsOriginalFileName.c_str() , MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED ) ) { CDownloadOperation don; don.deleteAllUpdataFile(); } m_wcsOriginalFileName = L"error"; return ERR_SUCCESS; }
int CDownloadThread::DownLoadBreakpointFile() { DWORD dwBytesRead = 0; char szReadBuf[1024]; DWORD dwBytesToRead = sizeof(szReadBuf); wchar_t wcsNum[255]; DWORD dwRegType = 0, dwReturnSize = sizeof(wcsNum), dwFilePoint; UINT64 uI64Num = 0; bool bIsBreak = false; uI64Num = IsBreakPointFile(m_wcsBreakFileName.c_str()); dwFilePoint = (DWORD)(uI64Num); if( dwFilePoint > 0 )//续传文件 { NEED_STOP; bIsBreak = true; m_hSaveFile = CreateFile(m_wcsBreakFileName.c_str(), MYWIRTEFILE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (m_hSaveFile == INVALID_HANDLE_VALUE)//断点文件不存在 { m_hSaveFile = CreateFile(m_wcsBreakFileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } else { if(INVALID_SET_FILE_POINTER == SetFilePointer(m_hSaveFile,dwFilePoint,NULL,FILE_BEGIN) ) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_SETFILEPOINTER, CRecordProgram::GetInstance()->GetRecordInfo(L"DownLoadBreakpointFile的SetFilePointer异常!LastErrCode = %d", GetLastError())); CloseHandles(); return ERR_SETFILEPOINTER; } m_ui64TotalRead = dwFilePoint; } } else//重新下载 { NEED_STOP; m_hSaveFile = CreateFile(m_wcsBreakFileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } if ( INVALID_HANDLE_VALUE == m_hSaveFile ) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_CREATEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"DownLoadBreakpointFile的CreateFile异常!LastErrCode = %d", GetLastError())); CloseHandles(); CloseHandles(); return ERR_CREATEFILE; } do { NEED_STOP; if (!::InternetReadFile(m_hInetFile, szReadBuf, dwBytesToRead, &dwBytesRead)) { CloseHandles(); if(m_repeatNum < REPEATNUM) { m_repeatNum ++; m_bRetryWait = true; // 重试等待 // 等待十秒后重试 int nTemp = 50; while(nTemp >= 0) { nTemp --; Sleep(200); NEED_STOP; } m_bRetryWait = false; CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_INTREADFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"DownLoadBreakpointFile中的InternetReadFile异常!LastErrCode = %d", GetLastError())); return this->TransferDataGet() == 0 ? false:true ; } else { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_OUTOFTIME, CRecordProgram::GetInstance()->GetRecordInfo(L"DownLoadBreakpointFile下载超时!LastErrCode = %d", GetLastError())); return ERR_OUTOFTIME; // 下载超时 } } else if (dwBytesRead) { DWORD dwBytesWritten = 0; if (!WriteFile(m_hSaveFile, szReadBuf, dwBytesRead, &dwBytesWritten, NULL)) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_WRITEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"DownLoadBreakpointFile的WriteFile异常!LastErrCode = %d", GetLastError())); CloseHandles(); return ERR_WRITEFILE; } m_ui64TotalRead += dwBytesRead; } } while (dwBytesRead); CloseHandles(); NEED_STOP; if( !MoveFileExW(m_wcsBreakFileName.c_str(), m_strSaveFile.c_str() , MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED ) ) { CRecordProgram::GetInstance()->FeedbackError(MY_ERROR_PRO_CORE, ERR_RENAMEFILE, CRecordProgram::GetInstance()->GetRecordInfo(L"DownLoadBreakpointFile的MoveFileExW异常!LastErrCode = %d", GetLastError())); NEED_STOP; } m_wcsBreakFileName.clear (); return ERR_SUCCESS; }
BOOL CPostData::UseHttpSendReqEx( std::string& lpost) { USES_CONVERSION; long lgg; CString strtemp; lgg = lpost.size(); INTERNET_BUFFERS BufferIn; DWORD dwBytesWritten; BOOL bRet; TCHAR head[1024]; std::wstring strt = MS_CONTENTTYPE; std::wstring strt1 = CA2W(CSNManager::GetInstance()->GetSN().c_str()); //_stprintf_s(head, _countof(head), _T("%s\r\nSN: %s;\r\nMoneyhubuid: %s;\r\n"), strt.c_str() ,strt1.c_str() ,m_strHWID.c_str()); _stprintf_s(head, _countof(head), _T("Sn: %s\r\nMoneyhubuid: %s\r\n"), strt1.c_str() ,m_strHWID.c_str()); //TCHAR head[]= strt.c_str(); BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Must be set or error will occur BufferIn.Next = NULL; BufferIn.lpcszHeader = head; BufferIn.dwHeadersLength = 0; BufferIn.dwHeadersTotal = sizeof(head); BufferIn.lpvBuffer = (LPSTR)lpost.c_str(); BufferIn.dwBufferLength = 0; BufferIn.dwBufferTotal = lgg; // This is the only member used other than dwStructSize BufferIn.dwOffsetLow = 0; BufferIn.dwOffsetHigh = 0; DWORD dwFlags = 0; DWORD dwBuffLen = sizeof(dwFlags); InternetQueryOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen); dwFlags |= (SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID); InternetSetOption (m_hInetFile, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags) ); if(!HttpSendRequestEx( m_hInetFile, &BufferIn, NULL, 0, 0)) { strtemp.Format(_T("Error on HttpSendRequestEx %d\n"),GetLastError()); int nLen = strtemp.GetLength(); strt =strtemp.GetBuffer(nLen); strtemp.ReleaseBuffer(); CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, strt); CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, L"HttpSendRequestEx"); CloseHandles(); printf( "Error on HttpSendRequestEx %d\n",GetLastError() ); return FALSE; } bRet=TRUE; bRet = InternetWriteFile( m_hInetFile, (LPSTR)lpost.c_str(), lgg, &dwBytesWritten); if(!bRet) { strtemp.Format(_T("Error on HttpSendRequestEx %d\n"),GetLastError()); int nLen = strtemp.GetLength(); strt =strtemp.GetBuffer(nLen); strtemp.ReleaseBuffer(); CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, strt); CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, L"HttpSendRequestEx InternetWriteFile"); CloseHandles(); printf( "\nError on InternetWriteFile %lu\n",GetLastError() ); return FALSE; } bRet = HttpEndRequest(m_hInetFile, NULL, 0, 0); if(!bRet) { strtemp.Format(_T("Error on HttpSendRequestEx %d\n"),GetLastError()); int nLen = strtemp.GetLength(); strt =strtemp.GetBuffer(nLen); strtemp.ReleaseBuffer(); CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, strt); CRecordProgram::GetInstance()->RecordWarnInfo(MY_PRO_NAME, MY_COMMON_ERROR, L"HttpSendRequestEx HttpEndRequest"); CloseHandles(); printf( "Error on HttpEndRequest %lu \n", GetLastError()); return FALSE; } char pcBuffer[BUFFSIZE]; DWORD dwBytesRead; LPSTR lpszData1; lpszData1 = new char[1024*1024]; lpszData1[0]='\0'; //printf("\nThe following was returned by the server:\n"); do { dwBytesRead=0; if(InternetReadFile(m_hInetFile, pcBuffer, BUFFSIZE-1, &dwBytesRead)) { pcBuffer[dwBytesRead]=0x00; // Null-terminate buffer strcat(lpszData1,pcBuffer); //printf("%s", pcBuffer); } else return FALSE; //lpszData1 =""; //printf("\nInternetReadFile failed"); }while(dwBytesRead>0); //printf("\n"); lpost = ""; lpost = CW2A(UTF8ToUnicode(lpszData1).c_str()); delete []lpszData1; CloseHandles(); //return ERR_SUCCESS; return TRUE; }