Skip to content

Commit 284e9e3

Browse files
author
hewei.it
committed
fix: HttpClient class copy or move (#799)
1 parent 16c5020 commit 284e9e3

1 file changed

Lines changed: 27 additions & 29 deletions

File tree

http/client/HttpClient.h

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -81,89 +81,87 @@ namespace hv {
8181

8282
class HttpClient {
8383
public:
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

165158
private:
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

Comments
 (0)