diff options
| author | Garrett D'Amore <garrett@damore.org> | 2025-10-26 10:54:58 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2025-10-27 07:13:40 -0700 |
| commit | be13c2e8845423cec17af429fc4e16a5d9749e47 (patch) | |
| tree | 82614e403a41aac6581a9a223ef9eba5be557222 | |
| parent | 11c53f3d7f747d14fd69ce98c63d629bc821ef68 (diff) | |
| download | nng-be13c2e8845423cec17af429fc4e16a5d9749e47.tar.gz nng-be13c2e8845423cec17af429fc4e16a5d9749e47.tar.bz2 nng-be13c2e8845423cec17af429fc4e16a5d9749e47.zip | |
Replace nng_pipe_get_addr, nng_stream_get_addr, and the NNG_OPT_REMADDR option.
More direct access methods are provided instead.
This results in much lower friction when using, and is a step on the path
to removing NNG_OPT_LOCADDR as well.
We need to figure a solution for NNG_OPT_LOCADDR for dialers; for
listeners there is little use in it either, and it will be removed.
(Dialers will probably get a new NNG_OPT_BIND_IP option.)
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) { @@ -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); |
