@@ -81,89 +81,87 @@ namespace hv {
8181
8282class HttpClient {
8383public:
84- HttpClient (const char * host = NULL , int port = DEFAULT_HTTP_PORT, int https = 0 ) {
85- _client = http_client_new (host, port, https);
86- }
87-
88- ~HttpClient () {
89- if (_client) {
90- http_client_del (_client);
91- _client = NULL ;
92- }
93- }
84+ HttpClient (const char * host = NULL , int port = DEFAULT_HTTP_PORT, int https = 0 )
85+ : client_(http_client_new(host, port, https))
86+ {}
9487
9588 // timeout: s
9689 int setTimeout (int timeout) {
97- return http_client_set_timeout (_client , timeout);
90+ return http_client_set_timeout (client_. get () , timeout);
9891 }
9992
10093 // SSL/TLS
10194 int setSslCtx (hssl_ctx_t ssl_ctx) {
102- return http_client_set_ssl_ctx (_client , ssl_ctx);
95+ return http_client_set_ssl_ctx (client_. get () , ssl_ctx);
10396 }
10497 int newSslCtx (hssl_ctx_opt_t * opt) {
105- return http_client_new_ssl_ctx (_client , opt);
98+ return http_client_new_ssl_ctx (client_. get () , opt);
10699 }
107100
108101 // headers
109102 int clearHeaders () {
110- return http_client_clear_headers (_client );
103+ return http_client_clear_headers (client_. get () );
111104 }
112105 int setHeader (const char * key, const char * value) {
113- return http_client_set_header (_client , key, value);
106+ return http_client_set_header (client_. get () , key, value);
114107 }
115108 int delHeader (const char * key) {
116- return http_client_del_header (_client , key);
109+ return http_client_del_header (client_. get () , key);
117110 }
118111 const char * getHeader (const char * key) {
119- return http_client_get_header (_client , key);
112+ return http_client_get_header (client_. get () , key);
120113 }
121114
122115 // http_proxy
123116 int setHttpProxy (const char * host, int port) {
124- return http_client_set_http_proxy (_client , host, port);
117+ return http_client_set_http_proxy (client_. get () , host, port);
125118 }
126119 // https_proxy
127120 int setHttpsProxy (const char * host, int port) {
128- return http_client_set_https_proxy (_client , host, port);
121+ return http_client_set_https_proxy (client_. get () , host, port);
129122 }
130123 // no_proxy
131124 int addNoProxy (const char * host) {
132- return http_client_add_no_proxy (_client , host);
125+ return http_client_add_no_proxy (client_. get () , host);
133126 }
134127
135128 // sync
136129 int send (HttpRequest* req, HttpResponse* resp) {
137- return http_client_send (_client , req, resp);
130+ return http_client_send (client_. get () , req, resp);
138131 }
139132
140133 // async
141134 int sendAsync (HttpRequestPtr req, HttpResponseCallback resp_cb = NULL ) {
142- return http_client_send_async (_client , req, std::move (resp_cb));
135+ return http_client_send_async (client_. get () , req, std::move (resp_cb));
143136 }
144137
145138 // low-level api
146139 int connect (const char * host, int port = DEFAULT_HTTP_PORT, int https = 0 , int timeout = DEFAULT_HTTP_CONNECT_TIMEOUT) {
147- return http_client_connect (_client , host, port, https, timeout);
140+ return http_client_connect (client_. get () , host, port, https, timeout);
148141 }
149142 int sendHeader (HttpRequest* req) {
150- return http_client_send_header (_client , req);
143+ return http_client_send_header (client_. get () , req);
151144 }
152145 int sendData (const char * data, int size) {
153- return http_client_send_data (_client , data, size);
146+ return http_client_send_data (client_. get () , data, size);
154147 }
155148 int recvData (char * data, int size) {
156- return http_client_recv_data (_client , data, size);
149+ return http_client_recv_data (client_. get () , data, size);
157150 }
158151 int recvResponse (HttpResponse* resp) {
159- return http_client_recv_response (_client , resp);
152+ return http_client_recv_response (client_. get () , resp);
160153 }
161154 int close () {
162- return http_client_close (_client);
155+ return http_client_close (client_. get ());
163156 }
164157
165158private:
166- http_client_t * _client;
159+ struct http_client_deleter {
160+ void operator ()(http_client_t * cli) const {
161+ http_client_del (cli);
162+ }
163+ };
164+ std::unique_ptr<http_client_t , http_client_deleter> client_;
167165};
168166
169167}
0 commit comments