| 
            
            
             
              #include "stdafx.h" #include "HttpContent.h"
  LPTSTR HttpContent::lpszDefaultAgent = TEXT("Arslanbar Client"); LPTSTR HttpContent::lpszDefaultServer = TEXT("zh.arslanbar.net"); INTERNET_PORT HttpContent::nDefaultPort = INTERNET_DEFAULT_HTTP_PORT;
  HttpContent::HttpContent(void) {     lpszAgent = lpszDefaultAgent;     lpszServer =lpszDefaultServer;     nPort = nDefaultPort;
      lpData = NULL;     dwSize = 0; }
 
  HttpContent::~HttpContent(void) {     Free(); }
  /* This function can be called a few times to combine several resources into one block of memory */ void HttpContent::Download(bool bTerminate) {     HINTERNET hInternet = InternetOpen(lpszAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);     HINTERNET hConnect = InternetConnect(hInternet, lpszServer, nPort, NULL, NULL, INTERNET_SERVICE_HTTP, NULL, NULL);     HINTERNET hRequest = HttpOpenRequest(hConnect, NULL, lpszPage, NULL, NULL, NULL, NULL, NULL);     HttpSendRequest(hRequest, NULL, NULL, NULL, NULL);
      DWORD dwAvailableSize;     DWORD dwRead = 0;     HANDLE hHeap = GetProcessHeap();     while (InternetQueryDataAvailable(hRequest, &dwAvailableSize, NULL, NULL), dwAvailableSize > 0)     {         if (lpData == NULL)             lpData = (LPBYTE)HeapAlloc(hHeap, NULL, dwAvailableSize + bTerminate);         else             lpData = (LPBYTE)HeapReAlloc(hHeap, NULL, lpData, dwSize + dwAvailableSize + bTerminate);         InternetReadFile(hRequest, lpData + dwSize, dwAvailableSize, &dwRead);         dwSize += dwAvailableSize;     }     if (bTerminate)         *(lpData + dwSize) = '\0'; // dwSize doesn't include the terminating NULL          InternetCloseHandle(hRequest);     InternetCloseHandle(hConnect);     InternetCloseHandle(hInternet); }
  /* Delete previously downloaded data */ bool HttpContent::Free(void) {     if (lpData == NULL)         return false;
      HeapFree(GetProcessHeap(), NULL, lpData);     lpData = NULL;     dwSize = 0;     return true; }
  LPBYTE HttpContent::GetData(void) {     return lpData; }
  DWORD HttpContent::GetSize(void) {     return dwSize; }
  /* Save the buffer to a file */ void HttpContent::Save(LPTSTR lpszFileName) {     FILE *fp;     _tfopen_s(&fp, lpszFileName, TEXT("wb"));     if (lpData != NULL)         fwrite(lpData, dwSize, 1, fp);     fclose(fp); }             
                       |