aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/man/nng_listener_get.3.adoc6
-rw-r--r--docs/man/nng_options.5.adoc10
-rw-r--r--docs/man/nng_tcp.7.adoc1
-rw-r--r--docs/man/nng_tcp_options.5.adoc1
-rw-r--r--docs/man/nng_tls.7.adoc1
-rw-r--r--docs/man/nng_tls_options.5.adoc1
-rw-r--r--docs/ref/api/pipe.md12
-rw-r--r--docs/ref/api/stream.md5
-rw-r--r--docs/ref/migrate/nng1.md28
-rw-r--r--docs/ref/tran/ipc.md29
-rw-r--r--docs/ref/xref.md6
-rw-r--r--include/nng/http.h6
-rw-r--r--include/nng/nng.h11
-rw-r--r--src/core/listener.c1
-rw-r--r--src/core/pipe.c7
-rw-r--r--src/core/sockfd.c13
-rw-r--r--src/core/stream.c31
-rw-r--r--src/core/url.c2
-rw-r--r--src/nng.c43
-rw-r--r--src/platform/ipc_stream_test.c8
-rw-r--r--src/platform/posix/posix_ipcdial.c12
-rw-r--r--src/platform/posix/posix_ipclisten.c11
-rw-r--r--src/platform/posix/posix_tcplisten.c59
-rw-r--r--src/platform/tcp_stream_test.c39
-rw-r--r--src/platform/windows/win_ipcdial.c12
-rw-r--r--src/platform/windows/win_ipclisten.c11
-rw-r--r--src/platform/windows/win_tcplisten.c4
-rw-r--r--src/sp/pipe_test.c13
-rw-r--r--src/sp/transport/dtls/dtls.c35
-rw-r--r--src/sp/transport/dtls/dtls_tran_test.c20
-rw-r--r--src/sp/transport/inproc/inproc.c4
-rw-r--r--src/sp/transport/ipc/ipc_test.c80
-rw-r--r--src/sp/transport/socket/sockfd_test.c14
-rw-r--r--src/sp/transport/tcp/tcp.c11
-rw-r--r--src/sp/transport/tcp/tcp_test.c23
-rw-r--r--src/sp/transport/tls/tls.c14
-rw-r--r--src/sp/transport/tls/tls_tran_test.c20
-rw-r--r--src/sp/transport/udp/udp.c36
-rw-r--r--src/sp/transport/udp/udp_tran_test.c14
-rw-r--r--src/sp/transport/ws/ws_test.c7
-rw-r--r--src/sp/transport/ws/wss_test.c27
-rw-r--r--src/supplemental/http/http_public.c8
-rw-r--r--src/supplemental/http/http_server_test.c6
-rw-r--r--src/supplemental/tls/tls_stream.c16
-rw-r--r--src/supplemental/websocket/websocket_test.c63
45 files changed, 213 insertions, 568 deletions
diff --git a/docs/man/nng_listener_get.3.adoc b/docs/man/nng_listener_get.3.adoc
index 4c4de6b4..c8ffc185 100644
--- a/docs/man/nng_listener_get.3.adoc
+++ b/docs/man/nng_listener_get.3.adoc
@@ -27,8 +27,6 @@ int nng_listener_get_ms(nng_listener l, const char *opt, nng_duration *durp);
int nng_listener_get_size(nng_listener l, const char *opt, size_t *zp);
-int nng_listener_get_addr(nng_listener l, const char *opt, nng_sockaddr *sap);
-
int nng_listener_get_string(nng_listener l, const char *opt, const char **strp);
int nng_listener_get_uint64(nng_listener l, const char *opt, uint64_t *u64p);
@@ -69,10 +67,6 @@ This function is used to retrieve time xref:nng_duration.5.adoc[durations]
This function is used to retrieve a size into the pointer _zp_,
typically for buffer sizes, message maximum sizes, and similar options.
-`nng_listener_get_addr()`::
-This function is used to retrieve an xref:nng_sockaddr.5.adoc[`nng_sockaddr`]
-into the value referenced by _sap_.
-
`nng_listener_get_string()`::
This function is used to retrieve a string into _strp_.
diff --git a/docs/man/nng_options.5.adoc b/docs/man/nng_options.5.adoc
index 3e67ba9c..0a9a67ad 100644
--- a/docs/man/nng_options.5.adoc
+++ b/docs/man/nng_options.5.adoc
@@ -25,7 +25,6 @@ nng_options - socket, dialer, listener, and pipe options
#define NNG_OPT_RECVTIMEO "recv-timeout"
#define NNG_OPT_SENDTIMEO "send-timeout"
#define NNG_OPT_LOCADDR "local-address"
-#define NNG_OPT_REMADDR "remote-address"
#define NNG_OPT_URL "url"
#define NNG_OPT_MAXTTL "ttl-max"
#define NNG_OPT_RECVMAXSZ "recv-size-max"
@@ -75,7 +74,7 @@ description of the option.
[[NNG_OPT_LOCADDR]]
((`NNG_OPT_LOCADDR`))::
(xref:nng_sockaddr.5.adoc[`nng_sockaddr`])
-This read-only option may be used on listeners, dialers and connected pipes, and
+This read-only option may be used dialers and
represents the local address used for communication.
NOTE: Not all transports support this option, and some transports may support it on
listeners but not dialers.
@@ -153,13 +152,6 @@ are established.)
NOTE: Some transports may have further message size restrictions.
-[[NNG_OPT_REMADDR]]
-((`NNG_OPT_REMADDR`))::
-(xref:nng_sockaddr.5.adoc[`nng_sockaddr`])
-This read-only option may be used on dialers and connected pipes, and
-represents the address of a remote peer.
-Not all transports support this option.
-
[[NNG_OPT_MAXTTL]]
((`NNG_OPT_MAXTTL`))::
(`int`)
diff --git a/docs/man/nng_tcp.7.adoc b/docs/man/nng_tcp.7.adoc
index cf84ac7e..b68b9286 100644
--- a/docs/man/nng_tcp.7.adoc
+++ b/docs/man/nng_tcp.7.adoc
@@ -77,7 +77,6 @@ The following transport options are supported by this transport,
where supported by the underlying platform.
* xref:nng_options.5.adoc#NNG_OPT_LOCADDR[`NNG_OPT_LOCADDR`]
-* xref:nng_options.5.adoc#NNG_OPT_REMADDR[`NNG_OPT_REMADDR`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_KEEPALIVE[`NNG_OPT_TCP_KEEPALIVE`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_NODELAY[`NNG_OPT_TCP_NODELAY`]
* xref:nng_options.5.adoc#NNG_OPT_URL[`NNG_OPT_URL`]
diff --git a/docs/man/nng_tcp_options.5.adoc b/docs/man/nng_tcp_options.5.adoc
index c6063d8a..ed1bf4a7 100644
--- a/docs/man/nng_tcp_options.5.adoc
+++ b/docs/man/nng_tcp_options.5.adoc
@@ -117,7 +117,6 @@ Generally, the following option values are also available for TCP objects,
when appropriate for the context:
* xref:nng_options.5.adoc#NNG_OPT_LOCADDR[`NNG_OPT_LOCADDR`]
-* xref:nng_options.5.adoc#NNG_OPT_REMADDR[`NNG_OPT_REMADDR`]
== SEE ALSO
diff --git a/docs/man/nng_tls.7.adoc b/docs/man/nng_tls.7.adoc
index 1430e537..4a50bf1f 100644
--- a/docs/man/nng_tls.7.adoc
+++ b/docs/man/nng_tls.7.adoc
@@ -102,7 +102,6 @@ The following transport options are available.
Note that setting these must be done before the transport is started.
* xref:nng_options.5.adoc#NNG_OPT_LOCADDR[`NNG_OPT_LOCADDR`]
-* xref:nng_options.5.adoc#NNG_OPT_REMADDR[`NNG_OPT_REMADDR`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_KEEPALIVE[`NNG_OPT_TCP_KEEPALIVE`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_NODELAY[`NNG_OPT_TCP_NODELAY`]
* xref:nng_tls_options.5.adoc#NNG_OPT_TLS_VERIFIED[`NNG_OPT_TLS_VERIFIED_`]
diff --git a/docs/man/nng_tls_options.5.adoc b/docs/man/nng_tls_options.5.adoc
index f7cce90a..fb88784b 100644
--- a/docs/man/nng_tls_options.5.adoc
+++ b/docs/man/nng_tls_options.5.adoc
@@ -71,7 +71,6 @@ Generally, the following option values are also available for TLS objects,
when appropriate for the context:
* xref:nng_options.5.adoc#NNG_OPT_LOCADDR[`NNG_OPT_LOCADDR`]
-* xref:nng_options.5.adoc#NNG_OPT_REMADDR[`NNG_OPT_REMADDR`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_KEEPALIVE[`NNG_OPT_TCP_KEEPALIVE`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_NODELAY[`NNG_OPT_TCP_NODELAY`]
diff --git a/docs/ref/api/pipe.md b/docs/ref/api/pipe.md
index 4fae1d06..97540908 100644
--- a/docs/ref/api/pipe.md
+++ b/docs/ref/api/pipe.md
@@ -84,6 +84,16 @@ either [`nng_dialer_id`] or [`nng_listener_id`] for the returned object will ret
> The socket, or the endpoint, returned by these functions may be in the process of closing,
> and might not be further usable as a result. (Other functions will result in [`NNG_ECLOSED`].)
+## Pipe Socket Addresses
+
+```c
+nng_err nng_pipe_peer_addr(nng_pipe p, nng_sockaddr *sap);
+nng_err nng_pipe_self_addr(nng_pipe p, nng_sockaddr *sap);
+```
+
+The [`nng_sockaddr`] for the local (self) or remote (peer) of the pipe is available using these
+functions. The associated address will be stored in the location pointed to by _sap_.
+
## Pipe Options
```c
@@ -91,7 +101,6 @@ nng_err nng_pipe_get_bool(nng_pipe p, const char *opt, bool *valp);
nng_err nng_pipe_get_int(nng_pipe p, const char *opt, int *valp);
nng_err nng_pipe_get_ms(nng_pipe p, const char *opt, nng_duration *valp);
nng_err nng_pipe_get_size(nng_pipe p, const char *opt, size_t *valp);
-nng_err nng_pipe_get_addr(nng_pipe p, const char *opt, nng_sockaddr *valp);
nng_err nng_pipe_get_string(nng_pipe p, const char *opt, const char **valp);
nng_err nng_pipe_get_strcpy(nng_pipe p, const char *opt, char *val, size_t len);
nng_err nng_pipe_get_strdup(nng_pipe p, const char *opt, char **valp);
@@ -102,7 +111,6 @@ nng_err nng_pipe_get_strlen(nng_pipe p, const char *opt, size_t *lenp);
{{hi:`nng_pipe_get_int`}}
{{hi:`nng_pipe_get_ms`}}
{{hi:`nng_pipe_get_size`}}
-{{hi:`nng_pipe_get_addr`}}
{{hi:`nng_pipe_get_string`}}
{{hi:`nng_pipe_get_strcpy`}}
{{hi:`nng_pipe_get_strdup`}}
diff --git a/docs/ref/api/stream.md b/docs/ref/api/stream.md
index a2f29238..3bed7923 100644
--- a/docs/ref/api/stream.md
+++ b/docs/ref/api/stream.md
@@ -103,7 +103,6 @@ nng_err nng_stream_get_string(nng_stream *s, const char *opt, const char **valp)
{{hi:`nng_stream_get_int`}}
{{hi:`nng_stream_get_ms`}}
{{hi:`nng_stream_get_size`}}
-{{hi:`nng_stream_get_addr`}}
{{hi:`nng_stream_get_string`}}
These functions are used to obtain value of an option named _opt_ from the stream _s_, and store it in the location
referenced by _valp_.
@@ -114,10 +113,6 @@ are available, and which type they may be accessed using.
In the case of `nng_stream_get_string`, the string pointer is only guaranteed to be valid while the
stream exists. Callers should make a copy of the data if required before closing the stream.
-> [!NOTE]:
-> The `nng_stream_get_addr` function is deprecated and will be removed. Use the
-> [`nng_stream_peer_addr`] or [`nng_stream_self_addr`] functions instead.
-
## Stream Factories
```c
diff --git a/docs/ref/migrate/nng1.md b/docs/ref/migrate/nng1.md
index 52b786cc..6e0a1143 100644
--- a/docs/ref/migrate/nng1.md
+++ b/docs/ref/migrate/nng1.md
@@ -173,6 +173,13 @@ address separated by a semicolon. This was provided for legacy libnanomsg
compatibility, and is no longer offered. The correct way to specify a
local address is by setting `NNG_OPT_LOCADDR` on the dialer.
+## Support for Remote Address Options Removed
+
+The `NNG_OPT_REMADDR` option is removed. For streams and pipes, there are
+[`nng_stream_peer_addr`] and [`nng_pipe_peer_addr`] functions. For dialers
+and stream dialers, the application should track the relevant information
+used to configure the listener.
+
## IPC Option Type Changes
The types of [`NNG_OPT_PEER_GID`], [`NNG_OPT_PEER_PID`], [`NNG_OPT_PEER_UID`], and [`NNG_OPT_PEER_ZONEID`]
@@ -247,6 +254,9 @@ such as one ending in a suffix like `_bool` (to access a `bool` typed option).
## Stream Options
+The `nng_stream_get_addr` function is removed.
+Use the new [`nng_stream_peer_addr`] or [`nng_stream_peer_self_addr`] instead.
+
The ability to set options on streams after they have been created is no longer present.
(It turns out that this was not very useful.) All functions `nng_stream_set_xxx` are removed.
For tuning the `NNG_OPT_TCP_NODELAY` or similar properties, set the option on the listener
@@ -277,6 +287,10 @@ before bringing them into the socket itself.
The `NNG_OPT_TCP_BOUND_PORT` port is renamed to just [`NNG_OPT_BOUND_PORT`],
and is available for listeners using transports based on either TCP or UDP.
+The `nng_pipe_get_addr` function has been removed, and replaced with the new
+[`nng_pipe_peer_addr`] and [`nng_pipe_self_addr`] functions. These should be
+easier to use.
+
## Socket Options
The `NNG_OPT_PROTO`, `NNG_OPT_PROTONAME`, `NNG_OPT_PEER`, and `NNG_OPT_PEERNAME` options
@@ -401,4 +415,18 @@ The Layer 2 special ZeroTier transport has been removed.
It is possible to use NNG with ZeroTier using TCP/IP, and a future update
is planned to provided coexistence between ZeroTier & the native stack's TCP/IP using lwIP.
+## Abstract Autobinding No Longer Supported
+
+As we have removed `NNG_OPT_LOCADDR` for listeners, it is no longer possible to meaningfully
+use autobinding with abstract sockets on Linux. This is trivially worked around by using a
+large (say 128-bit) random integer as the name.
+
+This can be done via using of [`nng_random`] combined with `sprintf`, as the following example demonstrates:
+
+```c
+char url[256];
+snprintf(url, sizeof (url), `abstract://my-app-%08x-%08x-%08x-%08x",
+ nni_random(), nni_random(), nni_random(), nni_random());
+```
+
{{#include ../xref.md}}
diff --git a/docs/ref/tran/ipc.md b/docs/ref/tran/ipc.md
index 3d046ee5..e5838d11 100644
--- a/docs/ref/tran/ipc.md
+++ b/docs/ref/tran/ipc.md
@@ -24,7 +24,7 @@ name in the file system where the socket or named pipe should be created.
> [!NOTE]
> When using relative paths on POSIX systems, the address used and returned
-> in properties like [`NNG_OPT_LOCADDR`] will also be relative.
+> in functions such as [`nng_pipe_peer_addr`] will also be relative.
> Consequently, they will only be interpreted the same by processes that have
> the same working directory.
> To ensure maximum portability and safety, absolute paths are recommended
@@ -50,10 +50,11 @@ Abstract sockets use a URI-encoded name after the {{i:`abstract://`}} scheme, wh
in the path, including embedded `NUL` bytes.
For example, the name `"a\0b"` would be represented as `abstract://a%00b`.
-> [!TIP]
-> An empty name may be used with a listener to request "auto bind" be used to select a name.
-> In this case the system will allocate a free name.
-> The name assigned may be retrieved using [`NNG_OPT_LOCADDR`].
+> [!NOTE]
+> _NNG_ no longer supports "auto binding" where the kernel allocates a random unused name.
+> A simple solution to this is to allocate a large random number, such as a random UUID
+> or a concatenation of four random values from [`nng_random`]. The chance of a collision
+> can be made arbitrarily small by appending additional random values.
Abstract names do not include the leading `NUL` byte used in the low-level socket address.
@@ -76,16 +77,14 @@ except for abstract sockets, which use [`nng_sockaddr_abstract`].
The following transport options are supported by this transport,
where supported by the underlying platform.
-| Option | Type | Description |
-| ------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------ |
-| `NNG_OPT_IPC_PERMISSIONS` | `int` | Settable on listeners before they start, this is the UNIX file mode used when creating the socket. |
-| `NNG_OPT_LOCADDR` | [`nng_sockaddr`] | Local socket address, either [`nng_sockaddr_ipc`] or [`nng_sockaddr_abstract`]. |
-| `NNG_OPT_REMADDR` | [`nng_sockaddr`] | Remote socket address, either [`nng_sockaddr_ipc`] or [`nng_sockaddr_abstract`]. |
-| `NNG_OPT_PEER_GID` | `int` | Read only option, returns the group ID of the process at the other end of the socket, if platform supports it. |
-| `NNG_OPT_PEER_PID` | `int` | Read only option, returns the processed ID of the process at the other end of the socket, if platform supports it. |
-| `NNG_OPT_PEER_UID` | `int` | Read only option, returns the user ID of the process at the other end of the socket, if platform supports it. |
-| `NNG_OPT_PEER_ZONEID` | `int` | Read only option, returns the zone ID of the process at the other end of the socket, if platform supports it. |
-| [`NNG_OPT_LISTEN_FD`] | `int` | Write only for listeners before they start, use the named socket for accepting (for use with socket activation). |
+| Option | Type | Description |
+| ------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------ |
+| `NNG_OPT_IPC_PERMISSIONS` | `int` | Settable on listeners before they start, this is the UNIX file mode used when creating the socket. |
+| `NNG_OPT_PEER_GID` | `int` | Read only option, returns the group ID of the process at the other end of the socket, if platform supports it. |
+| `NNG_OPT_PEER_PID` | `int` | Read only option, returns the processed ID of the process at the other end of the socket, if platform supports it. |
+| `NNG_OPT_PEER_UID` | `int` | Read only option, returns the user ID of the process at the other end of the socket, if platform supports it. |
+| `NNG_OPT_PEER_ZONEID` | `int` | Read only option, returns the zone ID of the process at the other end of the socket, if platform supports it. |
+| [`NNG_OPT_LISTEN_FD`] | `int` | Write only for listeners before they start, use the named socket for accepting (for use with socket activation). |
### Other Configuration Parameters
diff --git a/docs/ref/xref.md b/docs/ref/xref.md
index d64840cb..80a3d1b7 100644
--- a/docs/ref/xref.md
+++ b/docs/ref/xref.md
@@ -125,7 +125,6 @@
[`nng_stream_get_int`]: ../api/stream.md#getting-stream-options
[`nng_stream_get_ms`]: ../api/stream.md#getting-stream-options
[`nng_stream_get_size`]: ../api/stream.md#getting-stream-options
-[`nng_stream_get_addr`]: ../api/stream.md#getting-stream-options
[`nng_stream_get_string`]: ../api/stream.md#getting-stream-options
[`nng_stream_dialer`]: ../api/stream.md#stream-factories
[`nng_stream_listener`]: ../api/stream.md#stream-factories
@@ -162,7 +161,6 @@
[`nng_stream_listener_get_int`]: ../api/stream.md#stream-factory-options
[`nng_stream_listener_get_ms`]: ../api/stream.md#stream-factory-options
[`nng_stream_listener_get_size`]: ../api/stream.md#stream-factory-options
-[`nng_stream_listener_get_addr`]: ../api/stream.md#stream-factory-options
[`nng_stream_listener_get_string`]: ../api/stream.md#stream-factory-options
[`nng_stream_listener_set_bool`]: ../api/stream.md#stream-factory-options
[`nng_stream_listener_set_int`]: ../api/stream.md#stream-factory-options
@@ -257,9 +255,10 @@
[`nng_pipe_get_int`]: ../api/pipe.md#pipe-options
[`nng_pipe_get_ms`]: ../api/pipe.md#pipe-options
[`nng_pipe_get_size`]: ../api/pipe.md#pipe-options
-[`nng_pipe_get_addr`]: ../api/pipe.md#pipe-options
[`nng_pipe_get_string`]: ../api/pipe.md#pipe-options
[`nng_pipe_notify`]: ../api/pipe.md#pipe-notifications
+[`nng_pipe_peer_addr`]: ../api/pipe.md#pipe-socket-addresses
+[`nng_pipe_self_addr`]: ../api/pipe.md#pipe-socket-addresses
[`nng_sockaddr`]: ../TODO.md
[`nng_sockaddr_in`]: ../TODO.md
[`nng_sockaddr_in6`]: ../TODO.md
@@ -451,7 +450,6 @@
[`NNG_OPT_RECVBUF`]: ../api/sock.md#NNG_OPT_RECVBUF
[`NNG_OPT_RECVMAXSZ`]: ../api/sock.md#NNG_OPT_RECVMAXSZ
[`NNG_OPT_LOCADDR`]: ../api/sock.md#NNG_OPT_LOCADDR
-[`NNG_OPT_REMADDR`]: ../api/sock.md#NNG_OPT_REMADDR
[`NNG_OPT_PEER_UID`]: ../tran/ipc.md#NNG_OPT_PEER_UID
[`NNG_OPT_PEER_GID`]: ../tran/ipc.md#NNG_OPT_PEER_GID
[`NNG_OPT_PEER_PID`]: ../tran/ipc.md#NNG_OPT_PEER_PID
diff --git a/include/nng/http.h b/include/nng/http.h
index 0c1c39e0..4216f111 100644
--- a/include/nng/http.h
+++ b/include/nng/http.h
@@ -376,10 +376,8 @@ NNG_DECL nng_err nng_http_server_set_tls(nng_http_server *, nng_tls_config *);
// nng_http_server_set_tls function is called, so be careful.
NNG_DECL nng_err nng_http_server_get_tls(nng_http_server *, nng_tls_config **);
-// nng_http_server_get_addr obtains the address with which the server was
-// initialized or returns NNG_EINVAL. Useful for instance when the port has
-// been automatically assigned.
-NNG_DECL nng_err nng_http_server_get_addr(nng_http_server *, nng_sockaddr *);
+// nng_http_server_get_port obtains the TCP the server is listening on.
+NNG_DECL nng_err nng_http_server_get_port(nng_http_server *, int *);
// nng_http_server_set_error_page sets a custom error page (HTML) content
// to be sent for the given error code. This is used when the error is
diff --git a/include/nng/nng.h b/include/nng/nng.h
index 8e5dcd9f..66745dbe 100644
--- a/include/nng/nng.h
+++ b/include/nng/nng.h
@@ -444,8 +444,6 @@ NNG_DECL int nng_listener_set_size(nng_listener, const char *, size_t);
NNG_DECL int nng_listener_set_uint64(nng_listener, const char *, uint64_t);
NNG_DECL int nng_listener_set_string(nng_listener, const char *, const char *);
NNG_DECL int nng_listener_set_ms(nng_listener, const char *, nng_duration);
-NNG_DECL int nng_listener_set_addr(
- nng_listener, const char *, const nng_sockaddr *);
NNG_DECL int nng_listener_set_tls(nng_listener, nng_tls_config *);
NNG_DECL int nng_listener_set_security_descriptor(nng_listener, void *);
NNG_DECL int nng_listener_get_url(nng_listener id, const nng_url **urlp);
@@ -457,7 +455,6 @@ NNG_DECL int nng_listener_get_uint64(nng_listener, const char *, uint64_t *);
NNG_DECL int nng_listener_get_string(
nng_listener, const char *, const char **);
NNG_DECL int nng_listener_get_ms(nng_listener, const char *, nng_duration *);
-NNG_DECL int nng_listener_get_addr(nng_listener, const char *, nng_sockaddr *);
NNG_DECL int nng_listener_get_tls(nng_listener, nng_tls_config **);
// nng_strerror returns a human-readable string associated with the error
@@ -775,7 +772,8 @@ NNG_DECL nng_err nng_pipe_get_string(nng_pipe, const char *, const char **);
NNG_DECL nng_err nng_pipe_get_strdup(nng_pipe, const char *, char **);
NNG_DECL nng_err nng_pipe_get_strcpy(nng_pipe, const char *, char *, size_t);
NNG_DECL nng_err nng_pipe_get_strlen(nng_pipe, const char *, size_t *);
-NNG_DECL nng_err nng_pipe_get_addr(nng_pipe, const char *, nng_sockaddr *);
+NNG_DECL nng_err nng_pipe_peer_addr(nng_pipe, nng_sockaddr *);
+NNG_DECL nng_err nng_pipe_self_addr(nng_pipe, nng_sockaddr *);
NNG_DECL nng_err nng_pipe_peer_cert(nng_pipe, nng_tls_cert **);
NNG_DECL nng_err nng_pipe_close(nng_pipe);
@@ -793,7 +791,6 @@ NNG_DECL nng_listener nng_pipe_listener(nng_pipe);
#define NNG_OPT_RECVTIMEO "recv-timeout"
#define NNG_OPT_SENDTIMEO "send-timeout"
#define NNG_OPT_LOCADDR "local-address"
-#define NNG_OPT_REMADDR "remote-address"
#define NNG_OPT_MAXTTL "ttl-max"
#define NNG_OPT_RECVMAXSZ "recv-size-max"
#define NNG_OPT_RECONNMINT "reconnect-time-min"
@@ -1157,8 +1154,6 @@ NNG_DECL nng_err nng_stream_get_size(nng_stream *, const char *, size_t *);
NNG_DECL nng_err nng_stream_get_uint64(nng_stream *, const char *, uint64_t *);
NNG_DECL nng_err nng_stream_get_string(
nng_stream *, const char *, const char **);
-NNG_DECL nng_err nng_stream_get_addr(
- nng_stream *, const char *, nng_sockaddr *);
NNG_DECL const nng_sockaddr *nng_stream_peer_addr(nng_stream *);
NNG_DECL const nng_sockaddr *nng_stream_self_addr(nng_stream *);
NNG_DECL nng_err nng_stream_peer_cert(nng_stream *, nng_tls_cert **);
@@ -1229,8 +1224,6 @@ NNG_DECL nng_err nng_stream_listener_get_uint64(
nng_stream_listener *, const char *, uint64_t *);
NNG_DECL nng_err nng_stream_listener_get_string(
nng_stream_listener *, const char *, const char **);
-NNG_DECL nng_err nng_stream_listener_get_addr(
- nng_stream_listener *, const char *, nng_sockaddr *);
NNG_DECL nng_err nng_stream_listener_set_bool(
nng_stream_listener *, const char *, bool);
NNG_DECL nng_err nng_stream_listener_set_int(
diff --git a/src/core/listener.c b/src/core/listener.c
index 57e498de..f77b1278 100644
--- a/src/core/listener.c
+++ b/src/core/listener.c
@@ -10,6 +10,7 @@
//
#include "defs.h"
+#include "nng/nng.h"
#include "nng_impl.h"
#include "strs.h"
diff --git a/src/core/pipe.c b/src/core/pipe.c
index 6a3a2e21..120853dc 100644
--- a/src/core/pipe.c
+++ b/src/core/pipe.c
@@ -347,13 +347,6 @@ nni_pipe_getopt(
if (rv != NNG_ENOTSUP) {
return (rv);
}
- if (strcmp(name, NNG_OPT_REMADDR) == 0) {
- return (
- nni_copyout_sockaddr(nni_pipe_peer_addr(p), val, szp, t));
- } else if (strcmp(name, NNG_OPT_LOCADDR) == 0) {
- return (
- nni_copyout_sockaddr(nni_pipe_self_addr(p), val, szp, t));
- }
// Maybe the endpoint knows? The guarantees on pipes ensure that the
// pipe will not outlive its creating endpoint.
diff --git a/src/core/sockfd.c b/src/core/sockfd.c
index 3fa109a4..f184813d 100644
--- a/src/core/sockfd.c
+++ b/src/core/sockfd.c
@@ -173,25 +173,12 @@ sfd_listener_set_fd(void *arg, const void *buf, size_t sz, nni_type t)
return (NNG_OK);
}
-static nng_err
-sfd_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- NNI_ARG_UNUSED(arg);
- nng_sockaddr sa;
- sa.s_family = NNG_AF_UNSPEC;
- return (nni_copyout_sockaddr(&sa, buf, szp, t));
-}
-
static const nni_option sfd_listener_options[] = {
{
.o_name = NNG_OPT_SOCKET_FD,
.o_set = sfd_listener_set_fd,
},
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = sfd_listener_get_addr,
- },
- {
.o_name = NULL,
},
};
diff --git a/src/core/stream.c b/src/core/stream.c
index b1cb5d7b..c06bb1e3 100644
--- a/src/core/stream.c
+++ b/src/core/stream.c
@@ -164,15 +164,6 @@ nng_err
nni_stream_get(
nng_stream *s, const char *nm, void *data, size_t *szp, nni_type t)
{
- // TODO: eventually this needs die
- if ((strcmp(nm, NNG_OPT_REMADDR) == 0) ||
- (strcmp(nm, NNG_OPT_LOCADDR) == 0)) {
- if (t != NNI_TYPE_SOCKADDR) {
- return (NNG_EBADTYPE);
- }
- return (nng_stream_get_addr(s, nm, (nng_sockaddr *) data));
- }
-
return (s->s_get(s, nm, data, szp, t));
}
@@ -397,21 +388,6 @@ nng_stream_get_ms(nng_stream *s, const char *n, nng_duration *v)
return (nni_stream_get(s, n, v, NULL, NNI_TYPE_DURATION));
}
-nng_err
-nng_stream_get_addr(nng_stream *s, const char *n, nng_sockaddr *v)
-{
- const nng_sockaddr *sap;
- if (strcmp(n, NNG_OPT_LOCADDR) == 0) {
- sap = nng_stream_self_addr(s);
- } else if (strcmp(n, NNG_OPT_REMADDR) == 0) {
- sap = nng_stream_peer_addr(s);
- } else {
- return (NNG_ENOTSUP);
- }
- memcpy(v, sap, sizeof(nng_sockaddr));
- return (NNG_OK);
-}
-
const nng_sockaddr *
nng_stream_self_addr(nng_stream *s)
{
@@ -510,13 +486,6 @@ nng_stream_listener_get_ms(
}
nng_err
-nng_stream_listener_get_addr(
- nng_stream_listener *l, const char *n, nng_sockaddr *v)
-{
- return (nni_stream_listener_get(l, n, v, NULL, NNI_TYPE_SOCKADDR));
-}
-
-nng_err
nng_stream_listener_get_tls(nng_stream_listener *l, nng_tls_config **cfgp)
{
return (nni_stream_listener_get_tls(l, cfgp));
diff --git a/src/core/url.c b/src/core/url.c
index b6323ba0..30962769 100644
--- a/src/core/url.c
+++ b/src/core/url.c
@@ -571,7 +571,7 @@ nng_url_sprintf(char *str, size_t size, const nng_url *url)
return (snprintf(str, size, "%s://%s", scheme, url->u_path));
}
- if (url->u_port == nni_url_default_port(scheme)) {
+ if (url->u_port != 0 && url->u_port == nni_url_default_port(scheme)) {
do_port = false;
}
if (strchr(host, ':') != 0) {
diff --git a/src/nng.c b/src/nng.c
index d8cceae0..82b1eb91 100644
--- a/src/nng.c
+++ b/src/nng.c
@@ -9,6 +9,7 @@
//
#include "core/nng_impl.h"
+#include "core/pipe.h"
#include "core/platform.h"
#include "core/socket.h"
@@ -868,12 +869,6 @@ nng_listener_set_string(nng_listener id, const char *n, const char *v)
id, n, v, v == NULL ? 0 : strlen(v) + 1, NNI_TYPE_STRING));
}
-int
-nng_listener_set_addr(nng_listener id, const char *n, const nng_sockaddr *v)
-{
- return (listener_set(id, n, v, sizeof(*v), NNI_TYPE_SOCKADDR));
-}
-
static int
listener_get(
nng_listener lid, const char *name, void *v, size_t *szp, nni_type t)
@@ -920,12 +915,6 @@ nng_listener_get_ms(nng_listener id, const char *n, nng_duration *v)
}
int
-nng_listener_get_addr(nng_listener id, const char *n, nng_sockaddr *v)
-{
- return (listener_get(id, n, v, NULL, NNI_TYPE_SOCKADDR));
-}
-
-int
nng_listener_get_tls(nng_listener id, nng_tls_config **cfgp)
{
int rv;
@@ -1429,12 +1418,6 @@ nng_pipe_get_ms(nng_pipe id, const char *n, nng_duration *v)
}
nng_err
-nng_pipe_get_addr(nng_pipe id, const char *n, nng_sockaddr *v)
-{
- return (pipe_get(id, n, v, NULL, NNI_TYPE_SOCKADDR));
-}
-
-nng_err
nng_pipe_peer_cert(nng_pipe p, nng_tls_cert **certp)
{
nng_err rv;
@@ -1505,6 +1488,30 @@ nng_pipe_id(nng_pipe p)
return (((int) p.id > 0) ? (int) p.id : -1);
}
+nng_err
+nng_pipe_peer_addr(nng_pipe p, nng_sockaddr *sap)
+{
+ nng_err rv;
+ nni_pipe *pipe;
+ if ((rv = nni_pipe_find(&pipe, p.id)) == NNG_OK) {
+ *sap = *(nni_pipe_peer_addr(pipe));
+ nni_pipe_rele(pipe);
+ }
+ return (rv);
+}
+
+nng_err
+nng_pipe_self_addr(nng_pipe p, nng_sockaddr *sap)
+{
+ nng_err rv;
+ nni_pipe *pipe;
+ if ((rv = nni_pipe_find(&pipe, p.id)) == NNG_OK) {
+ *sap = *(nni_pipe_self_addr(pipe));
+ nni_pipe_rele(pipe);
+ }
+ return (rv);
+}
+
// Message handling.
int
nng_msg_alloc(nng_msg **msgp, size_t size)
diff --git a/src/platform/ipc_stream_test.c b/src/platform/ipc_stream_test.c
index fb3bc493..45c78d23 100644
--- a/src/platform/ipc_stream_test.c
+++ b/src/platform/ipc_stream_test.c
@@ -29,9 +29,9 @@ test_ipc_stream(void)
nng_aio *aio1;
nng_aio *aio2;
nng_iov iov;
- nng_sockaddr sa2;
char buf1[5];
char buf2[5];
+ const nng_sockaddr *sap;
NUTS_ADDR(url, "ipc");
NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL));
@@ -85,9 +85,9 @@ test_ipc_stream(void)
NUTS_TRUE(memcmp(buf1, buf2, 5) == 0);
- NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2));
- NUTS_TRUE(sa2.s_ipc.sa_family == NNG_AF_IPC);
- NUTS_MATCH(sa2.s_ipc.sa_path, url + strlen("ipc://"));
+ sap = nng_stream_self_addr(c2);
+ NUTS_TRUE(sap->s_ipc.sa_family == NNG_AF_IPC);
+ NUTS_MATCH(sap->s_ipc.sa_path, url + strlen("ipc://"));
nng_aio_free(aio1);
nng_aio_free(aio2);
diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c
index a570bc4f..d042f45c 100644
--- a/src/platform/posix/posix_ipcdial.c
+++ b/src/platform/posix/posix_ipcdial.c
@@ -249,14 +249,6 @@ error:
nni_aio_finish_error(aio, rv);
}
-static nng_err
-ipc_dialer_get_remaddr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_dialer *d = arg;
-
- return (nni_copyout_sockaddr(&d->sa, buf, szp, t));
-}
-
#ifdef NNG_TEST_LIB
static nng_err
ipc_dialer_set_test_no_connect(
@@ -274,10 +266,6 @@ ipc_dialer_set_test_no_connect(
#endif
static const nni_option ipc_dialer_options[] = {
- {
- .o_name = NNG_OPT_REMADDR,
- .o_get = ipc_dialer_get_remaddr,
- },
#ifdef NNG_TEST_LIB
{
.o_name = "test-no-connect",
diff --git a/src/platform/posix/posix_ipclisten.c b/src/platform/posix/posix_ipclisten.c
index 6254bf81..7587b4c6 100644
--- a/src/platform/posix/posix_ipclisten.c
+++ b/src/platform/posix/posix_ipclisten.c
@@ -217,13 +217,6 @@ ipc_remove_stale(const char *path)
}
static nng_err
-ipc_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_listener *l = arg;
- return (nni_copyout_sockaddr(&l->sa, buf, szp, t));
-}
-
-static nng_err
ipc_listener_set_perms(void *arg, const void *buf, size_t sz, nni_type t)
{
ipc_listener *l = arg;
@@ -308,10 +301,6 @@ ipc_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t)
static const nni_option ipc_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = ipc_listener_get_addr,
- },
- {
.o_name = NNG_OPT_IPC_PERMISSIONS,
.o_set = ipc_listener_set_perms,
},
diff --git a/src/platform/posix/posix_tcplisten.c b/src/platform/posix/posix_tcplisten.c
index b158508c..9ad550b2 100644
--- a/src/platform/posix/posix_tcplisten.c
+++ b/src/platform/posix/posix_tcplisten.c
@@ -307,25 +307,6 @@ tcp_listener_accept(void *arg, nni_aio *aio)
}
static nng_err
-tcp_listener_get_locaddr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- tcp_listener *l = arg;
- nng_sockaddr sa;
- nni_mtx_lock(&l->mtx);
- if (l->started) {
- struct sockaddr_storage ss;
- socklen_t len = sizeof(ss);
- (void) getsockname(
- nni_posix_pfd_fd(&l->pfd), (void *) &ss, &len);
- (void) nni_posix_sockaddr2nn(&sa, &ss, len);
- } else {
- sa.s_family = NNG_AF_UNSPEC;
- }
- nni_mtx_unlock(&l->mtx);
- return (nni_copyout_sockaddr(&sa, buf, szp, t));
-}
-
-static nng_err
tcp_listener_set_nodelay(void *arg, const void *buf, size_t sz, nni_type t)
{
tcp_listener *l = arg;
@@ -384,29 +365,33 @@ tcp_listener_get_keepalive(void *arg, void *buf, size_t *szp, nni_type t)
static nng_err
tcp_listener_get_port(void *arg, void *buf, size_t *szp, nni_type t)
{
- tcp_listener *l = arg;
- nng_sockaddr sa;
- size_t sz;
- int port;
- uint8_t *paddr;
+ tcp_listener *l = arg;
+ int port;
+ struct sockaddr_storage ss;
+ socklen_t len = sizeof(ss);
- sz = sizeof(sa);
- (void) tcp_listener_get_locaddr(l, &sa, &sz, NNI_TYPE_SOCKADDR);
+ nni_mtx_lock(&l->mtx);
+ if (!l->started) {
+ nni_mtx_unlock(&l->mtx);
+ return (NNG_ESTATE);
+ }
+ (void) getsockname(nni_posix_pfd_fd(&l->pfd), (void *) &ss, &len);
+ nni_mtx_unlock(&l->mtx);
- switch (sa.s_family) {
- case NNG_AF_INET:
- paddr = (void *) &sa.s_in.sa_port;
+ switch (ss.ss_family) {
+ case AF_INET:
+ port =
+ htons(((struct sockaddr_in *) ((void *) (&ss)))->sin_port);
break;
-
- case NNG_AF_INET6:
- paddr = (void *) &sa.s_in6.sa_port;
+ case AF_INET6:
+ port = htons(
+ ((struct sockaddr_in6 *) ((void *) (&ss)))->sin6_port);
break;
-
default:
- return (NNG_ESTATE);
+ port = 0;
+ break;
}
- NNI_GET16(paddr, port);
return (nni_copyout_int(port, buf, szp, t));
}
@@ -470,10 +455,6 @@ tcp_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t)
static const nni_option tcp_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = tcp_listener_get_locaddr,
- },
- {
.o_name = NNG_OPT_TCP_NODELAY,
.o_set = tcp_listener_set_nodelay,
.o_get = tcp_listener_get_nodelay,
diff --git a/src/platform/tcp_stream_test.c b/src/platform/tcp_stream_test.c
index a0943e6c..3dffed82 100644
--- a/src/platform/tcp_stream_test.c
+++ b/src/platform/tcp_stream_test.c
@@ -18,10 +18,8 @@
void
test_tcp_stream(void)
{
- nng_stream_dialer *d = NULL;
- nng_stream_listener *l = NULL;
- nng_sockaddr sa;
- uint8_t ip[4];
+ nng_stream_dialer *d = NULL;
+ nng_stream_listener *l = NULL;
nng_aio *daio = NULL;
nng_aio *laio = NULL;
nng_aio *maio = NULL;
@@ -30,10 +28,12 @@ test_tcp_stream(void)
nng_aio *aio1;
nng_aio *aio2;
nng_iov iov;
- nng_sockaddr sa2;
+ const nng_sockaddr *sap1;
+ const nng_sockaddr *sap2;
char buf1[5];
char buf2[5];
bool on;
+ int port;
NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL));
NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL));
@@ -43,18 +43,12 @@ test_tcp_stream(void)
NUTS_PASS(nng_stream_listener_alloc(&l, "tcp://127.0.0.1"));
NUTS_PASS(nng_stream_listener_listen(l));
-
- ip[0] = 127;
- ip[1] = 0;
- ip[2] = 0;
- ip[3] = 1;
- NUTS_PASS(nng_stream_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(memcmp(&sa.s_in.sa_addr, ip, 4) == 0);
+ NUTS_PASS(nng_stream_listener_get_int(l, NNG_OPT_BOUND_PORT, &port));
+ NUTS_TRUE(port > 0);
+ NUTS_TRUE(port <= 0xffff);
char uri[64];
- snprintf(uri, sizeof(uri), "tcp://127.0.0.1:%d",
- nuts_be16(sa.s_in.sa_port));
+ snprintf(uri, sizeof(uri), "tcp://127.0.0.1:%d", port);
NUTS_PASS(nng_stream_dialer_alloc(&d, uri));
nng_stream_dialer_dial(d, daio);
@@ -105,16 +99,13 @@ test_tcp_stream(void)
NUTS_TRUE(memcmp(buf1, buf2, 5) == 0);
- NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2));
- NUTS_TRUE(sa2.s_in.sa_family == NNG_AF_INET);
-
- NUTS_TRUE(sa2.s_in.sa_addr == sa.s_in.sa_addr);
- NUTS_TRUE(sa2.s_in.sa_port == sa.s_in.sa_port);
+ sap1 = nng_stream_self_addr(c2);
+ NUTS_TRUE(sap1->s_in.sa_family == NNG_AF_INET);
- NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa2));
- NUTS_TRUE(sa2.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa2.s_in.sa_addr == sa.s_in.sa_addr);
- NUTS_TRUE(sa2.s_in.sa_port == sa.s_in.sa_port);
+ sap2 = nng_stream_peer_addr(c1);
+ NUTS_TRUE(sap2->s_in.sa_family == NNG_AF_INET);
+ NUTS_TRUE(sap2->s_in.sa_addr == sap1->s_in.sa_addr);
+ NUTS_TRUE(sap2->s_in.sa_port == sap1->s_in.sa_port);
nng_stream_listener_free(l);
nng_stream_dialer_free(d);
diff --git a/src/platform/windows/win_ipcdial.c b/src/platform/windows/win_ipcdial.c
index 04ee5829..c9aabfe4 100644
--- a/src/platform/windows/win_ipcdial.c
+++ b/src/platform/windows/win_ipcdial.c
@@ -205,20 +205,8 @@ ipc_dialer_free(void *arg)
NNI_FREE_STRUCT(d);
}
-static nng_err
-ipc_dialer_get_remaddr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_dialer *d = arg;
-
- return (nni_copyout_sockaddr(&d->sa, buf, szp, t));
-}
-
static const nni_option ipc_dialer_options[] = {
{
- .o_name = NNG_OPT_REMADDR,
- .o_get = ipc_dialer_get_remaddr,
- },
- {
.o_name = NULL,
},
};
diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c
index 07c69507..26c5573e 100644
--- a/src/platform/windows/win_ipclisten.c
+++ b/src/platform/windows/win_ipclisten.c
@@ -158,19 +158,8 @@ ipc_listener_set_sec_desc(void *arg, void *desc)
return (NNG_OK);
}
-static nng_err
-ipc_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_listener *l = arg;
- return ((nni_copyout_sockaddr(&l->sa, buf, szp, t)));
-}
-
static const nni_option ipc_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = ipc_listener_get_addr,
- },
- {
.o_name = NULL,
},
};
diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c
index b32c1fbb..a0d7a249 100644
--- a/src/platform/windows/win_tcplisten.c
+++ b/src/platform/windows/win_tcplisten.c
@@ -503,10 +503,6 @@ tcp_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t)
static const nni_option tcp_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = tcp_listener_get_locaddr,
- },
- {
.o_name = NNG_OPT_TCP_NODELAY,
.o_set = tcp_listener_set_nodelay,
.o_get = tcp_listener_get_nodelay,
diff --git a/src/sp/pipe_test.c b/src/sp/pipe_test.c
index 8f668d8c..532b6219 100644
--- a/src/sp/pipe_test.c
+++ b/src/sp/pipe_test.c
@@ -265,9 +265,22 @@ test_pipe_reject(void)
fini_cases(&push, &pull);
}
+static void
+test_pipe_invalid(void)
+{
+ nng_pipe p;
+ nng_sockaddr sa;
+ p.id = 45; // a random invalid pipe
+
+ NUTS_FAIL(nng_pipe_peer_addr(p, &sa), NNG_ENOENT);
+ NUTS_FAIL(nng_pipe_self_addr(p, &sa), NNG_ENOENT);
+ NUTS_FAIL(nng_pipe_close(p), NNG_ENOENT);
+}
+
NUTS_TESTS = {
{ "pipe msg id", test_pipe_msg_id },
{ "pipe reconnect", test_pipe_reconnect },
{ "pipe reject", test_pipe_reject },
+ { "pipe invalid", test_pipe_invalid },
{ NULL, NULL },
};
diff --git a/src/sp/transport/dtls/dtls.c b/src/sp/transport/dtls/dtls.c
index 5a97af4f..5ac52838 100644
--- a/src/sp/transport/dtls/dtls.c
+++ b/src/sp/transport/dtls/dtls.c
@@ -1035,28 +1035,12 @@ dtls_pipe_get_recvmax(void *arg, void *v, size_t *szp, nni_type t)
return (rv);
}
-static nng_err
-dtls_pipe_get_remaddr(void *arg, void *v, size_t *szp, nni_type t)
-{
- dtls_pipe *p = arg;
- dtls_ep *ep = p->ep;
- nng_err rv;
- nni_mtx_lock(&ep->mtx);
- rv = nni_copyout_sockaddr(&p->peer_addr, v, szp, t);
- nni_mtx_unlock(&ep->mtx);
- return (rv);
-}
-
static nni_option dtls_pipe_options[] = {
{
.o_name = NNG_OPT_RECVMAXSZ,
.o_get = dtls_pipe_get_recvmax,
},
{
- .o_name = NNG_OPT_REMADDR,
- .o_get = dtls_pipe_get_remaddr,
- },
- {
.o_name = NULL,
},
};
@@ -1547,21 +1531,6 @@ dtls_ep_get_locaddr(void *arg, void *v, size_t *szp, nni_opt_type t)
}
static nng_err
-dtls_ep_get_remaddr(void *arg, void *v, size_t *szp, nni_opt_type t)
-{
- dtls_ep *ep = arg;
- nng_err rv;
-
- if (!ep->dialer) {
- return (NNG_ENOTSUP);
- }
- nni_mtx_lock(&ep->mtx);
- rv = nni_copyout_sockaddr(&ep->peer_sa, v, szp, t);
- nni_mtx_unlock(&ep->mtx);
- return (rv);
-}
-
-static nng_err
dtls_ep_get_recvmaxsz(void *arg, void *v, size_t *szp, nni_opt_type t)
{
dtls_ep *ep = arg;
@@ -1722,10 +1691,6 @@ static const nni_option dtls_ep_opts[] = {
.o_get = dtls_ep_get_locaddr,
},
{
- .o_name = NNG_OPT_REMADDR,
- .o_get = dtls_ep_get_remaddr,
- },
- {
.o_name = NNG_OPT_BOUND_PORT,
.o_get = dtls_ep_get_port,
},
diff --git a/src/sp/transport/dtls/dtls_tran_test.c b/src/sp/transport/dtls/dtls_tran_test.c
index a43a01f7..c6dc551c 100644
--- a/src/sp/transport/dtls/dtls_tran_test.c
+++ b/src/sp/transport/dtls/dtls_tran_test.c
@@ -75,7 +75,6 @@ test_dtls_port_zero_bind(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -90,10 +89,6 @@ test_dtls_port_zero_bind(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "dtls");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
// NUTS_PASS(nng_dialer_start(d, NNG_FLAG_NONBLOCK));
@@ -111,7 +106,6 @@ test_dtls_bad_cert_mutual(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -130,10 +124,6 @@ test_dtls_bad_cert_mutual(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "dtls");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
// With DTLS we are not guaranteed to get the connection failure.
@@ -151,7 +141,6 @@ test_dtls_cert_mutual(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -170,10 +159,6 @@ test_dtls_cert_mutual(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "dtls");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
@@ -598,7 +583,6 @@ test_dtls_pipe_details(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
nng_msg *msg;
@@ -619,10 +603,6 @@ test_dtls_pipe_details(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "dtls");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
diff --git a/src/sp/transport/inproc/inproc.c b/src/sp/transport/inproc/inproc.c
index cf44145a..dc95e1e4 100644
--- a/src/sp/transport/inproc/inproc.c
+++ b/src/sp/transport/inproc/inproc.c
@@ -609,10 +609,6 @@ static const nni_option inproc_ep_options[] = {
.o_name = NNG_OPT_LOCADDR,
.o_get = inproc_ep_get_addr,
},
- {
- .o_name = NNG_OPT_REMADDR,
- .o_get = inproc_ep_get_addr,
- },
// terminate list
{
.o_name = NULL,
diff --git a/src/sp/transport/ipc/ipc_test.c b/src/sp/transport/ipc/ipc_test.c
index 30ac6fb3..3131e774 100644
--- a/src/sp/transport/ipc/ipc_test.c
+++ b/src/sp/transport/ipc/ipc_test.c
@@ -69,10 +69,7 @@ test_ipc_dialer_properties(void)
NUTS_PASS(nng_dial(s, addr, &d, NNG_FLAG_NONBLOCK));
// Dialers don't have local addresses.
NUTS_FAIL(nng_dialer_get_addr(d, NNG_OPT_LOCADDR, &sa), NNG_ENOTSUP);
-
NUTS_FAIL(nng_dialer_set_addr(d, NNG_OPT_LOCADDR, &sa), NNG_ENOTSUP);
- NUTS_PASS(nng_dialer_get_addr(d, NNG_OPT_REMADDR, &sa));
- NUTS_TRUE(sa.s_family == NNG_AF_IPC);
z = 8192;
NUTS_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, z));
@@ -126,19 +123,13 @@ test_ipc_listener_properties(void)
{
nng_socket s;
nng_listener l;
- nng_sockaddr sa;
size_t z;
char *addr;
NUTS_ADDR(addr, "ipc");
NUTS_OPEN(s);
NUTS_PASS(nng_listen(s, addr, &l, 0));
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_ipc.sa_family == NNG_AF_IPC);
- NUTS_MATCH(sa.s_ipc.sa_path, addr + strlen("ipc://"));
- NUTS_FAIL(
- nng_listener_set_addr(l, NNG_OPT_LOCADDR, &sa), NNG_EREADONLY);
z = 8192;
NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, z));
z = 0;
@@ -419,8 +410,8 @@ test_abstract_sockets(void)
NUTS_OPEN(s1);
NUTS_OPEN(s2);
NUTS_MARRY_EX(s1, s2, addr, &p1, &p2);
- NUTS_PASS(nng_pipe_get_addr(p1, NNG_OPT_REMADDR, &sa1));
- NUTS_PASS(nng_pipe_get_addr(p2, NNG_OPT_LOCADDR, &sa2));
+ NUTS_PASS(nng_pipe_peer_addr(p1, &sa1));
+ NUTS_PASS(nng_pipe_self_addr(p2, &sa2));
NUTS_TRUE(sa1.s_family == sa2.s_family);
NUTS_TRUE(sa1.s_family == NNG_AF_ABSTRACT);
NUTS_TRUE(sa1.s_abstract.sa_len == strlen(addr) - strlen(prefix));
@@ -435,55 +426,6 @@ test_abstract_sockets(void)
}
void
-test_abstract_auto_bind(void)
-{
-#ifdef NNG_HAVE_ABSTRACT_SOCKETS
- nng_socket s1;
- nng_socket s2;
- char addr[40];
- char name[12];
- nng_sockaddr sa;
- nng_listener l;
- size_t len;
-
- snprintf(addr, sizeof(addr), "abstract://");
-
- NUTS_OPEN(s1);
- NUTS_OPEN(s2);
- NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000));
- NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000));
- NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000));
- NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000));
- NUTS_PASS(nng_listen(s1, addr, &l, 0));
-
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- // Under linux there are either 8 or 5 hex characters.
- NUTS_TRUE(sa.s_family == NNG_AF_ABSTRACT);
- NUTS_TRUE(sa.s_abstract.sa_len < 10);
-
- len = sa.s_abstract.sa_len;
- memcpy(name, sa.s_abstract.sa_name, len);
- name[len] = '\0';
- NUTS_TRUE(strlen(name) == len);
-
- (void) snprintf(addr, sizeof(addr), "abstract://%s", name);
- NUTS_PASS(nng_dial(s2, addr, NULL, 0));
-
- // first send the ping
- NUTS_SEND(s1, "ping");
- NUTS_RECV(s2, "ping");
-
- NUTS_SEND(s2, "pong");
- NUTS_RECV(s1, "pong");
-
- NUTS_CLOSE(s1);
- NUTS_CLOSE(s2);
-#else
- NUTS_SKIP("No abstract sockets.");
-#endif
-}
-
-void
test_abstract_too_long(void)
{
#ifdef NNG_HAVE_ABSTRACT_SOCKETS
@@ -518,7 +460,6 @@ test_abstract_null(void)
char name[40];
char rng[20];
- nng_sockaddr sa;
nng_listener l;
size_t len;
@@ -534,18 +475,6 @@ test_abstract_null(void)
NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000));
NUTS_PASS(nng_listen(s1, addr, &l, 0));
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- // Under linux there are either 8 or 5 hex characters.
- NUTS_TRUE(sa.s_family == NNG_AF_ABSTRACT);
- NUTS_TRUE(sa.s_abstract.sa_len < 32);
- len = sa.s_abstract.sa_len;
- NUTS_TRUE(len == 20);
- NUTS_TRUE(sa.s_abstract.sa_name[0] == 'a');
- NUTS_TRUE(sa.s_abstract.sa_name[1] == '\0');
- NUTS_TRUE(sa.s_abstract.sa_name[2] == 'b');
- NUTS_TRUE(sa.s_abstract.sa_name[3] == '_');
- NUTS_TRUE(memcmp(&sa.s_abstract.sa_name[4], rng, 16) == 0);
-
NUTS_PASS(nng_dial(s2, addr, NULL, 0));
// first send the ping
@@ -599,8 +528,8 @@ test_unix_alias(void)
NUTS_TRUE(nng_msg_len(msg) == 5);
NUTS_MATCH(nng_msg_body(msg), "ping");
p = nng_msg_get_pipe(msg);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa1));
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa2));
+ NUTS_PASS(nng_pipe_peer_addr(p, &sa1));
+ NUTS_PASS(nng_pipe_self_addr(p, &sa2));
NUTS_TRUE(sa1.s_family == sa2.s_family);
NUTS_TRUE(sa1.s_family == NNG_AF_IPC);
NUTS_MATCH(sa1.s_ipc.sa_path, sa2.s_ipc.sa_path);
@@ -704,7 +633,6 @@ TEST_LIST = {
{ "ipc listen duplicate", test_ipc_listen_duplicate },
{ "ipc listen accept cancel", test_ipc_listen_accept_cancel },
{ "ipc abstract sockets", test_abstract_sockets },
- { "ipc abstract auto bind", test_abstract_auto_bind },
{ "ipc abstract name too long", test_abstract_too_long },
{ "ipc abstract embedded null", test_abstract_null },
{ "ipc unix alias", test_unix_alias },
diff --git a/src/sp/transport/socket/sockfd_test.c b/src/sp/transport/socket/sockfd_test.c
index ccd67587..56b77c83 100644
--- a/src/sp/transport/socket/sockfd_test.c
+++ b/src/sp/transport/socket/sockfd_test.c
@@ -350,7 +350,7 @@ test_sockfd_close_peer(void)
}
void
-test_sockfd_listener_sockaddr(void)
+test_sockfd_listener_no_port(void)
{
#ifdef NNG_HAVE_SOCKETPAIR
// this test verifies that closing a socket peer
@@ -358,14 +358,14 @@ test_sockfd_listener_sockaddr(void)
int fds[2];
nng_socket s0;
nng_listener l;
- nng_sockaddr sa;
+ int port;
NUTS_PASS(nng_socket_pair(fds));
NUTS_OPEN(s0);
NUTS_PASS(nng_listen(s0, "socket://", &l, 0));
NUTS_PASS(nng_listener_set_int(l, NNG_OPT_SOCKET_FD, fds[0]));
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_ASSERT(sa.s_family == NNG_AF_UNSPEC);
+ NUTS_FAIL(
+ nng_listener_get_int(l, NNG_OPT_BOUND_PORT, &port), NNG_ENOTSUP);
close(fds[1]);
NUTS_CLOSE(s0);
#else
@@ -401,9 +401,9 @@ test_sockfd_pipe_sockaddr(void)
NUTS_SEND(s0, "something");
NUTS_PASS(nng_recvmsg(s1, &msg, 0));
p = nng_msg_get_pipe(msg);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_LOCADDR, &sa));
+ NUTS_PASS(nng_pipe_self_addr(p, &sa));
NUTS_ASSERT(sa.s_family == NNG_AF_UNSPEC);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa));
+ NUTS_PASS(nng_pipe_peer_addr(p, &sa));
NUTS_ASSERT(sa.s_family == NNG_AF_UNSPEC);
NUTS_CLOSE(s0);
NUTS_CLOSE(s1);
@@ -574,7 +574,7 @@ NUTS_TESTS = {
{ "socket exchange large", test_sfd_large },
{ "socket close pending", test_sockfd_close_pending },
{ "socket close peer", test_sockfd_close_peer },
- { "socket listener address", test_sockfd_listener_sockaddr },
+ { "socket listener no port", test_sockfd_listener_no_port },
{ "socket pipe address", test_sockfd_pipe_sockaddr },
{ "socket pipe peer id", test_sockfd_pipe_peer },
{ "socket listen full", test_sfd_listen_full },
diff --git a/src/sp/transport/tcp/tcp.c b/src/sp/transport/tcp/tcp.c
index 759bc320..3e837d3f 100644
--- a/src/sp/transport/tcp/tcp.c
+++ b/src/sp/transport/tcp/tcp.c
@@ -337,14 +337,9 @@ tcptran_pipe_recv_cb(void *arg)
// Make sure the message payload is not too big. If it is
// the caller will shut down the pipe.
if ((len > p->rcvmax) && (p->rcvmax > 0)) {
- nng_sockaddr_storage ss;
- nng_sockaddr *sa = (nng_sockaddr *) &ss;
- char peername[64] = "unknown";
- if ((rv = nng_stream_get_addr(
- p->conn, NNG_OPT_REMADDR, sa)) == 0) {
- (void) nng_str_sockaddr(
- sa, peername, sizeof(peername));
- }
+ char peername[NNG_MAXADDRSTRLEN];
+ (void) nng_str_sockaddr(nng_stream_peer_addr(p->conn),
+ peername, sizeof(peername));
nng_log_warn("NNG-RCVMAX",
"Oversize message of %lu bytes (> %lu) "
"on socket<%u> pipe<%u> from TCP %s",
diff --git a/src/sp/transport/tcp/tcp_test.c b/src/sp/transport/tcp/tcp_test.c
index 9d3d70f3..5f875e49 100644
--- a/src/sp/transport/tcp/tcp_test.c
+++ b/src/sp/transport/tcp/tcp_test.c
@@ -41,10 +41,10 @@ test_tcp_port_zero_bind(void)
{
nng_socket s1;
nng_socket s2;
- nng_sockaddr sa;
nng_listener l;
const nng_url *u;
char addr[NNG_MAXADDRSTRLEN];
+ int port;
NUTS_OPEN(s1);
NUTS_OPEN(s2);
@@ -53,10 +53,9 @@ test_tcp_port_zero_bind(void)
NUTS_MATCH(nng_url_scheme(u), "tcp");
nng_url_sprintf(addr, sizeof(addr), u);
NUTS_TRUE(memcmp(addr, "tcp://", 6) == 0);
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
+ NUTS_PASS(nng_listener_get_int(l, NNG_OPT_BOUND_PORT, &port));
+ NUTS_TRUE(port > 0);
+ NUTS_TRUE(port <= 0xffff);
NUTS_PASS(nng_dial(s2, addr, NULL, 0));
NUTS_CLOSE(s2);
NUTS_CLOSE(s1);
@@ -205,25 +204,22 @@ static void
check_props_v4(nng_msg *msg)
{
nng_pipe p;
- size_t z;
nng_sockaddr la;
nng_sockaddr ra;
bool b;
p = nng_msg_get_pipe(msg);
NUTS_TRUE(nng_pipe_id(p) > 0);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_LOCADDR, &la));
- NUTS_FAIL(nng_pipe_get_size(p, NNG_OPT_LOCADDR, &z), NNG_EBADTYPE);
+ NUTS_PASS(nng_pipe_self_addr(p, &la));
NUTS_TRUE(la.s_family == NNG_AF_INET);
NUTS_TRUE(la.s_in.sa_port != 0);
NUTS_TRUE(la.s_in.sa_addr == nuts_be32(0x7f000001));
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &ra));
+ NUTS_PASS(nng_pipe_peer_addr(p, &ra));
NUTS_TRUE(ra.s_family == NNG_AF_INET);
NUTS_TRUE(ra.s_in.sa_port != 0);
NUTS_TRUE(ra.s_in.sa_addr == nuts_be32(0x7f000001));
NUTS_TRUE(ra.s_in.sa_port != la.s_in.sa_port);
- NUTS_FAIL(nng_pipe_get_size(p, NNG_OPT_REMADDR, &z), NNG_EBADTYPE);
NUTS_PASS(nng_pipe_get_bool(p, NNG_OPT_TCP_KEEPALIVE, &b));
NUTS_TRUE(b == false); // default
@@ -239,7 +235,6 @@ void
check_props_v6(nng_msg *msg)
{
nng_pipe p;
- size_t z;
nng_sockaddr la;
nng_sockaddr ra;
bool b;
@@ -247,18 +242,16 @@ check_props_v6(nng_msg *msg)
p = nng_msg_get_pipe(msg);
NUTS_TRUE(nng_pipe_id(p) > 0);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_LOCADDR, &la));
- NUTS_FAIL(nng_pipe_get_size(p, NNG_OPT_LOCADDR, &z), NNG_EBADTYPE);
+ NUTS_PASS(nng_pipe_self_addr(p, &la));
NUTS_TRUE(la.s_family == NNG_AF_INET6);
NUTS_TRUE(la.s_in6.sa_port != 0);
NUTS_TRUE(memcmp(la.s_in6.sa_addr, self, 16) == 0);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &ra));
+ NUTS_PASS(nng_pipe_peer_addr(p, &ra));
NUTS_TRUE(ra.s_family == NNG_AF_INET6);
NUTS_TRUE(ra.s_in6.sa_port != 0);
NUTS_TRUE(memcmp(ra.s_in6.sa_addr, self, 16) == 0);
NUTS_TRUE(ra.s_in6.sa_port != la.s_in6.sa_port);
- NUTS_FAIL(nng_pipe_get_size(p, NNG_OPT_REMADDR, &z), NNG_EBADTYPE);
NUTS_PASS(nng_pipe_get_bool(p, NNG_OPT_TCP_KEEPALIVE, &b));
NUTS_TRUE(b == false); // default
diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c
index 5086a942..a4e35b36 100644
--- a/src/sp/transport/tls/tls.c
+++ b/src/sp/transport/tls/tls.c
@@ -13,6 +13,7 @@
#include <string.h>
#include "../../../core/nng_impl.h"
+#include "nng/nng.h"
// TLS over TCP transport. Platform specific TCP operations must be
// supplied as well, and uses the supplemental TLS v1.2 code. It is not
@@ -343,20 +344,15 @@ tlstran_pipe_recv_cb(void *arg)
// Make sure the message payload is not too big. If it is
// the caller will shut down the pipe.
if ((len > p->rcvmax) && (p->rcvmax > 0)) {
- nng_sockaddr_storage ss;
- nng_sockaddr *sa = (nng_sockaddr *) &ss;
- char peername[64] = "unknown";
- if ((rv = nng_stream_get_addr(
- p->tls, NNG_OPT_REMADDR, sa)) == 0) {
- (void) nng_str_sockaddr(
- sa, peername, sizeof(peername));
- }
+ char peer[NNG_MAXADDRSTRLEN];
+
nng_log_warn("NNG-RCVMAX",
"Oversize message of %lu bytes (> %lu) "
"on socket<%u> pipe<%u> from TLS %s",
(unsigned long) len, (unsigned long) p->rcvmax,
nni_pipe_sock_id(p->npipe), nni_pipe_id(p->npipe),
- peername);
+ nng_str_sockaddr(nng_stream_peer_addr(p->tls),
+ peer, sizeof(peer)));
rv = NNG_EMSGSIZE;
goto recv_error;
}
diff --git a/src/sp/transport/tls/tls_tran_test.c b/src/sp/transport/tls/tls_tran_test.c
index e32d4b09..2db0979f 100644
--- a/src/sp/transport/tls/tls_tran_test.c
+++ b/src/sp/transport/tls/tls_tran_test.c
@@ -75,7 +75,6 @@ test_tls_port_zero_bind(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -90,10 +89,6 @@ test_tls_port_zero_bind(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "tls+tcp");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
@@ -109,7 +104,6 @@ test_tls_bad_cert_mutual(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -128,10 +122,6 @@ test_tls_bad_cert_mutual(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "tls+tcp");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
#ifdef NNG_TLS_ENGINE_MBEDTLS
@@ -153,7 +143,6 @@ test_tls_cert_mutual(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -172,10 +161,6 @@ test_tls_cert_mutual(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "tls+tcp");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
@@ -192,7 +177,6 @@ test_tls_pipe_details(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
nng_msg *msg;
@@ -213,10 +197,6 @@ test_tls_pipe_details(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "tls+tcp");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
diff --git a/src/sp/transport/udp/udp.c b/src/sp/transport/udp/udp.c
index 02eb088a..016c222b 100644
--- a/src/sp/transport/udp/udp.c
+++ b/src/sp/transport/udp/udp.c
@@ -993,28 +993,12 @@ udp_pipe_get_recvmax(void *arg, void *v, size_t *szp, nni_type t)
return (rv);
}
-static nng_err
-udp_pipe_get_remaddr(void *arg, void *v, size_t *szp, nni_type t)
-{
- udp_pipe *p = arg;
- udp_ep *ep = p->ep;
- nng_err rv;
- nni_mtx_lock(&ep->mtx);
- rv = nni_copyout_sockaddr(&p->peer_addr, v, szp, t);
- nni_mtx_unlock(&ep->mtx);
- return (rv);
-}
-
static nni_option udp_pipe_options[] = {
{
.o_name = NNG_OPT_RECVMAXSZ,
.o_get = udp_pipe_get_recvmax,
},
{
- .o_name = NNG_OPT_REMADDR,
- .o_get = udp_pipe_get_remaddr,
- },
- {
.o_name = NULL,
},
};
@@ -1547,22 +1531,6 @@ udp_ep_get_locaddr(void *arg, void *v, size_t *szp, nni_opt_type t)
}
static nng_err
-udp_ep_get_remaddr(void *arg, void *v, size_t *szp, nni_opt_type t)
-{
- udp_ep *ep = arg;
- nng_err rv;
- nng_sockaddr sa;
-
- if (!ep->dialer) {
- return (NNG_ENOTSUP);
- }
- sa = ep->peer_sa;
-
- rv = nni_copyout_sockaddr(&sa, v, szp, t);
- return (rv);
-}
-
-static nng_err
udp_ep_get_recvmaxsz(void *arg, void *v, size_t *szp, nni_opt_type t)
{
udp_ep *ep = arg;
@@ -1736,10 +1704,6 @@ static const nni_option udp_ep_opts[] = {
.o_get = udp_ep_get_locaddr,
},
{
- .o_name = NNG_OPT_REMADDR,
- .o_get = udp_ep_get_remaddr,
- },
- {
.o_name = NNG_OPT_BOUND_PORT,
.o_get = udp_ep_get_port,
},
diff --git a/src/sp/transport/udp/udp_tran_test.c b/src/sp/transport/udp/udp_tran_test.c
index 33517246..45203df1 100644
--- a/src/sp/transport/udp/udp_tran_test.c
+++ b/src/sp/transport/udp/udp_tran_test.c
@@ -60,7 +60,6 @@ test_udp_port_zero_bind(void)
{
nng_socket s1;
nng_socket s2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
int port;
@@ -76,10 +75,6 @@ test_udp_port_zero_bind(void)
NUTS_MATCH(nng_url_scheme(u1), "udp");
NUTS_MATCH(nng_url_hostname(u1), "127.0.0.1");
NUTS_MATCH(nng_url_path(u1), "");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port == nuts_be16(nng_url_port(u1)));
- NUTS_TRUE(sa.s_in.sa_addr == nuts_be32(0x7f000001));
NUTS_PASS(nng_dial_url(s2, u1, &d, 0));
NUTS_PASS(nng_dialer_get_url(d, &u2));
NUTS_MATCH(nng_url_scheme(u1), nng_url_scheme(u2));
@@ -465,9 +460,6 @@ test_udp_pipe(void)
size_t sz;
char *addr;
nng_msg *msg;
- nng_pipe p;
- nng_sockaddr sa0;
- nng_sockaddr sa1;
NUTS_ADDR(addr, "udp4");
@@ -478,7 +470,6 @@ test_udp_pipe(void)
NUTS_PASS(nng_listener_get_size(l, NNG_OPT_UDP_COPY_MAX, &sz));
NUTS_TRUE(sz == 100);
NUTS_PASS(nng_listener_start(l, 0));
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa0));
NUTS_OPEN(s1);
NUTS_PASS(nng_dial(s1, addr, NULL, 0));
@@ -488,10 +479,7 @@ test_udp_pipe(void)
NUTS_PASS(nng_msg_alloc(&msg, 0));
NUTS_PASS(nng_sendmsg(s0, msg, 0));
NUTS_PASS(nng_recvmsg(s1, &msg, 0));
- p = nng_msg_get_pipe(msg);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa1));
- NUTS_TRUE(memcmp(&sa0.s_in, &sa1.s_in, sizeof(sa0.s_in)) == 0);
nng_msg_free(msg);
NUTS_CLOSE(s0);
NUTS_CLOSE(s1);
@@ -506,7 +494,6 @@ test_udp_reconnect_dialer(void)
nng_dialer d;
char *addr;
nng_msg *msg;
- nng_sockaddr sa0;
NUTS_LOGGING();
NUTS_ADDR(addr, "udp4");
@@ -519,7 +506,6 @@ test_udp_reconnect_dialer(void)
NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_SENDTIMEO, 2000));
NUTS_PASS(nng_listener_create(&l, s0, addr));
NUTS_PASS(nng_listener_start(l, 0));
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa0));
NUTS_PASS(nng_sub0_open(&s1));
NUTS_PASS(nng_sub0_socket_subscribe(s1, "", 0));
diff --git a/src/sp/transport/ws/ws_test.c b/src/sp/transport/ws/ws_test.c
index 6f41fe99..c69e5845 100644
--- a/src/sp/transport/ws/ws_test.c
+++ b/src/sp/transport/ws/ws_test.c
@@ -205,25 +205,22 @@ static void
check_props_v4(nng_msg *msg)
{
nng_pipe p;
- size_t z;
nng_sockaddr la;
nng_sockaddr ra;
bool b;
p = nng_msg_get_pipe(msg);
NUTS_TRUE(nng_pipe_id(p) > 0);
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_LOCADDR, &la));
- NUTS_FAIL(nng_pipe_get_size(p, NNG_OPT_LOCADDR, &z), NNG_EBADTYPE);
+ NUTS_PASS(nng_pipe_self_addr(p, &la));
NUTS_TRUE(la.s_family == NNG_AF_INET);
NUTS_TRUE(la.s_in.sa_port != 0);
NUTS_TRUE(la.s_in.sa_addr == nuts_be32(0x7f000001));
- NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &ra));
+ NUTS_PASS(nng_pipe_peer_addr(p, &ra));
NUTS_TRUE(ra.s_family == NNG_AF_INET);
NUTS_TRUE(ra.s_in.sa_port != 0);
NUTS_TRUE(ra.s_in.sa_addr == nuts_be32(0x7f000001));
NUTS_TRUE(ra.s_in.sa_port != la.s_in.sa_port);
- NUTS_FAIL(nng_pipe_get_size(p, NNG_OPT_REMADDR, &z), NNG_EBADTYPE);
NUTS_PASS(nng_pipe_get_bool(p, NNG_OPT_TCP_KEEPALIVE, &b));
NUTS_TRUE(b == false); // default
diff --git a/src/sp/transport/ws/wss_test.c b/src/sp/transport/ws/wss_test.c
index 1686090b..0654c809 100644
--- a/src/sp/transport/ws/wss_test.c
+++ b/src/sp/transport/ws/wss_test.c
@@ -75,9 +75,9 @@ test_wss_port_zero_bind(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
+ int port;
const nng_url *url;
c1 = wss_server_config();
@@ -88,11 +88,10 @@ test_wss_port_zero_bind(void)
NUTS_PASS(nng_listener_set_tls(l, c1));
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
+ NUTS_PASS(nng_listener_get_int(l, NNG_OPT_BOUND_PORT, &port));
+ NUTS_TRUE(port > 0);
+ NUTS_TRUE(port <= 65535);
NUTS_MATCH(nng_url_scheme(url), "wss");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
@@ -108,7 +107,6 @@ test_wss_bad_cert_mutual(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -128,10 +126,6 @@ test_wss_bad_cert_mutual(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "wss");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
#ifdef NNG_TLS_ENGINE_MBEDTLS
@@ -153,7 +147,6 @@ test_wss_cert_mutual(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
nng_listener l;
nng_dialer d;
const nng_url *url;
@@ -172,10 +165,6 @@ test_wss_cert_mutual(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "wss");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
@@ -387,7 +376,7 @@ test_wss_pipe_details(void)
nng_socket s1;
nng_socket s2;
nng_tls_config *c1, *c2;
- nng_sockaddr sa;
+ int port;
nng_listener l;
nng_dialer d;
nng_msg *msg;
@@ -408,10 +397,8 @@ test_wss_pipe_details(void)
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_url(l, &url));
NUTS_MATCH(nng_url_scheme(url), "wss");
- NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001));
+ NUTS_PASS(nng_listener_get_int(l, NNG_OPT_BOUND_PORT, &port));
+ NUTS_TRUE(port != 0);
NUTS_PASS(nng_dialer_create_url(&d, s2, url));
NUTS_PASS(nng_dialer_set_tls(d, c2));
NUTS_PASS(nng_dialer_start(d, 0));
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c
index c5ace172..8d91109b 100644
--- a/src/supplemental/http/http_public.c
+++ b/src/supplemental/http/http_public.c
@@ -565,14 +565,12 @@ nng_http_server_get_tls(nng_http_server *srv, nng_tls_config **cfg)
}
nng_err
-nng_http_server_get_addr(nng_http_server *srv, nng_sockaddr *addr)
+nng_http_server_get_port(nng_http_server *srv, int *port)
{
#ifdef NNG_SUPP_HTTP
- size_t size = sizeof(nng_sockaddr);
- if (srv == NULL || addr == NULL)
- return NNG_EINVAL;
+ size_t size = sizeof(*port);
return (nni_http_server_get(
- srv, NNG_OPT_LOCADDR, addr, &size, NNI_TYPE_SOCKADDR));
+ srv, NNG_OPT_BOUND_PORT, port, &size, NNI_TYPE_INT32));
#else
NNI_ARG_UNUSED(srv);
NNI_ARG_UNUSED(addr);
diff --git a/src/supplemental/http/http_server_test.c b/src/supplemental/http/http_server_test.c
index d299cb97..19449b9c 100644
--- a/src/supplemental/http/http_server_test.c
+++ b/src/supplemental/http/http_server_test.c
@@ -190,7 +190,7 @@ httpaddrcheck(nng_http *conn, void *arg, nng_aio *aio)
static void
server_setup(struct server_test *st, nng_http_handler *h)
{
- nng_sockaddr sa;
+ int port;
memset(st, 0, sizeof(*st));
NUTS_PASS(nng_url_parse(&st->url, "http://127.0.0.1:0"));
NUTS_PASS(nng_aio_alloc(&st->aio, NULL, NULL));
@@ -200,8 +200,8 @@ server_setup(struct server_test *st, nng_http_handler *h)
NUTS_PASS(nng_http_server_add_handler(st->s, h));
}
NUTS_PASS(nng_http_server_start(st->s));
- NUTS_PASS(nng_http_server_get_addr(st->s, &sa));
- nng_url_resolve_port(st->url, nng_sockaddr_port(&sa));
+ NUTS_PASS(nng_http_server_get_port(st->s, &port));
+ nng_url_resolve_port(st->url, (uint32_t) port);
nng_url_sprintf(st->urlstr, sizeof(st->urlstr), st->url);
NUTS_PASS(nng_http_client_alloc(&st->cli, st->url));
diff --git a/src/supplemental/tls/tls_stream.c b/src/supplemental/tls/tls_stream.c
index d0a1fabd..b523e583 100644
--- a/src/supplemental/tls/tls_stream.c
+++ b/src/supplemental/tls/tls_stream.c
@@ -111,10 +111,10 @@ tls_stream_recv(void *arg, nng_aio *aio)
static void
tls_stream_conn_cb(void *arg)
{
- tls_stream *ts = arg;
- nng_stream *bio;
- int rv;
- nng_sockaddr sa;
+ tls_stream *ts = arg;
+ nng_stream *bio;
+ int rv;
+ const nng_sockaddr *sa;
if ((rv = nni_aio_result(&ts->conn_aio)) != 0) {
nni_aio_finish_error(ts->user_aio, rv);
@@ -123,13 +123,9 @@ tls_stream_conn_cb(void *arg)
}
bio = nni_aio_get_output(&ts->conn_aio, 0);
- if ((rv = nng_stream_get_addr(bio, NNG_OPT_REMADDR, &sa)) != 0) {
- nni_aio_finish_error(ts->user_aio, rv);
- nni_tls_stream_free(ts);
- return;
- };
+ sa = nng_stream_peer_addr(bio);
- if ((rv = nni_tls_start(&ts->conn, &tls_stream_bio, bio, &sa)) != 0) {
+ if ((rv = nni_tls_start(&ts->conn, &tls_stream_bio, bio, sa)) != 0) {
// NB: if this fails, it *will* have set the bio either way.
// So nni_tls_stream_free will also free the bio.
nni_aio_finish_error(ts->user_aio, rv);
diff --git a/src/supplemental/websocket/websocket_test.c b/src/supplemental/websocket/websocket_test.c
index ffce8019..368ef3ec 100644
--- a/src/supplemental/websocket/websocket_test.c
+++ b/src/supplemental/websocket/websocket_test.c
@@ -18,10 +18,8 @@
void
test_websocket_wildcard(void)
{
- nng_stream_dialer *d = NULL;
- nng_stream_listener *l = NULL;
- nng_sockaddr sa1;
- nng_sockaddr sa2;
+ nng_stream_dialer *d = NULL;
+ nng_stream_listener *l = NULL;
nng_aio *daio = NULL;
nng_aio *laio = NULL;
nng_aio *aio1 = NULL;
@@ -32,20 +30,19 @@ test_websocket_wildcard(void)
char buf1[8];
char buf2[8];
char uri[64];
+ const nng_sockaddr *sap1;
+ const nng_sockaddr *sap2;
+ int port;
NUTS_PASS(nng_stream_listener_alloc(&l, "ws://127.0.0.1:0/test"));
NUTS_PASS(nng_stream_listener_listen(l));
- // Let's get the address we're going to use to dial -- also check
- // that it is correct.
- NUTS_PASS(nng_stream_listener_get_addr(l, NNG_OPT_LOCADDR, &sa1));
- NUTS_TRUE(sa1.s_in.sa_port != 0);
- NUTS_TRUE(sa1.s_family == NNG_AF_INET);
- NUTS_TRUE(nuts_be32(sa1.s_in.sa_addr) == 0x7F000001u);
+ // Let's get the port we're going to use to dial.
+ NUTS_PASS(nng_stream_listener_get_int(l, NNG_OPT_BOUND_PORT, &port));
+ NUTS_TRUE(port != 0);
- (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test",
- nuts_be16(sa1.s_in.sa_port));
+ (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test", port);
NUTS_PASS(nng_stream_dialer_alloc(&d, uri));
NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL));
@@ -71,16 +68,16 @@ test_websocket_wildcard(void)
NUTS_TRUE(c2 != NULL);
// Let's compare the peer addresses
- 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);
+ sap2 = nng_stream_peer_addr(c2);
+ NUTS_TRUE(sap2->s_family == NNG_AF_INET);
+ NUTS_TRUE(nuts_be32(sap2->s_in.sa_addr) == 0x7F000001u);
+ NUTS_TRUE(sap2->s_in.sa_port != 0);
- NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1));
- NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &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);
+ sap1 = nng_stream_peer_addr(c1);
+ sap2 = nng_stream_self_addr(c2);
+ NUTS_TRUE(sap1->s_family == sap2->s_family);
+ NUTS_TRUE(sap1->s_in.sa_addr == sap2->s_in.sa_addr);
+ NUTS_TRUE(sap1->s_in.sa_port == sap2->s_in.sa_port);
// This relies on send completing for for just 5 bytes, and on
// recv doing the same. Technically this isn't/ guaranteed, but
@@ -129,8 +126,6 @@ test_websocket_conn_props(void)
{
nng_stream_dialer *d = NULL;
nng_stream_listener *l = NULL;
- nng_sockaddr sa1;
- nng_sockaddr sa2;
const nng_sockaddr *sap1;
const nng_sockaddr *sap2;
size_t sz;
@@ -186,19 +181,15 @@ test_websocket_conn_props(void)
// Let's compare the peer addresses
sap1 = nng_stream_self_addr(c1);
sap2 = nng_stream_peer_addr(c2);
- 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));
- 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(sap1->s_family == sap2->s_family);
+ NUTS_TRUE(sap1->s_in.sa_addr == sap2->s_in.sa_addr);
+ NUTS_TRUE(sap1->s_in.sa_port == sap2->s_in.sa_port);
+
+ sap1 = nng_stream_peer_addr(c1);
+ sap2 = nng_stream_self_addr(c2);
+ NUTS_TRUE(sap1->s_family == sap2->s_family);
+ NUTS_TRUE(sap1->s_in.sa_addr == sap2->s_in.sa_addr);
+ NUTS_TRUE(sap1->s_in.sa_port == sap2->s_in.sa_port);
NUTS_PASS(nng_stream_get_bool(c1, NNG_OPT_TCP_NODELAY, &on));
NUTS_TRUE(on == true);