| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- /* GLIB - Library of useful routines for C programming
- * Copyright © 2020 Red Hat, Inc.
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, see
- * <http://www.gnu.org/licenses/>.
- */
- #pragma once
- #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
- #error "Only <glib.h> can be included directly."
- #endif
- #include <glib/gtypes.h>
- G_BEGIN_DECLS
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- typedef struct _GUri GUri;
- GLIB_AVAILABLE_IN_2_66
- GUri * g_uri_ref (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- void g_uri_unref (GUri *uri);
- /**
- * GUriFlags:
- * @G_URI_FLAGS_NONE: No flags set.
- * @G_URI_FLAGS_PARSE_RELAXED: Parse the URI more relaxedly than the
- * [RFC 3986](https://tools.ietf.org/html/rfc3986) grammar specifies,
- * fixing up or ignoring common mistakes in URIs coming from external
- * sources. This is also needed for some obscure URI schemes where `;`
- * separates the host from the path. Don’t use this flag unless you need to.
- * @G_URI_FLAGS_HAS_PASSWORD: The userinfo field may contain a password,
- * which will be separated from the username by `:`.
- * @G_URI_FLAGS_HAS_AUTH_PARAMS: The userinfo may contain additional
- * authentication-related parameters, which will be separated from
- * the username and/or password by `;`.
- * @G_URI_FLAGS_NON_DNS: The host component should not be assumed to be a
- * DNS hostname or IP address (for example, for `smb` URIs with NetBIOS
- * hostnames).
- * @G_URI_FLAGS_ENCODED: When parsing a URI, this indicates that `%`-encoded
- * characters in the userinfo, path, query, and fragment fields
- * should not be decoded. (And likewise the host field if
- * %G_URI_FLAGS_NON_DNS is also set.) When building a URI, it indicates
- * that you have already `%`-encoded the components, and so #GUri
- * should not do any encoding itself.
- * @G_URI_FLAGS_ENCODED_QUERY: Same as %G_URI_FLAGS_ENCODED, for the query
- * field only.
- * @G_URI_FLAGS_ENCODED_PATH: Same as %G_URI_FLAGS_ENCODED, for the path only.
- * @G_URI_FLAGS_ENCODED_FRAGMENT: Same as %G_URI_FLAGS_ENCODED, for the
- * fragment only.
- * @G_URI_FLAGS_SCHEME_NORMALIZE: A scheme-based normalization will be applied.
- * For example, when parsing an HTTP URI changing omitted path to `/` and
- * omitted port to `80`; and when building a URI, changing empty path to `/`
- * and default port `80`). This only supports a subset of known schemes. (Since: 2.68)
- *
- * Flags that describe a URI.
- *
- * When parsing a URI, if you need to choose different flags based on
- * the type of URI, you can use g_uri_peek_scheme() on the URI string
- * to check the scheme first, and use that to decide what flags to
- * parse it with.
- *
- * Since: 2.66
- */
- GLIB_AVAILABLE_TYPE_IN_2_66
- typedef enum {
- G_URI_FLAGS_NONE = 0,
- G_URI_FLAGS_PARSE_RELAXED = 1 << 0,
- G_URI_FLAGS_HAS_PASSWORD = 1 << 1,
- G_URI_FLAGS_HAS_AUTH_PARAMS = 1 << 2,
- G_URI_FLAGS_ENCODED = 1 << 3,
- G_URI_FLAGS_NON_DNS = 1 << 4,
- G_URI_FLAGS_ENCODED_QUERY = 1 << 5,
- G_URI_FLAGS_ENCODED_PATH = 1 << 6,
- G_URI_FLAGS_ENCODED_FRAGMENT = 1 << 7,
- G_URI_FLAGS_SCHEME_NORMALIZE GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = 1 << 8,
- } GUriFlags;
- GLIB_AVAILABLE_IN_2_66
- gboolean g_uri_split (const gchar *uri_ref,
- GUriFlags flags,
- gchar **scheme,
- gchar **userinfo,
- gchar **host,
- gint *port,
- gchar **path,
- gchar **query,
- gchar **fragment,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- gboolean g_uri_split_with_user (const gchar *uri_ref,
- GUriFlags flags,
- gchar **scheme,
- gchar **user,
- gchar **password,
- gchar **auth_params,
- gchar **host,
- gint *port,
- gchar **path,
- gchar **query,
- gchar **fragment,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- gboolean g_uri_split_network (const gchar *uri_string,
- GUriFlags flags,
- gchar **scheme,
- gchar **host,
- gint *port,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- gboolean g_uri_is_valid (const gchar *uri_string,
- GUriFlags flags,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- gchar * g_uri_join (GUriFlags flags,
- const gchar *scheme,
- const gchar *userinfo,
- const gchar *host,
- gint port,
- const gchar *path,
- const gchar *query,
- const gchar *fragment);
- GLIB_AVAILABLE_IN_2_66
- gchar * g_uri_join_with_user (GUriFlags flags,
- const gchar *scheme,
- const gchar *user,
- const gchar *password,
- const gchar *auth_params,
- const gchar *host,
- gint port,
- const gchar *path,
- const gchar *query,
- const gchar *fragment);
- GLIB_AVAILABLE_IN_2_66
- GUri * g_uri_parse (const gchar *uri_string,
- GUriFlags flags,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- GUri * g_uri_parse_relative (GUri *base_uri,
- const gchar *uri_ref,
- GUriFlags flags,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- gchar * g_uri_resolve_relative (const gchar *base_uri_string,
- const gchar *uri_ref,
- GUriFlags flags,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- GUri * g_uri_build (GUriFlags flags,
- const gchar *scheme,
- const gchar *userinfo,
- const gchar *host,
- gint port,
- const gchar *path,
- const gchar *query,
- const gchar *fragment);
- GLIB_AVAILABLE_IN_2_66
- GUri * g_uri_build_with_user (GUriFlags flags,
- const gchar *scheme,
- const gchar *user,
- const gchar *password,
- const gchar *auth_params,
- const gchar *host,
- gint port,
- const gchar *path,
- const gchar *query,
- const gchar *fragment);
- /**
- * GUriHideFlags:
- * @G_URI_HIDE_NONE: No flags set.
- * @G_URI_HIDE_USERINFO: Hide the userinfo.
- * @G_URI_HIDE_PASSWORD: Hide the password.
- * @G_URI_HIDE_AUTH_PARAMS: Hide the auth_params.
- * @G_URI_HIDE_QUERY: Hide the query.
- * @G_URI_HIDE_FRAGMENT: Hide the fragment.
- *
- * Flags describing what parts of the URI to hide in
- * g_uri_to_string_partial(). Note that %G_URI_HIDE_PASSWORD and
- * %G_URI_HIDE_AUTH_PARAMS will only work if the #GUri was parsed with
- * the corresponding flags.
- *
- * Since: 2.66
- */
- GLIB_AVAILABLE_TYPE_IN_2_66
- typedef enum {
- G_URI_HIDE_NONE = 0,
- G_URI_HIDE_USERINFO = 1 << 0,
- G_URI_HIDE_PASSWORD = 1 << 1,
- G_URI_HIDE_AUTH_PARAMS = 1 << 2,
- G_URI_HIDE_QUERY = 1 << 3,
- G_URI_HIDE_FRAGMENT = 1 << 4,
- } GUriHideFlags;
- GLIB_AVAILABLE_IN_2_66
- char * g_uri_to_string (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- char * g_uri_to_string_partial (GUri *uri,
- GUriHideFlags flags);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_scheme (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_userinfo (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_user (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_password (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_auth_params (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_host (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- gint g_uri_get_port (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_path (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_query (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- const gchar *g_uri_get_fragment (GUri *uri);
- GLIB_AVAILABLE_IN_2_66
- GUriFlags g_uri_get_flags (GUri *uri);
- /**
- * GUriParamsFlags:
- * @G_URI_PARAMS_NONE: No flags set.
- * @G_URI_PARAMS_CASE_INSENSITIVE: Parameter names are case insensitive.
- * @G_URI_PARAMS_WWW_FORM: Replace `+` with space character. Only useful for
- * URLs on the web, using the `https` or `http` schemas.
- * @G_URI_PARAMS_PARSE_RELAXED: See %G_URI_FLAGS_PARSE_RELAXED.
- *
- * Flags modifying the way parameters are handled by g_uri_parse_params() and
- * #GUriParamsIter.
- *
- * Since: 2.66
- */
- GLIB_AVAILABLE_TYPE_IN_2_66
- typedef enum {
- G_URI_PARAMS_NONE = 0,
- G_URI_PARAMS_CASE_INSENSITIVE = 1 << 0,
- G_URI_PARAMS_WWW_FORM = 1 << 1,
- G_URI_PARAMS_PARSE_RELAXED = 1 << 2,
- } GUriParamsFlags;
- GLIB_AVAILABLE_IN_2_66
- GHashTable *g_uri_parse_params (const gchar *params,
- gssize length,
- const gchar *separators,
- GUriParamsFlags flags,
- GError **error);
- typedef struct _GUriParamsIter GUriParamsIter;
- struct _GUriParamsIter
- {
- /*< private >*/
- gint dummy0;
- gpointer dummy1;
- gpointer dummy2;
- guint8 dummy3[256];
- };
- GLIB_AVAILABLE_IN_2_66
- void g_uri_params_iter_init (GUriParamsIter *iter,
- const gchar *params,
- gssize length,
- const gchar *separators,
- GUriParamsFlags flags);
- GLIB_AVAILABLE_IN_2_66
- gboolean g_uri_params_iter_next (GUriParamsIter *iter,
- gchar **attribute,
- gchar **value,
- GError **error);
- /**
- * G_URI_ERROR:
- *
- * Error domain for URI methods. Errors in this domain will be from
- * the #GUriError enumeration. See #GError for information on error
- * domains.
- *
- * Since: 2.66
- */
- #define G_URI_ERROR (g_uri_error_quark ()) GLIB_AVAILABLE_MACRO_IN_2_66
- GLIB_AVAILABLE_IN_2_66
- GQuark g_uri_error_quark (void);
- /**
- * GUriError:
- * @G_URI_ERROR_FAILED: Generic error if no more specific error is available.
- * See the error message for details.
- * @G_URI_ERROR_BAD_SCHEME: The scheme of a URI could not be parsed.
- * @G_URI_ERROR_BAD_USER: The user/userinfo of a URI could not be parsed.
- * @G_URI_ERROR_BAD_PASSWORD: The password of a URI could not be parsed.
- * @G_URI_ERROR_BAD_AUTH_PARAMS: The authentication parameters of a URI could not be parsed.
- * @G_URI_ERROR_BAD_HOST: The host of a URI could not be parsed.
- * @G_URI_ERROR_BAD_PORT: The port of a URI could not be parsed.
- * @G_URI_ERROR_BAD_PATH: The path of a URI could not be parsed.
- * @G_URI_ERROR_BAD_QUERY: The query of a URI could not be parsed.
- * @G_URI_ERROR_BAD_FRAGMENT: The fragment of a URI could not be parsed.
- *
- * Error codes returned by #GUri methods.
- *
- * Since: 2.66
- */
- typedef enum {
- G_URI_ERROR_FAILED,
- G_URI_ERROR_BAD_SCHEME,
- G_URI_ERROR_BAD_USER,
- G_URI_ERROR_BAD_PASSWORD,
- G_URI_ERROR_BAD_AUTH_PARAMS,
- G_URI_ERROR_BAD_HOST,
- G_URI_ERROR_BAD_PORT,
- G_URI_ERROR_BAD_PATH,
- G_URI_ERROR_BAD_QUERY,
- G_URI_ERROR_BAD_FRAGMENT,
- } GUriError;
- /**
- * G_URI_RESERVED_CHARS_GENERIC_DELIMITERS:
- *
- * Generic delimiters characters as defined in
- * [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `:/?#[]@`.
- *
- * Since: 2.16
- **/
- #define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@"
- /**
- * G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS:
- *
- * Subcomponent delimiter characters as defined in
- * [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=`.
- *
- * Since: 2.16
- **/
- #define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
- /**
- * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT:
- *
- * Allowed characters in path elements. Includes `!$&'()*+,;=:@`.
- *
- * Since: 2.16
- **/
- #define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@"
- /**
- * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH:
- *
- * Allowed characters in a path. Includes `!$&'()*+,;=:@/`.
- *
- * Since: 2.16
- **/
- #define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/"
- /**
- * G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO:
- *
- * Allowed characters in userinfo as defined in
- * [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=:`.
- *
- * Since: 2.16
- **/
- #define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":"
- GLIB_AVAILABLE_IN_ALL
- char * g_uri_unescape_string (const char *escaped_string,
- const char *illegal_characters);
- GLIB_AVAILABLE_IN_ALL
- char * g_uri_unescape_segment (const char *escaped_string,
- const char *escaped_string_end,
- const char *illegal_characters);
- GLIB_AVAILABLE_IN_ALL
- char * g_uri_parse_scheme (const char *uri);
- GLIB_AVAILABLE_IN_2_66
- const char *g_uri_peek_scheme (const char *uri);
- GLIB_AVAILABLE_IN_ALL
- char * g_uri_escape_string (const char *unescaped,
- const char *reserved_chars_allowed,
- gboolean allow_utf8);
- GLIB_AVAILABLE_IN_2_66
- GBytes * g_uri_unescape_bytes (const char *escaped_string,
- gssize length,
- const char *illegal_characters,
- GError **error);
- GLIB_AVAILABLE_IN_2_66
- char * g_uri_escape_bytes (const guint8 *unescaped,
- gsize length,
- const char *reserved_chars_allowed);
- G_GNUC_END_IGNORE_DEPRECATIONS
- G_END_DECLS
|