diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-01-04 20:11:38 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-01-05 11:20:50 -0800 |
| commit | 224dae56a379aa309fca261d61e7e356b14a536f (patch) | |
| tree | 8194d33029d3595457d424a0f2f57fe2d2139199 /src/core/url.h | |
| parent | 2ea7ae1ae5755ab72833fdea0dcf8e13e4d91d0d (diff) | |
| download | nng-224dae56a379aa309fca261d61e7e356b14a536f.tar.gz nng-224dae56a379aa309fca261d61e7e356b14a536f.tar.bz2 nng-224dae56a379aa309fca261d61e7e356b14a536f.zip | |
Fix some more leaks, add a generic URL parser.
Diffstat (limited to 'src/core/url.h')
| -rw-r--r-- | src/core/url.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/core/url.h b/src/core/url.h new file mode 100644 index 00000000..ee336b1d --- /dev/null +++ b/src/core/url.h @@ -0,0 +1,52 @@ +// +// Copyright 2018 Garrett D'Amore <garrett@damore.org> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +#ifndef CORE_URL_H +#define CORE_URL_H + +typedef struct nni_url nni_url; + +struct nni_url { + char *u_rawurl; // never NULL + char *u_scheme; // never NULL + char *u_userinfo; // will be NULL if not specified + char *u_host; // including colon and port + char *u_hostname; // name only, will be "" if not specified + char *u_port; // port, will be "" if not specified + char *u_path; // path, will be "" if not specified + char *u_query; // without '?', will be NULL if not specified + char *u_fragment; // without '#', will be NULL if not specified +}; + +extern int nni_url_parse(nni_url **, const char *path); +extern void nni_url_free(nni_url *); + +// nni_url_decode decodes the string, converting escaped characters to their +// proper form. The newly allocated string is returned in the first argument +// and may be freed with nni_strfree(). Note that we return EINVAL in the +// presence of an encoding of a control character. (Most especially NUL +// would cause problems for C code, but the other control characters have +// no business inside a URL either.) +extern int nni_url_decode(char **, const char *); + +// nni_url_encode works like nni_url_decode, but does the opposite transform. +// "Reserved" special characters (such as "/" and "@") are encoded, so don't +// use this to encode the entire URL.) This is most useful when encoding +// individual components, such as a value for a query parameter. Note that +// this returns NNG_EINVAL if the input string contains control characters, +// as those have no business inside a URL. +extern int nni_url_encode(char **, const char *); + +// nni_url_encode_ext works like nni_url_encode, but passes the named +// special characters. For example, to URL encode all elements in a path +// while preserving director separators, use the string "/" for specials. +extern int nni_url_encode_ext(char **, const char *, const char *); + +#endif // CORE_URL_H |
