aboutsummaryrefslogtreecommitdiff
path: root/src/sp/transport
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-11-09 15:24:43 -0800
committerGarrett D'Amore <garrett@damore.org>2024-11-09 16:27:45 -0800
commit0058b766b91f08b34dcef3c7bb55b216099f3f66 (patch)
tree5ac1fa105d707018cdfa9f5244da5837a8c31601 /src/sp/transport
parent150d80c2c62ce3693dbbd0256c16337879c7d825 (diff)
downloadnng-0058b766b91f08b34dcef3c7bb55b216099f3f66.tar.gz
nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.tar.bz2
nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.zip
TLS configuration changed to use discret _set_tls and _get_tls functions.
This is simpler, and more reliable than using socket options.
Diffstat (limited to 'src/sp/transport')
-rw-r--r--src/sp/transport/tls/tls.c46
-rw-r--r--src/sp/transport/tls/tls_tran_test.c33
-rw-r--r--src/sp/transport/ws/websocket.c46
3 files changed, 97 insertions, 28 deletions
diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c
index f74209a2..387ce023 100644
--- a/src/sp/transport/tls/tls.c
+++ b/src/sp/transport/tls/tls.c
@@ -1240,6 +1240,34 @@ tlstran_listener_set(
return (rv);
}
+static int
+tlstran_listener_set_tls(void *arg, nng_tls_config *cfg)
+{
+ tlstran_ep *ep = arg;
+ return (nni_stream_listener_set_tls(ep->listener, cfg));
+}
+
+static int
+tlstran_listener_get_tls(void *arg, nng_tls_config **cfgp)
+{
+ tlstran_ep *ep = arg;
+ return (nni_stream_listener_get_tls(ep->listener, cfgp));
+}
+
+static int
+tlstran_dialer_set_tls(void *arg, nng_tls_config *cfg)
+{
+ tlstran_ep *ep = arg;
+ return (nni_stream_dialer_set_tls(ep->dialer, cfg));
+}
+
+static int
+tlstran_dialer_get_tls(void *arg, nng_tls_config **cfgp)
+{
+ tlstran_ep *ep = arg;
+ return (nni_stream_dialer_get_tls(ep->dialer, cfgp));
+}
+
static nni_sp_dialer_ops tlstran_dialer_ops = {
.d_init = tlstran_ep_init_dialer,
.d_fini = tlstran_ep_fini,
@@ -1247,16 +1275,20 @@ static nni_sp_dialer_ops tlstran_dialer_ops = {
.d_close = tlstran_ep_close,
.d_getopt = tlstran_dialer_getopt,
.d_setopt = tlstran_dialer_setopt,
+ .d_get_tls = tlstran_dialer_get_tls,
+ .d_set_tls = tlstran_dialer_set_tls,
};
static nni_sp_listener_ops tlstran_listener_ops = {
- .l_init = tlstran_ep_init_listener,
- .l_fini = tlstran_ep_fini,
- .l_bind = tlstran_ep_bind,
- .l_accept = tlstran_ep_accept,
- .l_close = tlstran_ep_close,
- .l_getopt = tlstran_listener_get,
- .l_setopt = tlstran_listener_set,
+ .l_init = tlstran_ep_init_listener,
+ .l_fini = tlstran_ep_fini,
+ .l_bind = tlstran_ep_bind,
+ .l_accept = tlstran_ep_accept,
+ .l_close = tlstran_ep_close,
+ .l_getopt = tlstran_listener_get,
+ .l_setopt = tlstran_listener_set,
+ .l_set_tls = tlstran_listener_set_tls,
+ .l_get_tls = tlstran_listener_get_tls,
};
static nni_sp_tran tls_tran = {
diff --git a/src/sp/transport/tls/tls_tran_test.c b/src/sp/transport/tls/tls_tran_test.c
index f186c3d3..67198363 100644
--- a/src/sp/transport/tls/tls_tran_test.c
+++ b/src/sp/transport/tls/tls_tran_test.c
@@ -71,6 +71,7 @@ test_tls_wild_card_bind(void)
uint16_t port;
nng_tls_config *cc;
nng_tls_config *sc;
+ nng_tls_config *other;
port = nuts_next_port();
@@ -81,11 +82,15 @@ test_tls_wild_card_bind(void)
NUTS_OPEN(s2);
(void) snprintf(addr, sizeof(addr), "tls+tcp4://*:%u", port);
NUTS_PASS(nng_listener_create(&l, s1, addr));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, sc));
+ NUTS_PASS(nng_listener_set_tls(l, sc));
+ NUTS_PASS(nng_listener_get_tls(l, &other));
+ NUTS_TRUE(sc == other);
NUTS_PASS(nng_listener_start(l, 0));
(void) snprintf(addr, sizeof(addr), "tls+tcp://127.0.0.1:%u", port);
NUTS_PASS(nng_dialer_create(&d, s2, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, cc));
+ NUTS_PASS(nng_dialer_set_tls(d, cc));
+ NUTS_PASS(nng_dialer_get_tls(d, &other));
+ NUTS_TRUE(cc == other);
NUTS_PASS(nng_dialer_start(d, 0));
NUTS_CLOSE(s2);
NUTS_CLOSE(s1);
@@ -109,7 +114,7 @@ test_tls_port_zero_bind(void)
NUTS_OPEN(s1);
NUTS_OPEN(s2);
NUTS_PASS(nng_listener_create(&l, s1, "tls+tcp://127.0.0.1:0"));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1));
+ NUTS_PASS(nng_listener_set_tls(l, c1));
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_string(l, NNG_OPT_URL, &addr));
NUTS_TRUE(memcmp(addr, "tls+tcp://", 6) == 0);
@@ -118,7 +123,7 @@ test_tls_port_zero_bind(void)
NUTS_TRUE(sa.s_in.sa_port != 0);
NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create(&d, s2, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2));
+ NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
nng_strfree(addr);
NUTS_CLOSE(s2);
@@ -146,12 +151,12 @@ test_tls_local_address_connect(void)
port = nuts_next_port();
(void) snprintf(addr, sizeof(addr), "tls+tcp://127.0.0.1:%u", port);
NUTS_PASS(nng_listener_create(&l, s1, addr));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1));
+ NUTS_PASS(nng_listener_set_tls(l, c1));
NUTS_PASS(nng_listener_start(l, 0));
(void) snprintf(
addr, sizeof(addr), "tls+tcp://127.0.0.1;127.0.0.1:%u", port);
NUTS_PASS(nng_dialer_create(&d, s2, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2));
+ NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
NUTS_CLOSE(s2);
NUTS_CLOSE(s1);
@@ -195,7 +200,7 @@ test_tls_no_delay_option(void)
NUTS_OPEN(s);
NUTS_PASS(nng_dialer_create(&d, s, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, dc));
+ NUTS_PASS(nng_dialer_set_tls(d, dc));
NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v));
NUTS_TRUE(v);
NUTS_PASS(nng_dialer_set_bool(d, NNG_OPT_TCP_NODELAY, false));
@@ -207,7 +212,7 @@ test_tls_no_delay_option(void)
NUTS_FAIL(nng_dialer_set_int(d, NNG_OPT_TCP_NODELAY, x), NNG_EBADTYPE);
NUTS_PASS(nng_listener_create(&l, s, addr));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, lc));
+ NUTS_PASS(nng_listener_set_tls(l, lc));
NUTS_PASS(nng_listener_get_bool(l, NNG_OPT_TCP_NODELAY, &v));
NUTS_TRUE(v == true);
x = 0;
@@ -238,7 +243,7 @@ test_tls_keep_alive_option(void)
NUTS_ADDR(addr, "tls+tcp");
NUTS_OPEN(s);
NUTS_PASS(nng_dialer_create(&d, s, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, dc));
+ NUTS_PASS(nng_dialer_set_tls(d, dc));
NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v));
NUTS_TRUE(v == false);
NUTS_PASS(nng_dialer_set_bool(d, NNG_OPT_TCP_KEEPALIVE, true));
@@ -251,7 +256,7 @@ test_tls_keep_alive_option(void)
nng_dialer_set_int(d, NNG_OPT_TCP_KEEPALIVE, x), NNG_EBADTYPE);
NUTS_PASS(nng_listener_create(&l, s, addr));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, lc));
+ NUTS_PASS(nng_listener_set_tls(l, lc));
NUTS_PASS(nng_listener_get_bool(l, NNG_OPT_TCP_KEEPALIVE, &v));
NUTS_TRUE(v == false);
x = 1;
@@ -287,7 +292,7 @@ test_tls_recv_max(void)
NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100));
NUTS_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200));
NUTS_PASS(nng_listener_create(&l, s0, addr));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c0));
+ NUTS_PASS(nng_listener_set_tls(l, c0));
NUTS_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz));
NUTS_TRUE(sz == 200);
NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100));
@@ -295,7 +300,7 @@ test_tls_recv_max(void)
NUTS_OPEN(s1);
NUTS_PASS(nng_dialer_create(&d, s1, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c1));
+ NUTS_PASS(nng_dialer_set_tls(d, c1));
NUTS_PASS(nng_dialer_start(d, 0));
NUTS_PASS(nng_send(s1, msg, 95, 0));
NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100));
@@ -335,12 +340,12 @@ test_tls_psk(void)
NUTS_OPEN(s0);
NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100));
NUTS_PASS(nng_listener_create(&l, s0, addr));
- NUTS_PASS(nng_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c0));
+ NUTS_PASS(nng_listener_set_tls(l, c0));
NUTS_PASS(nng_listener_start(l, 0));
NUTS_OPEN(s1);
NUTS_PASS(nng_dialer_create(&d, s1, addr));
- NUTS_PASS(nng_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c1));
+ NUTS_PASS(nng_dialer_set_tls(d, c1));
NUTS_PASS(nng_dialer_start(d, 0));
NUTS_PASS(nng_send(s1, msg, 95, 0));
NUTS_PASS(nng_recv(s0, buf, &sz, 0));
diff --git a/src/sp/transport/ws/websocket.c b/src/sp/transport/ws/websocket.c
index c749e789..3bfd9f31 100644
--- a/src/sp/transport/ws/websocket.c
+++ b/src/sp/transport/ws/websocket.c
@@ -597,6 +597,20 @@ wstran_dialer_setopt(
}
static int
+wstran_dialer_get_tls(void *arg, nng_tls_config **tls)
+{
+ ws_dialer *d = arg;
+ return (nni_stream_dialer_get_tls(d->dialer, tls));
+}
+
+static int
+wstran_dialer_set_tls(void *arg, nng_tls_config *tls)
+{
+ ws_dialer *d = arg;
+ return (nni_stream_dialer_set_tls(d->dialer, tls));
+}
+
+static int
wstran_listener_get(
void *arg, const char *name, void *buf, size_t *szp, nni_type t)
{
@@ -624,6 +638,20 @@ wstran_listener_set(
return (rv);
}
+static int
+wstran_listener_get_tls(void *arg, nng_tls_config **tls)
+{
+ ws_listener *l = arg;
+ return (nni_stream_listener_get_tls(l->listener, tls));
+}
+
+static int
+wstran_listener_set_tls(void *arg, nng_tls_config *tls)
+{
+ ws_listener *l = arg;
+ return (nni_stream_listener_set_tls(l->listener, tls));
+}
+
static nni_sp_dialer_ops ws_dialer_ops = {
.d_init = wstran_dialer_init,
.d_fini = wstran_dialer_fini,
@@ -631,16 +659,20 @@ static nni_sp_dialer_ops ws_dialer_ops = {
.d_close = wstran_dialer_close,
.d_setopt = wstran_dialer_setopt,
.d_getopt = wstran_dialer_getopt,
+ .d_get_tls = wstran_dialer_get_tls,
+ .d_set_tls = wstran_dialer_set_tls,
};
static nni_sp_listener_ops ws_listener_ops = {
- .l_init = wstran_listener_init,
- .l_fini = wstran_listener_fini,
- .l_bind = ws_listener_bind,
- .l_accept = wstran_listener_accept,
- .l_close = wstran_listener_close,
- .l_setopt = wstran_listener_set,
- .l_getopt = wstran_listener_get,
+ .l_init = wstran_listener_init,
+ .l_fini = wstran_listener_fini,
+ .l_bind = ws_listener_bind,
+ .l_accept = wstran_listener_accept,
+ .l_close = wstran_listener_close,
+ .l_setopt = wstran_listener_set,
+ .l_getopt = wstran_listener_get,
+ .l_get_tls = wstran_listener_get_tls,
+ .l_set_tls = wstran_listener_set_tls,
};
static nni_sp_tran ws_tran = {