8 #ifndef _INC_cWinINet_H
9 #define _INC_cWinINet_H
10 #ifndef NO_PRAGMA_ONCE
16 #include "../Http/cHttpCommon.h"
36 class cWinINetSession;
37 class cWinINetConnection;
63 HINTERNET get_Handle() const noexcept
67 bool isValidHandle() const noexcept
72 void AttachHandle(HINTERNET h)
81 bool QueryOption(DWORD dwOption,
void* pData, OUT DWORD* pdwDataSize)
85 return ::InternetQueryOption(get_Handle(), dwOption, pData, pdwDataSize);
87 bool SetOption(DWORD dwOption,
void* pData, DWORD dwDataSize)
90 return ::InternetSetOption(get_Handle(), dwOption, pData, dwDataSize);
99 friend class cWinINetSession;
100 typedef cWinINetHandle SUPER_t;
103 virtual cWinINetBase* GetParent() const noexcept = 0;
104 virtual cWinINetSession* GetSession() const noexcept = 0;
107 cWinINetBase() noexcept
110 virtual ~cWinINetBase()
124 :
public cWinINetBase
131 typedef cWinINetBase SUPER_t;
134 cRefPtr<cWinINetConnection> m_pConnection;
137 cWinINetFile(cWinINetConnection* pConnection);
138 virtual ~cWinINetFile();
141 virtual cWinINetBase* GetParent() const noexcept;
142 virtual cWinINetSession* GetSession() const noexcept;
144 virtual
HRESULT ReadX(
void* pData,
size_t nDataSize) override;
145 virtual
HRESULT WriteX(const
void* pData,
size_t nDataSize) override;
152 typedef cWinINetFile SUPER_t;
154 cHttpRequest(cWinINetConnection* pConnection,
HTTPVERB_TYPE nVerb,
const GChar_t* pstrObjectName,
155 const GChar_t* pszReferrer =
nullptr,
156 const GChar_t** ppszAcceptTypes =
nullptr,
157 DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_UI);
158 virtual ~cHttpRequest()
163 bool AddRequestHeaders(
const GChar_t* pstrHeaders,
StrLen_t dwHeadersLen, DWORD dwModifiers);
164 bool SendRequest(
const GChar_t* pstrHeaders =
nullptr,
StrLen_t dwHeadersLen = 0, LPVOID lpOptional =
nullptr, DWORD dwOptionalLen = 0);
165 bool SendRequestEx(LPINTERNET_BUFFERS lpBuffersIn);
167 bool QueryInfoStatusCode(DWORD& dwStatusCode);
168 bool QueryInfo(DWORD dwInfoLevel,
cString& str, DWORD* pdwIndex =
nullptr)
const;
170 typedef cRefPtr<cHttpRequest> cHttpRequestPtr;
176 typedef cWinINetFile SUPER_t;
178 cFtpRequest(cWinINetConnection* pConnection) noexcept
179 : cWinINetFile(pConnection)
182 virtual ~cFtpRequest()
191 :
public cWinINetBase
198 typedef cWinINetBase SUPER_t;
199 friend class cWinINetSession;
202 cWinINetSession* m_pSession;
209 cWinINetConnection(cWinINetSession* pSession,
const GChar_t* pstrServer,
211 virtual ~cWinINetConnection();
213 virtual cWinINetBase* GetParent() const noexcept override;
214 virtual cWinINetSession* GetSession() const noexcept
override
219 CString GetServerName() const noexcept
222 return m_strServerName;
224 bool isConnected() const noexcept;
227 class
GRAYLIB_LINK cHttpConnection : public cWinINetConnection
232 typedef cWinINetConnection SUPER_t;
234 cHttpConnection(cWinINetSession* pSession,
236 const GChar_t* pstrUserName =
nullptr,
const GChar_t* pstrPassword =
nullptr);
237 virtual ~cHttpConnection()
243 const GChar_t* pstrReferer =
nullptr,
244 const GChar_t** ppstrAcceptTypes =
nullptr,
245 DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_UI);
247 typedef cRefPtr<cHttpConnection> cHttpConnectionPtr;
249 class GRAYLIB_LINK cFtpConnection :
public cWinINetConnection
253 typedef cWinINetFile SUPER_t;
255 cFtpConnection(cWinINetSession* pSession,
257 : cWinINetConnection(pSession, pstrServer)
259 virtual ~cFtpConnection()
267 class GRAYLIB_LINK cWinINetSession :
public cWinINetBase
275 typedef cWinINetBase SUPER_t;
276 friend class cWinINetConnection;
277 friend class cWinINetFile;
280 bool m_bCallbackEnabled;
283 static void CALLBACK OnStatusCallbackStatic(HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus,
284 LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
287 cWinINetSession(
const GChar_t* pstrAgent =
nullptr,
288 DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
289 const GChar_t* pstrProxyName =
nullptr,
290 const GChar_t* pstrProxyBypass =
nullptr,
292 virtual ~cWinINetSession();
294 cHttpConnectionPtr GetHttpConnection(
const GChar_t* pstrServer,
296 const GChar_t* pstrUserName =
nullptr,
const GChar_t* pstrPassword =
nullptr);
298 virtual cWinINetBase* GetParent() const noexcept
override
302 virtual cWinINetSession* GetSession() const noexcept
override
304 return const_cast<cWinINetSession*
>(
this);
307 bool EnableStatusCallback(
bool bEnable =
true);
308 virtual void Close()
override;
313 virtual void OnStatusCallback(cWinINetBase* pContext, DWORD dwInternetStatus,
314 LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
320 :
public cWinINetSession
325 typedef cWinINetSession SUPER_t;
329 cRefPtr<cHttpConnection> m_pConnection;
333 cWinINetCopier(
const GChar_t* pszAgent =
_GT(
GRAY_NAMES), DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS);
334 virtual ~cWinINetCopier();
336 bool isConnected()
const
338 if (m_pConnection ==
nullptr)
340 return m_pConnection->isConnected();
346 virtual cStringA get_ConnectName()
const override;
352 virtual void OnStatusCallback(cWinINetBase* pContext, DWORD dwInternetStatus,
353 LPVOID lpvStatusInformation, DWORD dwStatusInformationLength)
override;
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAY_NAMES
Use GRAYNAME for string.
Definition: GrayCore.h:34
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define _GT(x)
like _T(x) macro for static text.
Definition: StrConst.h:27
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define HANDLE_NULL
Invalid OS handle for _WIN32. Not invalid OS handle for linux.
Definition: cOSHandle.h:21
#define UNITTEST_FRIEND(n)
Define this in the class body to be unit tested. Allow the unit test to access private/protected stuf...
Definition: cUnitTestDecl.h:17
WORD NET_PORT_t
WinINet calls ports NET_PORT_t INTERNET_PORT = a service.
Definition: cNetPort.h:21
HTTPVERB_TYPE
Definition: cHttpCommon.h:36
UNITTEST2_PREDEF(cQuadtree)
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
cStringT< char > cStringA
Definition: cString.h:635
char GChar_t
My version of TCHAR, _TCHAR.
Definition: StrConst.h:26
cString CString
Definition: cString.h:639
UINT64 FILE_SIZE_t
similar to STREAM_POS_t size_t
Definition: cFileStatus.h:31
cStringT< GChar_t > cString
Definition: cString.h:636