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