Initial
This commit is contained in:
101
proto/source/request.hpp
Normal file
101
proto/source/request.hpp
Normal file
@@ -0,0 +1,101 @@
|
||||
#ifndef _PROTO_HTTPREQUEST_HPP_
|
||||
#define _PROTO_HTTPREQUEST_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_ARRAY_HPP_
|
||||
#include <common/array.hpp>
|
||||
#endif
|
||||
#ifndef _PROTO_CONNECTION_HPP_
|
||||
#include <proto/connection.hpp>
|
||||
#endif
|
||||
|
||||
class HttpRequest
|
||||
{
|
||||
public:
|
||||
HttpRequest();
|
||||
virtual ~HttpRequest();
|
||||
bool get(const Connection &connection,const String &object,Array<char> &rawData);
|
||||
bool getRawData(Array<char> &rawData);
|
||||
DWORD sizeHeaders(void);
|
||||
void close(void);
|
||||
bool isOkay(void)const;
|
||||
HINTERNET getHANDLE(void)const;
|
||||
private:
|
||||
bool send(void);
|
||||
HINTERNET mhRequest;
|
||||
};
|
||||
|
||||
inline
|
||||
HttpRequest::HttpRequest()
|
||||
: mhRequest(0)
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
HttpRequest::~HttpRequest()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
inline
|
||||
bool HttpRequest::get(const Connection &connection,const String &object,Array<char> &rawData)
|
||||
{
|
||||
char *accessTypes[2]={"*/*",0};
|
||||
if(!connection.isOkay())return false;
|
||||
close();
|
||||
mhRequest=::HttpOpenRequest(connection.getHANDLE(),String("GET"),object.str(),HTTP_VERSION,NULL,(LPCSTR*)accessTypes,INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,0);
|
||||
if(!isOkay())return false;
|
||||
if(!send())return false;
|
||||
return getRawData(rawData);
|
||||
return true;
|
||||
}
|
||||
|
||||
inline
|
||||
bool HttpRequest::send(void)
|
||||
{
|
||||
if(!isOkay())return false;
|
||||
return ::HttpSendRequest(getHANDLE(),NULL,0,NULL,0);
|
||||
}
|
||||
|
||||
inline
|
||||
bool HttpRequest::getRawData(Array<char> &rawData)
|
||||
{
|
||||
DWORD dwSize;
|
||||
if(!isOkay())return false;
|
||||
rawData.size(sizeHeaders());
|
||||
if(!rawData.size())return false;
|
||||
dwSize=rawData.size();
|
||||
if(!::HttpQueryInfo(getHANDLE(),HTTP_QUERY_RAW_HEADERS_CRLF,&rawData[0],&dwSize,NULL))return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD HttpRequest::sizeHeaders(void)
|
||||
{
|
||||
DWORD dwSize(0);
|
||||
if(!isOkay())return dwSize;
|
||||
::HttpQueryInfo(getHANDLE(),HTTP_QUERY_RAW_HEADERS_CRLF,NULL,&dwSize,NULL);
|
||||
return dwSize;
|
||||
}
|
||||
|
||||
inline
|
||||
void HttpRequest::close(void)
|
||||
{
|
||||
if(!isOkay())return;
|
||||
::InternetCloseHandle(mhRequest);
|
||||
mhRequest=0;
|
||||
}
|
||||
|
||||
inline
|
||||
HINTERNET HttpRequest::getHANDLE(void)const
|
||||
{
|
||||
return mhRequest;
|
||||
}
|
||||
|
||||
inline
|
||||
bool HttpRequest::isOkay(void)const
|
||||
{
|
||||
return mhRequest?true:false;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user