| 
              #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);
 }
 |