00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __INTERNETREQUEST_H__
00028 #define __INTERNETREQUEST_H__
00029
00030 #include <windows.h>
00031 #include <wininet.h>
00032 #include <tchar.h>
00033 #include "CCTChar.h"
00034
00035 #include "ProgressInterface.h"
00036
00040 class InternetRequestBuffer
00041 {
00042 public:
00043
00047 InternetRequestBuffer() : m_pData(NULL), m_dwSize(0), m_dwRealSize(0) {};
00051 ~InternetRequestBuffer() {if (m_pData != NULL) delete [] m_pData;};
00052
00053 protected:
00054
00056 char* m_pData;
00058 unsigned int m_dwSize;
00060 unsigned int m_dwRealSize;
00061
00062 public:
00063
00065 bool AddData(const char* pBuffer, unsigned int dwSize);
00071 const char* GetData(unsigned int& dwSize) {dwSize = m_dwSize; return m_pData;};
00075 void Clear() {m_dwSize = 0;};
00076 };
00077
00081 class InternetRequest
00082 {
00083 public:
00084
00086 InternetRequest();
00088 ~InternetRequest();
00089
00090 protected:
00091
00095 struct RequestData
00096 {
00097 public:
00108 RequestData(InternetRequest* pThis, const std::tstring& sRequest, ProgressInterface* pProgress, InternetRequestBuffer& buffer, LPCTSTR lpServer = NULL, LPCSTR lpOptional = NULL, LPCTSTR lpHeaders = NULL)
00109 : m_pThis(pThis), m_sRequest(sRequest), m_pProgress(pProgress), m_pBuffer(&buffer), m_sServer(lpServer == NULL ? _T("") : lpServer), m_sOptional(lpOptional == NULL ? "" : lpOptional), m_sHeaders(lpHeaders == NULL ? _T("") : lpHeaders)
00110 {};
00111 public:
00113 InternetRequest* m_pThis;
00115 std::tstring m_sRequest;
00117 ProgressInterface* m_pProgress;
00119 InternetRequestBuffer* m_pBuffer;
00121 std::tstring m_sServer;
00123 std::string m_sOptional;
00125 std::tstring m_sHeaders;
00126 };
00127
00128 protected:
00129
00131 HINTERNET m_hSession;
00133 HINTERNET m_hConnection;
00135 HINTERNET m_hRequest;
00137 bool m_bInRequest;
00139 bool m_bInCreation;
00141 std::tstring m_sServer;
00143 std::tstring m_sError;
00144
00145 public:
00146
00151 const std::tstring& GetError() {return m_sError;};
00152
00153 public:
00154
00156 bool DoRequest(const std::tstring& sRequest, InternetRequestBuffer& buffer, LPCTSTR lpServer = NULL, LPCSTR lpOptional = NULL, LPCTSTR lpHeaders = NULL, ProgressInterface* pProgress = &gpiDefault);
00158 bool DoRequestThread(const std::tstring& sRequest, InternetRequestBuffer& buffer, LPCTSTR lpServer = NULL, LPCSTR lpOptional = NULL, LPCTSTR lpHeaders = NULL, ProgressInterface* pProgress = &gpiDefault);
00159
00160 protected:
00161
00163 void OnInternetCallback(DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
00165 bool OpenSession();
00167 void CloseAll();
00169 bool DoRequest(RequestData* pData);
00171 bool InnerDoRequest(RequestData* pData);
00172
00173 protected:
00174
00176 static void __stdcall InternetCallback(HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
00178 static DWORD WINAPI RequestThreadProc(LPVOID lpData);
00179 };
00180
00181
00182 #endif