diff options
Diffstat (limited to 'src/supplemental/websocket')
| -rw-r--r-- | src/supplemental/websocket/websocket.c | 18 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket_test.c | 6 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/supplemental/websocket/websocket.c b/src/supplemental/websocket/websocket.c index d78c032b..2ff126e3 100644 --- a/src/supplemental/websocket/websocket.c +++ b/src/supplemental/websocket/websocket.c @@ -193,6 +193,8 @@ static void ws_str_send(void *, nng_aio *); static void ws_str_recv(void *, nng_aio *); static nng_err ws_str_get(void *, const char *, void *, size_t *, nni_type); static nng_err ws_str_peer_cert(void *, nng_tls_cert **); +static nng_err ws_str_self_addr(void *, const nng_sockaddr **); +static nng_err ws_str_peer_addr(void *, const nng_sockaddr **); static void ws_listener_close(void *); static void ws_listener_free(void *); @@ -1402,6 +1404,8 @@ ws_init(nni_ws **wsp) ws->ops.s_recv = ws_str_recv; ws->ops.s_get = ws_str_get; ws->ops.s_peer_cert = ws_str_peer_cert; + ws->ops.s_peer_addr = ws_str_peer_addr; + ws->ops.s_self_addr = ws_str_self_addr; ws->fragsize = 1 << 20; // we won't send a frame larger than this *wsp = ws; @@ -2841,3 +2845,17 @@ ws_str_peer_cert(void *arg, nng_tls_cert **certp) nni_mtx_unlock(&ws->mtx); return (nni_http_conn_peer_cert(ws->http, certp)); } + +static nng_err +ws_str_peer_addr(void *arg, const nng_sockaddr **sap) +{ + nni_ws *ws = arg; + return (nni_http_peer_addr(ws->http, sap)); +} + +static nng_err +ws_str_self_addr(void *arg, const nng_sockaddr **sap) +{ + nni_ws *ws = arg; + return (nni_http_self_addr(ws->http, sap)); +} diff --git a/src/supplemental/websocket/websocket_test.c b/src/supplemental/websocket/websocket_test.c index cb502ef4..66c9617e 100644 --- a/src/supplemental/websocket/websocket_test.c +++ b/src/supplemental/websocket/websocket_test.c @@ -131,6 +131,8 @@ test_websocket_conn_props(void) nng_stream_listener *l = NULL; nng_sockaddr sa1; nng_sockaddr sa2; + const nng_sockaddr *sap1; + const nng_sockaddr *sap2; size_t sz; nng_aio *daio = NULL; nng_aio *laio = NULL; @@ -182,11 +184,15 @@ test_websocket_conn_props(void) NUTS_TRUE(c2 != NULL); // Let's compare the peer addresses + NUTS_PASS(nng_stream_self_addr(c1, &sap1)); + NUTS_PASS(nng_stream_peer_addr(c2, &sap2)); NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_LOCADDR, &sa1)); NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); NUTS_TRUE(sa1.s_family == sa2.s_family); NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); + NUTS_TRUE(memcmp(sap1, &sa1, sizeof(sa1)) == 0); + NUTS_TRUE(memcmp(sap2, &sa2, sizeof(sa2)) == 0); NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); |
