aboutsummaryrefslogtreecommitdiff
path: root/docs/ref
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-11-18 01:17:24 -0800
committerGarrett D'Amore <garrett@damore.org>2024-11-18 08:33:05 -0800
commitca6cfe359fa55a5a7f4b6ae73500ffd98e6ee968 (patch)
treed69a9af2e88c9bf5bc0d565bdd2ea975f2723d52 /docs/ref
parente54e2b1a98abfdb75232a9b3218714ce34c9a34f (diff)
downloadnng-ca6cfe359fa55a5a7f4b6ae73500ffd98e6ee968.tar.gz
nng-ca6cfe359fa55a5a7f4b6ae73500ffd98e6ee968.tar.bz2
nng-ca6cfe359fa55a5a7f4b6ae73500ffd98e6ee968.zip
URL refactor part 1.
This eliminates most (but not all) of the dynamic allocations associated with URL objects. A number of convenience fields on the URL are removed, but we are able to use common buffer for most of the details.
Diffstat (limited to 'docs/ref')
-rw-r--r--docs/ref/api/url.md7
-rw-r--r--docs/ref/migrate/nng1.md13
2 files changed, 14 insertions, 6 deletions
diff --git a/docs/ref/api/url.md b/docs/ref/api/url.md
index a7fb6f35..db9f3be2 100644
--- a/docs/ref/api/url.md
+++ b/docs/ref/api/url.md
@@ -14,13 +14,11 @@ that are not part of the IETF standards.
typedef struct nng_url {
const char *u_scheme;
char *u_userinfo;
- char *u_host;
char *u_hostname;
uint16_t u_port;
char *u_path;
char *u_query;
char *u_fragment;
- char *u_requri;
} nng_url;
```
@@ -29,17 +27,18 @@ typedef struct nng_url {
Applications may access individual fields, but must not free or
alter them, as the underlying memory is managed by the library.
+Additionally applications must not depend on the size of this structure.
+Obtain one using `nng_parse_url`.
+
The fields of an `nng_url` object are as follows:
- `u_scheme`: The URL scheme, such as "http" or "inproc". Always lower case. This will never be `NULL`.
- `u_userinfo`: This username and password if supplied in the URL string. Will be `NULL` when not present.
-- `u_host`: The full host part of the URL, including the port if present (separated by a colon.)
- `u_hostname`: The name of the host, and may be the empty string in some cases.
- `u_port`: The port. May be zero if irrelevant or not specified.
- `u_path`: The path, typically used with HTTP or WebSockets. Will be empty string if not specified.
- `u_query`: The query info (typically following `?` in the URL.) Will be `NULL` if not present.
- `u_fragment`: This is used for specifying an anchor, the part after `#` in a URL. Will be `NULL` if not present.
-- `u_requri`: The full Request-URI. Will be the empty string if not specified.
> [!NOTE]
> Other fields may also be present, but only those documented here are safe for application use.
diff --git a/docs/ref/migrate/nng1.md b/docs/ref/migrate/nng1.md
index b7ddea33..ddad9ff7 100644
--- a/docs/ref/migrate/nng1.md
+++ b/docs/ref/migrate/nng1.md
@@ -160,11 +160,20 @@ A number of the [statistics][statistic] functions take, or return, `const nng_st
of plain `nng_stat *`. The ABI has not changed, but it may be necessary to declare
certain methods variables `const` to avoid warnings about misuse of `const`.
-## Url Structure Members
+## Wildcards Not Valid in URLs
+
+The use of `*` to act as a wild card meaning all local interface addresses
+is removed. The empty string already performs this function, and unlike
+`*` is RFC compliant.
+
+## URL Structure Members
The details of [`nng_url`] have changed as follows:
- `u_port` is no longer a string, but a `uint16_t`
-- `u_scheme` is a const char \*
+- `u_scheme` is a `const char *`
+- `u_requri` is removed - it can be easily formulated from the other fields.
+- `u_host` is removed - use `u_hostname` and `u_port` to construct if needed
+- `u_rawurl` is removed - a "cooked" URL can be obtained from the new [`nng_url_sprintf`] function.
{{#include ../xref.md}}