aboutsummaryrefslogtreecommitdiff
path: root/src/supplemental/http/client.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-12-29 14:21:20 -0800
committerGarrett D'Amore <garrett@damore.org>2017-12-30 19:05:41 -0800
commit6a50035b242b972c1d9b659ba63e037a0a8afe71 (patch)
treefe2600235a01e72d1e7bd5fad1d5e2ea62aada2e /src/supplemental/http/client.c
parenta0364185784895c4bc748a6e6453a132d618c96c (diff)
downloadnng-6a50035b242b972c1d9b659ba63e037a0a8afe71.tar.gz
nng-6a50035b242b972c1d9b659ba63e037a0a8afe71.tar.bz2
nng-6a50035b242b972c1d9b659ba63e037a0a8afe71.zip
fixes #166 Websocket TLS mapping
This introduces the wss:// scheme, which is available and works like the ws:// scheme if TLS is enabled in the library. The library modularization is refactored somewhat, to make it easier to use. There is now a single NNG_ENABLE_TLS that enables TLS support under the hood. This also adds a new option for the TLS transport, NNG_OPT_TLS_CONFIG (and a similar one for WSS, NNG_OPT_TLS_WSS_CONFIG) that offer access to the underlying TLS configuration object, which now has a public API to go with it as well. Note that it is also possible to use pure HTTPS using the *private* API, which will be exposed in a public form soon.
Diffstat (limited to 'src/supplemental/http/client.c')
-rw-r--r--src/supplemental/http/client.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/src/supplemental/http/client.c b/src/supplemental/http/client.c
index 8c082a17..4bb517ce 100644
--- a/src/supplemental/http/client.c
+++ b/src/supplemental/http/client.c
@@ -14,6 +14,8 @@
#include <string.h>
#include "core/nng_impl.h"
+#include "supplemental/tls/tls.h"
+
#include "http.h"
struct nni_http_client {
@@ -21,7 +23,7 @@ struct nni_http_client {
nni_list aios;
nni_mtx mtx;
bool closed;
- bool tls;
+ nng_tls_config * tls;
nni_aio * connaio;
nni_plat_tcp_ep *tep;
};
@@ -39,7 +41,6 @@ http_conn_done(void *arg)
nni_aio * aio;
int rv;
nni_plat_tcp_pipe *p;
- nni_http_tran t;
nni_http * http;
nni_mtx_lock(&c->mtx);
@@ -60,17 +61,13 @@ http_conn_done(void *arg)
return;
}
- t.h_data = p;
- t.h_write = (void *) nni_plat_tcp_pipe_send;
- t.h_read = (void *) nni_plat_tcp_pipe_recv;
- t.h_close = (void *) nni_plat_tcp_pipe_close;
- t.h_sock_addr = (void *) nni_plat_tcp_pipe_sockname;
- t.h_peer_addr = (void *) nni_plat_tcp_pipe_peername;
- t.h_fini = (void *) nni_plat_tcp_pipe_fini;
-
- if ((rv = nni_http_init(&http, &t)) != 0) {
+ if (c->tls != NULL) {
+ rv = nni_http_init_tls(&http, c->tls, p);
+ } else {
+ rv = nni_http_init_tcp(&http, p);
+ }
+ if (rv != 0) {
nni_aio_finish_error(aio, rv);
- nni_plat_tcp_pipe_fini(p);
nni_mtx_unlock(&c->mtx);
return;
}
@@ -90,6 +87,11 @@ nni_http_client_fini(nni_http_client *c)
nni_aio_fini(c->connaio);
nni_plat_tcp_ep_fini(c->tep);
nni_mtx_fini(&c->mtx);
+#ifdef NNG_SUPP_TLS
+ if (c->tls != NULL) {
+ nng_tls_config_fini(c->tls);
+ }
+#endif
NNI_FREE_STRUCT(c);
}
@@ -119,6 +121,25 @@ nni_http_client_init(nni_http_client **cp, nng_sockaddr *sa)
return (0);
}
+#ifdef NNG_SUPP_TLS
+int
+nni_http_client_set_tls(nni_http_client *c, nng_tls_config *tls)
+{
+ nng_tls_config *old;
+ nni_mtx_lock(&c->mtx);
+ old = c->tls;
+ c->tls = tls;
+ if (tls != NULL) {
+ nni_tls_config_hold(tls);
+ }
+ nni_mtx_unlock(&c->mtx);
+ if (old != NULL) {
+ nng_tls_config_fini(old);
+ }
+ return (0);
+}
+#endif
+
static void
http_connect_cancel(nni_aio *aio, int rv)
{