diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-03-24 14:25:14 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-03-24 14:25:14 +0100 |
commit | 5be2b92aec6e0abde419b8128b58d2e96d5d5a34 (patch) | |
tree | 3aa9786cb0abda658ca0012861a0343c69d3d7d4 /uclient-http.c | |
parent | 5e0b24f3a921081162706598d1ebea9d403d3187 (diff) | |
download | uclient-5be2b92aec6e0abde419b8128b58d2e96d5d5a34.tar.gz |
add support for passing in an external ustream_ssl context
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'uclient-http.c')
-rw-r--r-- | uclient-http.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/uclient-http.c b/uclient-http.c index 1cc60e3..045a772 100644 --- a/uclient-http.c +++ b/uclient-http.c @@ -50,6 +50,7 @@ struct uclient_http { struct ustream_fd ufd; struct ustream_ssl ussl; + bool ssl_ctx_ext; bool ssl; bool eof; bool connection_close; @@ -691,13 +692,19 @@ static struct uclient *uclient_http_alloc(void) return &uh->uc; } +static void uclient_http_free_ssl_ctx(struct uclient_http *uh) +{ + if (uh->ssl_ctx && !uh->ssl_ctx_ext) + ustream_ssl_context_free(uh->ssl_ctx); + + uh->ssl_ctx_ext = false; +} + static void uclient_http_free(struct uclient *cl) { struct uclient_http *uh = container_of(cl, struct uclient_http, uc); - if (uh->ssl_ctx) - ustream_ssl_context_free(uh->ssl_ctx); - + uclient_http_free_ssl_ctx(uh); uclient_http_free_url_state(cl); blob_buf_free(&uh->headers); blob_buf_free(&uh->meta); @@ -891,6 +898,19 @@ bool uclient_http_redirect(struct uclient *cl) return true; } +int uclient_http_set_ssl_ctx(struct uclient *cl, struct ustream_ssl_ctx *ctx) +{ + struct uclient_http *uh = container_of(cl, struct uclient_http, uc); + + uclient_http_free_url_state(cl); + + uclient_http_free_ssl_ctx(uh); + uh->ssl_ctx = ctx; + uh->ssl_ctx_ext = !!ctx; + + return 0; +} + const struct uclient_backend uclient_backend_http = { .prefix = uclient_http_prefix, |