aboutsummaryrefslogtreecommitdiff
path: root/src/sp/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp/transport')
-rw-r--r--src/sp/transport/dtls/dtls.c15
-rw-r--r--src/sp/transport/inproc/inproc.c55
-rw-r--r--src/sp/transport/ipc/ipc.c34
-rw-r--r--src/sp/transport/socket/sockfd.c35
-rw-r--r--src/sp/transport/tcp/tcp.c34
-rw-r--r--src/sp/transport/tls/tls.c16
-rw-r--r--src/sp/transport/udp/udp.c34
-rw-r--r--src/sp/transport/ws/websocket.c16
8 files changed, 174 insertions, 65 deletions
diff --git a/src/sp/transport/dtls/dtls.c b/src/sp/transport/dtls/dtls.c
index 400709a1..ff78709d 100644
--- a/src/sp/transport/dtls/dtls.c
+++ b/src/sp/transport/dtls/dtls.c
@@ -1077,6 +1077,19 @@ dtls_pipe_peer_cert(void *arg, nng_tls_cert **certp)
return (nni_tls_peer_cert(&p->tls, certp));
}
+static const nng_sockaddr *
+dtls_pipe_peer_addr(void *arg)
+{
+ dtls_pipe *p = arg;
+ return (&p->peer_addr);
+}
+
+static const nng_sockaddr *
+dtls_pipe_self_addr(void *arg)
+{
+ dtls_pipe *p = arg;
+ return (&p->ep->self_sa);
+}
static void
dtls_ep_fini(void *arg)
@@ -1694,6 +1707,8 @@ static nni_sp_pipe_ops dtls_pipe_ops = {
.p_peer = dtls_pipe_peer,
.p_getopt = dtls_pipe_getopt,
.p_peer_cert = dtls_pipe_peer_cert,
+ .p_peer_addr = dtls_pipe_peer_addr,
+ .p_self_addr = dtls_pipe_self_addr,
};
static const nni_option dtls_ep_opts[] = {
diff --git a/src/sp/transport/inproc/inproc.c b/src/sp/transport/inproc/inproc.c
index 22fe619b..cf44145a 100644
--- a/src/sp/transport/inproc/inproc.c
+++ b/src/sp/transport/inproc/inproc.c
@@ -36,6 +36,7 @@ struct inproc_pipe {
uint16_t peer;
uint16_t proto;
nni_pipe *pipe;
+ nng_sockaddr sa;
};
struct inproc_queue {
@@ -247,18 +248,6 @@ inproc_pipe_peer(void *arg)
return (pipe->peer);
}
-static nng_err
-inproc_pipe_get_addr(void *arg, void *buf, size_t *szp, nni_opt_type t)
-{
- inproc_pipe *p = arg;
- nni_sockaddr sa;
-
- memset(&sa, 0, sizeof(sa));
- sa.s_inproc.sa_family = NNG_AF_INPROC;
- nni_strlcpy(sa.s_inproc.sa_name, p->addr, sizeof(sa.s_inproc.sa_name));
- return (nni_copyout_sockaddr(&sa, buf, szp, t));
-}
-
static void
inproc_ep_init(inproc_ep *ep, nni_sock *sock, const nng_url *url)
{
@@ -418,6 +407,13 @@ inproc_accept_clients(inproc_ep *srv)
spipe->send_queue = &pair->queues[1];
spipe->recv_queue = &pair->queues[0];
+ cpipe->sa.s_inproc.sa_family = NNG_AF_INPROC;
+ nni_strlcpy(cpipe->sa.s_inproc.sa_name, cpipe->addr,
+ sizeof(cpipe->sa.s_inproc.sa_name));
+ spipe->sa.s_inproc.sa_family = NNG_AF_INPROC;
+ nni_strlcpy(spipe->sa.s_inproc.sa_name, spipe->addr,
+ sizeof(spipe->sa.s_inproc.sa_name));
+
inproc_conn_finish(caio, 0, cli, cpipe);
inproc_conn_finish(saio, 0, srv, spipe);
}
@@ -563,14 +559,6 @@ inproc_ep_get_addr(void *arg, void *v, size_t *szp, nni_opt_type t)
}
static const nni_option inproc_pipe_options[] = {
- {
- .o_name = NNG_OPT_LOCADDR,
- .o_get = inproc_pipe_get_addr,
- },
- {
- .o_name = NNG_OPT_REMADDR,
- .o_get = inproc_pipe_get_addr,
- },
// terminate list
{
.o_name = NULL,
@@ -584,6 +572,13 @@ inproc_pipe_getopt(
return (nni_getopt(inproc_pipe_options, name, arg, v, szp, t));
}
+static const nng_sockaddr *
+inproc_pipe_addr(void *arg)
+{
+ inproc_pipe *p = arg;
+ return (&p->sa);
+}
+
static size_t
inproc_pipe_size(void)
{
@@ -591,15 +586,17 @@ inproc_pipe_size(void)
}
static nni_sp_pipe_ops inproc_pipe_ops = {
- .p_size = inproc_pipe_size,
- .p_init = inproc_pipe_init,
- .p_fini = inproc_pipe_fini,
- .p_send = inproc_pipe_send,
- .p_recv = inproc_pipe_recv,
- .p_close = inproc_pipe_close,
- .p_stop = inproc_pipe_stop,
- .p_peer = inproc_pipe_peer,
- .p_getopt = inproc_pipe_getopt,
+ .p_size = inproc_pipe_size,
+ .p_init = inproc_pipe_init,
+ .p_fini = inproc_pipe_fini,
+ .p_send = inproc_pipe_send,
+ .p_recv = inproc_pipe_recv,
+ .p_close = inproc_pipe_close,
+ .p_stop = inproc_pipe_stop,
+ .p_peer = inproc_pipe_peer,
+ .p_getopt = inproc_pipe_getopt,
+ .p_peer_addr = inproc_pipe_addr,
+ .p_self_addr = inproc_pipe_addr,
};
static const nni_option inproc_ep_options[] = {
diff --git a/src/sp/transport/ipc/ipc.c b/src/sp/transport/ipc/ipc.c
index a54c7853..c7f8ef7a 100644
--- a/src/sp/transport/ipc/ipc.c
+++ b/src/sp/transport/ipc/ipc.c
@@ -955,6 +955,20 @@ ipc_pipe_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t)
return (nni_stream_get(p->conn, name, buf, szp, t));
}
+static const nng_sockaddr *
+ipc_pipe_peer_addr(void *arg)
+{
+ ipc_pipe *p = arg;
+ return (nng_stream_peer_addr(p->conn));
+}
+
+static const nng_sockaddr *
+ipc_pipe_self_addr(void *arg)
+{
+ ipc_pipe *p = arg;
+ return (nng_stream_self_addr(p->conn));
+}
+
static size_t
ipc_pipe_size(void)
{
@@ -962,15 +976,17 @@ ipc_pipe_size(void)
}
static nni_sp_pipe_ops ipc_tran_pipe_ops = {
- .p_size = ipc_pipe_size,
- .p_init = ipc_pipe_init,
- .p_fini = ipc_pipe_fini,
- .p_stop = ipc_pipe_stop,
- .p_send = ipc_pipe_send,
- .p_recv = ipc_pipe_recv,
- .p_close = ipc_pipe_close,
- .p_peer = ipc_pipe_peer,
- .p_getopt = ipc_pipe_get,
+ .p_size = ipc_pipe_size,
+ .p_init = ipc_pipe_init,
+ .p_fini = ipc_pipe_fini,
+ .p_stop = ipc_pipe_stop,
+ .p_send = ipc_pipe_send,
+ .p_recv = ipc_pipe_recv,
+ .p_close = ipc_pipe_close,
+ .p_peer = ipc_pipe_peer,
+ .p_getopt = ipc_pipe_get,
+ .p_peer_addr = ipc_pipe_peer_addr,
+ .p_self_addr = ipc_pipe_self_addr,
};
static const nni_option ipc_ep_options[] = {
diff --git a/src/sp/transport/socket/sockfd.c b/src/sp/transport/socket/sockfd.c
index 57693088..8f03fad3 100644
--- a/src/sp/transport/socket/sockfd.c
+++ b/src/sp/transport/socket/sockfd.c
@@ -115,6 +115,20 @@ sfd_tran_pipe_stop(void *arg)
nni_mtx_unlock(&ep->mtx);
}
+static const nng_sockaddr *
+sfd_tran_pipe_peer_addr(void *arg)
+{
+ sfd_tran_pipe *p = arg;
+ return (nng_stream_peer_addr(p->conn));
+}
+
+static const nng_sockaddr *
+sfd_tran_pipe_self_addr(void *arg)
+{
+ sfd_tran_pipe *p = arg;
+ return (nng_stream_self_addr(p->conn));
+}
+
static int
sfd_tran_pipe_init(void *arg, nni_pipe *npipe)
{
@@ -814,15 +828,18 @@ sfd_tran_pipe_size(void)
}
static nni_sp_pipe_ops sfd_tran_pipe_ops = {
- .p_size = sfd_tran_pipe_size,
- .p_init = sfd_tran_pipe_init,
- .p_fini = sfd_tran_pipe_fini,
- .p_stop = sfd_tran_pipe_stop,
- .p_send = sfd_tran_pipe_send,
- .p_recv = sfd_tran_pipe_recv,
- .p_close = sfd_tran_pipe_close,
- .p_peer = sfd_tran_pipe_peer,
- .p_getopt = sfd_tran_pipe_getopt,
+ .p_size = sfd_tran_pipe_size,
+ .p_init = sfd_tran_pipe_init,
+ .p_fini = sfd_tran_pipe_fini,
+ .p_stop = sfd_tran_pipe_stop,
+ .p_send = sfd_tran_pipe_send,
+ .p_recv = sfd_tran_pipe_recv,
+ .p_close = sfd_tran_pipe_close,
+ .p_peer = sfd_tran_pipe_peer,
+ .p_getopt = sfd_tran_pipe_getopt,
+ .p_peer_addr = sfd_tran_pipe_peer_addr,
+ .p_self_addr = sfd_tran_pipe_self_addr,
+
};
static const nni_option sfd_tran_ep_opts[] = {
diff --git a/src/sp/transport/tcp/tcp.c b/src/sp/transport/tcp/tcp.c
index 3084d3be..1040e7a9 100644
--- a/src/sp/transport/tcp/tcp.c
+++ b/src/sp/transport/tcp/tcp.c
@@ -566,6 +566,20 @@ tcptran_pipe_peer(void *arg)
return (p->peer);
}
+static const nng_sockaddr *
+tcptran_pipe_peer_addr(void *arg)
+{
+ tcptran_pipe *p = arg;
+ return (nng_stream_peer_addr(p->conn));
+}
+
+static const nng_sockaddr *
+tcptran_pipe_self_addr(void *arg)
+{
+ tcptran_pipe *p = arg;
+ return (nng_stream_self_addr(p->conn));
+}
+
static nng_err
tcptran_pipe_getopt(
void *arg, const char *name, void *buf, size_t *szp, nni_type t)
@@ -970,15 +984,17 @@ tcptran_pipe_size(void)
}
static nni_sp_pipe_ops tcptran_pipe_ops = {
- .p_size = tcptran_pipe_size,
- .p_init = tcptran_pipe_init,
- .p_fini = tcptran_pipe_fini,
- .p_stop = tcptran_pipe_stop,
- .p_send = tcptran_pipe_send,
- .p_recv = tcptran_pipe_recv,
- .p_close = tcptran_pipe_close,
- .p_peer = tcptran_pipe_peer,
- .p_getopt = tcptran_pipe_getopt,
+ .p_size = tcptran_pipe_size,
+ .p_init = tcptran_pipe_init,
+ .p_fini = tcptran_pipe_fini,
+ .p_stop = tcptran_pipe_stop,
+ .p_send = tcptran_pipe_send,
+ .p_recv = tcptran_pipe_recv,
+ .p_close = tcptran_pipe_close,
+ .p_peer = tcptran_pipe_peer,
+ .p_peer_addr = tcptran_pipe_peer_addr,
+ .p_self_addr = tcptran_pipe_self_addr,
+ .p_getopt = tcptran_pipe_getopt,
};
static const nni_option tcptran_ep_opts[] = {
diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c
index ae613278..4814b29f 100644
--- a/src/sp/transport/tls/tls.c
+++ b/src/sp/transport/tls/tls.c
@@ -145,6 +145,20 @@ tlstran_pipe_fini(void *arg)
nni_mtx_fini(&p->mtx);
}
+static const nng_sockaddr *
+tlstran_pipe_peer_addr(void *arg)
+{
+ tlstran_pipe *p = arg;
+ return (nng_stream_peer_addr(p->tls));
+}
+
+static const nng_sockaddr *
+tlstran_pipe_self_addr(void *arg)
+{
+ tlstran_pipe *p = arg;
+ return (nng_stream_self_addr(p->tls));
+}
+
static void
tlstran_ep_match(tlstran_ep *ep)
{
@@ -975,6 +989,8 @@ static nni_sp_pipe_ops tlstran_pipe_ops = {
.p_peer = tlstran_pipe_peer,
.p_getopt = tlstran_pipe_getopt,
.p_peer_cert = tlstran_pipe_peer_cert,
+ .p_peer_addr = tlstran_pipe_peer_addr,
+ .p_self_addr = tlstran_pipe_self_addr,
};
static nni_option tlstran_ep_options[] = {
diff --git a/src/sp/transport/udp/udp.c b/src/sp/transport/udp/udp.c
index 242ca481..7f46a3c9 100644
--- a/src/sp/transport/udp/udp.c
+++ b/src/sp/transport/udp/udp.c
@@ -261,6 +261,20 @@ udp_pipe_start(udp_pipe *p, udp_ep *ep, const nng_sockaddr *sa)
return (udp_add_pipe(ep, p));
}
+static const nng_sockaddr *
+udp_pipe_peer_addr(void *arg)
+{
+ udp_pipe *p = arg;
+ return (&p->peer_addr);
+}
+
+static const nng_sockaddr *
+udp_pipe_self_addr(void *arg)
+{
+ udp_pipe *p = arg;
+ return (&p->ep->self_sa);
+}
+
static void
udp_pipe_fini(void *arg)
{
@@ -1693,15 +1707,17 @@ udp_pipe_size(void)
}
static nni_sp_pipe_ops udp_pipe_ops = {
- .p_size = udp_pipe_size,
- .p_init = udp_pipe_init,
- .p_fini = udp_pipe_fini,
- .p_stop = udp_pipe_stop,
- .p_send = udp_pipe_send,
- .p_recv = udp_pipe_recv,
- .p_close = udp_pipe_close,
- .p_peer = udp_pipe_peer,
- .p_getopt = udp_pipe_getopt,
+ .p_size = udp_pipe_size,
+ .p_init = udp_pipe_init,
+ .p_fini = udp_pipe_fini,
+ .p_stop = udp_pipe_stop,
+ .p_send = udp_pipe_send,
+ .p_recv = udp_pipe_recv,
+ .p_close = udp_pipe_close,
+ .p_peer = udp_pipe_peer,
+ .p_getopt = udp_pipe_getopt,
+ .p_peer_addr = udp_pipe_peer_addr,
+ .p_self_addr = udp_pipe_self_addr,
};
static const nni_option udp_ep_opts[] = {
diff --git a/src/sp/transport/ws/websocket.c b/src/sp/transport/ws/websocket.c
index fe6794c1..dec0ea8e 100644
--- a/src/sp/transport/ws/websocket.c
+++ b/src/sp/transport/ws/websocket.c
@@ -336,6 +336,20 @@ wstran_pipe_peer_cert(void *arg, nng_tls_cert **certp)
return (nng_stream_peer_cert(p->ws, certp));
}
+static const nng_sockaddr *
+wstran_pipe_peer_addr(void *arg)
+{
+ ws_pipe *p = arg;
+ return (nng_stream_peer_addr(p->ws));
+}
+
+static const nng_sockaddr *
+wstran_pipe_self_addr(void *arg)
+{
+ ws_pipe *p = arg;
+ return (nng_stream_self_addr(p->ws));
+}
+
static size_t
wstran_pipe_size(void)
{
@@ -353,6 +367,8 @@ static nni_sp_pipe_ops ws_pipe_ops = {
.p_peer = wstran_pipe_peer,
.p_getopt = wstran_pipe_getopt,
.p_peer_cert = wstran_pipe_peer_cert,
+ .p_peer_addr = wstran_pipe_peer_addr,
+ .p_self_addr = wstran_pipe_self_addr,
};
static void