From: Felix Fietkau Date: Mon, 24 Mar 2014 13:25:14 +0000 (+0100) Subject: add support for passing in an external ustream_ssl context X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5be2b92aec6e0abde419b8128b58d2e96d5d5a34;p=oweals%2Fuclient.git add support for passing in an external ustream_ssl context Signed-off-by: Felix Fietkau --- 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, diff --git a/uclient.h b/uclient.h index e3d168a..11a1955 100644 --- a/uclient.h +++ b/uclient.h @@ -54,4 +54,6 @@ int uclient_http_reset_headers(struct uclient *cl, const char *name, const char int uclient_http_set_request_type(struct uclient *cl, const char *type); bool uclient_http_redirect(struct uclient *cl); +int uclient_http_set_ssl_ctx(struct uclient *cl, struct ustream_ssl_ctx *ctx); + #endif