host/AzureRecoveryLib/resthelper/HttpRequest.cpp (67 lines of code) (raw):
/*
+------------------------------------------------------------------------------------+
Copyright(c) Microsoft Corp. 2015
+------------------------------------------------------------------------------------+
File : HttpRequest.cpp
Description : HttpRequest class implementation
History : 29-4-2015 (Venu Sivanadham) - Created
+------------------------------------------------------------------------------------+
*/
#include "HttpRequest.h"
#include "../common/Trace.h"
namespace AzureStorageRest
{
/*
Method : HttpRequest::HttpRequest
HttpRequest::~HttpRequest
Description : HttpRequest constructor and destructor
Parameters :
Return Code :
*/
HttpRequest::HttpRequest(const std::string& strUrl) :
m_res_absolute_url(strUrl),
m_req_method(HTTP_GET),
m_timeout(300)
{
BOOST_ASSERT(!strUrl.empty());
}
HttpRequest::~HttpRequest()
{
}
/*
Method : HttpRequest::HeaderBegin
HttpRequest::HeaderEnd
Description : Http request headers iteration helpers
Parameters : None
Return : begin & end iterators of headers map
*/
header_const_iter_t HttpRequest::HeaderBegin() const
{
return m_request_headers.begin();
}
header_const_iter_t HttpRequest::HeaderEnd() const
{
return m_request_headers.end();
}
/*
Method : HttpRequest::AddHeader
Description : Takes header name and value, trims white spaces and adds to headers map.
Header name should not be empty evern after removing white spaces, if so
then the header name & value will be skipped.
Parameters : [in] name: header name
[in] value: header value
Return Code : None
*/
void HttpRequest::AddHeader(const std::string& name, const std::string& value)
{
std::string _name = name, _value = value;
try {
boost::trim(_name);
boost::trim(_value);
} catch (...) {}
if (!_name.empty())
m_request_headers[_name] = _value;
else
TRACE_WARNING("Header name should not be empty. Hence skipping the header entry.\n");
}
/*
Methods : HttpRequest::SetRequestBody,
HttpRequest::SetHttpMethod
Description : Sets send data buffer, Http protocol method respectively
Parameters :
Return Code : None
*/
void HttpRequest::SetRequestBody(const pbyte_t _buffer, const unsigned long _buff_length)
{
m_request_stream.buffer = _buffer;
m_request_stream.cb_buff_length = _buff_length;
}
void HttpRequest::SetHttpMethod(const HTTP_METHOD method)
{
//Curl workaround: Disable "Expect: 100-continue" header in HTTP PUT request
if (HTTP_PUT == method)
AddHeader(RestHeader::Curl_Expect, "");
m_req_method = method;
}
/*
Method : HttpRequest::GetHttpMethodStr
Description : Return Http method verb string of current http request
Parameters : None
Return : HTTP Method verb string
*/
std::string HttpRequest::GetHttpMethodStr() const
{
switch (m_req_method)
{
case HTTP_POST:
return "POST";
case HTTP_HEAD:
return "HEAD";
case HTTP_PUT:
return "PUT";
case HTTP_DELETE:
return "DELETE";
case HTTP_GET:
default:
return "GET";
}
}
void HttpRequest::SetTimeout(uint32_t timeout)
{
m_timeout = timeout;
}
} // ~AzureStorageRest namespace