From f520e9044a69290668bbd9f956ebe3750f4d27d0 Mon Sep 17 00:00:00 2001 From: Jonathan Buchanan Date: Mon, 24 Aug 2020 20:54:18 -0400 Subject: header for uri parser --- src/include/Makefile.am | 1 + src/include/gnunet_uri_lib.h | 96 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 src/include/gnunet_uri_lib.h diff --git a/src/include/Makefile.am b/src/include/Makefile.am index d2c254ae6..e542038d3 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -119,5 +119,6 @@ gnunetinclude_HEADERS = \ gnunet_transport_monitor_service.h \ gnunet_transport_plugin.h \ gnunet_tun_lib.h \ + gnunet_uri_lib.h \ gnunet_util_lib.h \ gnunet_vpn_service.h diff --git a/src/include/gnunet_uri_lib.h b/src/include/gnunet_uri_lib.h new file mode 100644 index 000000000..86c9c54f4 --- /dev/null +++ b/src/include/gnunet_uri_lib.h @@ -0,0 +1,96 @@ +/* + This file is part of GNUnet + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet 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 + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @file include/gnunet_uri_lib.h + * @brief generic parser for URIs + * @author Jonathan Buchanan + */ + +#ifndef GNUNET_URI_LIB_H +#define GNUNET_URI_LIB_H + +/** + * A Universal Resource Identifier (URI). + */ +struct GNUNET_Uri +{ + /** + * The scheme of the uri. + */ + char *scheme; + + + /** + * The authority of the uri. If not present in the uri, NULL. + */ + char *authority; + + + /** + * The list of path segments in the URI. Note that if the path ends with a + * '/', then this array will end with an empty string to indicate the empty + * segment following the '/'. + */ + char **path_segments; + + + /** + * The length of @e path_segments. + */ + unsigned int path_segments_count; + + + /** + * The query of the uri. If not present in the uri, NULL. + */ + const char *query; + + + /** + * The fragment of the uri. If not present in the uri, NULL. + */ + char *fragment; +}; + + +/** + * Parse a URI from a string into an internal representation. + * + * @param uri string to parse + * @param emsg where to store the parser error message (if any) + * @return handle to the internal representation of the URI, or NULL on error + */ +struct GNUNET_Uri * +GNUNET_uri_parse (const char *uri, + char **emsg); + + +/** + * Free URI. + * + * @param uri uri to free + */ +void +GNUNET_uri_destroy (struct GNUNET_Uri *uri); + + +#endif /* GNUNET_URI_LIB_H */ + +/* end of include/gnunet_uri_lib.h */ -- cgit v1.2.3