aboutsummaryrefslogtreecommitdiff
path: root/src/sp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp')
-rw-r--r--src/sp/transport.h18
-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
4 files changed, 114 insertions, 29 deletions
diff --git a/src/sp/transport.h b/src/sp/transport.h
index 76d8d36a..8fd47483 100644
--- a/src/sp/transport.h
+++ b/src/sp/transport.h
@@ -1,5 +1,5 @@
//
-// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2018 Devolutions <info@devolutions.net>
//
@@ -49,6 +49,14 @@ struct nni_sp_dialer_ops {
// d_setopt is used to set or change an option.
int (*d_setopt)(void *, const char *, const void *, size_t, nni_type);
+ // d_get_tls is used to get the TLS configuration to use for dialing.
+ // This may be NULL if the dialer does not support TLS.
+ int (*d_get_tls)(void *, nng_tls_config **);
+
+ // d_set_tls is used to set the TLS configruation to use for the
+ // dialer. This may be NULL if this dialer does not support TLS.
+ int (*d_set_tls)(void *, nng_tls_config *);
+
// d_options is an array of dialer options. The final
// element must have a NULL name. If this member is NULL, then
// no dialer specific options are available.
@@ -85,6 +93,14 @@ struct nni_sp_listener_ops {
// l_setopt is used to set or change an option.
int (*l_setopt)(void *, const char *, const void *, size_t, nni_type);
+ // l_get_tls is used to get the TLS configuration to use for listening.
+ // This may be NULL if the listener does not support TLS.
+ int (*l_get_tls)(void *, nng_tls_config **);
+
+ // l_set_tls is used to set the TLS configruation to use for listening.
+ // This may be NULL if this listener does not support TLS.
+ int (*l_set_tls)(void *, nng_tls_config *);
+
// l_options is an array of listener options. The final
// element must have a NULL name. If this member is NULL, then
// no dialer specific options are available.
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 = {