5 #ifndef __HTTP_CLIENT_H__
6 #define __HTTP_CLIENT_H__
8 #include <boost/asio/ip/tcp.hpp>
9 #include <boost/function.hpp>
10 #include <boost/ptr_container/ptr_map.hpp>
11 #include <boost/system/error_code.hpp>
13 #include <curl/curl.h>
18 #include "http_parser/http_parser.h"
70 typedef boost::function<void(std::string &, boost::system::error_code &)>
HttpCb;
72 int HttpPut(
const std::string &put_string,
const std::string &path,
HttpCb);
73 int HttpPut(
const std::string &put_string,
const std::string &path,
74 bool header,
bool short_timeout,
bool reuse,
75 std::vector<std::string> &hdr_options,
HttpCb cb);
76 int HttpPost(
const std::string &post_string,
const std::string &path,
78 int HttpPost(
const std::string &post_string,
const std::string &path,
79 bool header,
bool short_timeout,
bool reuse,
80 std::vector<std::string> &hdr_options,
HttpCb cb);
82 int HttpGet(
const std::string &path,
bool header,
bool short_timeout,
83 bool reuse, std::vector<std::string> &hdr_options,
HttpCb cb);
84 int HttpHead(
const std::string &path,
bool header,
bool short_timeout,
85 bool reuse, std::vector<std::string> &hdr_options,
HttpCb cb);
87 int HttpDelete(
const std::string &path,
bool header,
bool short_timeout,
88 bool reuse, std::vector<std::string> &hdr_options,
109 void AssignData(
const char *ptr,
size_t size);
131 std::string
make_url(std::string &path);
133 unsigned short bool2bf(
bool header,
bool short_timeout,
bool reuse) {
134 return (header ? 1 << 2 : 0) | (short_timeout ? 1 << 1 : 0) |
137 void bf2bool(
unsigned short bf,
bool &header,
bool &short_timeout,
139 header = (bf & 4u) != 0;
140 short_timeout = (bf & 2u) != 0;
141 reuse = (bf & 1u) != 0;
145 unsigned short header_shortTimeout_reuse,
146 std::vector<std::string> hdr_options,
147 HttpCb cb, http_method m);
208 bool IsErrorHard(
const boost::system::error_code &ec);
220 typedef std::pair<endpoint, size_t>
Key;
void UpdateOffset(size_t bytes)
boost::asio::ip::tcp::endpoint endpoint_
enum HttpConnection::HTTPHeaderDataState state_
boost::asio::const_buffer Buffer
DISALLOW_COPY_AND_ASSIGN(HttpClient)
boost::asio::ip::tcp::socket Socket
const std::string & GetData()
int HttpGet(const std::string &path, HttpCb)
DISALLOW_COPY_AND_ASSIGN(HttpClientSession)
HttpConnection * CreateConnection(boost::asio::ip::tcp::endpoint)
boost::function< void()> EnqueuedCb
DISALLOW_COPY_AND_ASSIGN(HttpConnection)
struct _GlobalInfo * GlobalInfo()
HttpClient(EventManager *evm, std::string task_name=std::string("http client"))
void ProcessEvent(EnqueuedCb cb)
std::pair< endpoint, size_t > Key
HttpConnection(boost::asio::ip::tcp::endpoint, size_t id, HttpClient *client)
boost::intrusive_ptr< HttpClientSession > TcpSessionPtr
HttpClientSession * session()
void RemoveConnectionInternal(HttpConnection *)
struct _ConnInfo * curl_handle_
std::string make_url(std::string &path)
int HttpPost(const std::string &post_string, const std::string &path, HttpCb)
HttpClientSession * CreateSession()
virtual TcpSession * AllocSession(Socket *socket)
boost::function< void(std::string &, boost::system::error_code &)> HttpCb
virtual TcpSession * CreateSession()
bool DequeueEvent(EnqueuedCb)
boost::asio::ip::tcp::endpoint endpoint()
boost::asio::ip::tcp::socket Socket
std::map< CURLoption, int > curl_options_
int HttpDelete(const std::string &path, HttpCb)
std::map< std::string, std::string > headers_
void set_use_ssl(bool ssl_flag)
unsigned short bool2bf(bool header, bool short_timeout, bool reuse)
void RegisterEventCb(SessionEventCb cb)
void set_ca_cert(const std::string &ca_cert)
HttpConnection * connection_
std::map< CURLoption, int > * curl_options()
std::string client_cert_type_
HttpClientSession * session_
HttpClientSession(HttpClient *client, Socket *socket)
void TimerErrorHandler(std::string name, std::string error)
HttpConnection * Connection()
boost::asio::ip::tcp::endpoint endpoint
static const uint32_t kDefaultTimeout
void RemoveConnection(HttpConnection *)
void OnEventInternal(TcpSessionPtr session, Event event)
void set_client_cert(const std::string &client_cert)
virtual void OnRead(Buffer buffer)
void AssignData(const char *ptr, size_t size)
WorkQueue< EnqueuedCb > work_queue_
boost::intrusive_ptr< TcpSession > TcpSessionPtr
virtual ~HttpClientSession()
struct _ConnInfo * curl_handle()
void set_client_key(const std::string &client_key)
void set_client_cert_type(const std::string &client_cert_type)
HttpClientSession::SessionEventCb event_cb_
int HttpHead(const std::string &path, bool header, bool short_timeout, bool reuse, std::vector< std::string > &hdr_options, HttpCb cb)
bool AddConnection(HttpConnection *)
bool IsErrorHard(const boost::system::error_code &ec)
void HttpProcessInternal(const std::string body, std::string path, unsigned short header_shortTimeout_reuse, std::vector< std::string > hdr_options, HttpCb cb, http_method m)
boost::ptr_map< Key, HttpConnection > HttpConnectionMap
void OnEvent(TcpSession *session, Event event)
boost::asio::io_context * io_service()
void SetConnection(HttpConnection *conn)
int HttpPut(const std::string &put_string, const std::string &path, HttpCb)
void set_curl_handle(struct _ConnInfo *handle)
boost::function< void(HttpClientSession *session, TcpSession::Event event)> SessionEventCb
std::map< std::string, std::string > * Headers()
void set_session(HttpClientSession *session)
virtual Socket * socket() const
void bf2bool(unsigned short bf, bool &header, bool &short_timeout, bool &reuse)
void AssignHeader(const char *ptr, size_t size)
void RegisterEventCb(HttpClientSession::SessionEventCb cb)