diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-11-09 15:24:43 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-11-09 16:27:45 -0800 |
| commit | 0058b766b91f08b34dcef3c7bb55b216099f3f66 (patch) | |
| tree | 5ac1fa105d707018cdfa9f5244da5837a8c31601 /src/sp/transport | |
| parent | 150d80c2c62ce3693dbbd0256c16337879c7d825 (diff) | |
| download | nng-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.c | 46 | ||||
| -rw-r--r-- | src/sp/transport/tls/tls_tran_test.c | 33 | ||||
| -rw-r--r-- | src/sp/transport/ws/websocket.c | 46 |
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 = { |
