2011-09-21 18:36:42 +04:00
|
|
|
/*
|
|
|
|
* Copyright 2011 Michael Drake <tlsa@netsurf-browser.org>
|
|
|
|
*
|
|
|
|
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
|
|
|
*
|
|
|
|
* NetSurf is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; version 2 of the License.
|
|
|
|
*
|
|
|
|
* NetSurf 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 General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/** \file
|
|
|
|
* NetSurf URL handling (interface).
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _NETSURF_UTILS_NSURL_H_
|
|
|
|
#define _NETSURF_UTILS_NSURL_H_
|
|
|
|
|
|
|
|
#include "utils/errors.h"
|
|
|
|
|
|
|
|
|
|
|
|
/** NetSurf URL object */
|
|
|
|
typedef struct nsurl nsurl;
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum nsurl_component {
|
|
|
|
NSURL_SCHEME = (1 << 0),
|
|
|
|
NSURL_USERNAME = (1 << 1),
|
|
|
|
NSURL_PASSWORD = (1 << 2),
|
|
|
|
NSURL_CREDENTIALS = NSURL_USERNAME | NSURL_PASSWORD,
|
|
|
|
NSURL_HOST = (1 << 3),
|
|
|
|
NSURL_PORT = (1 << 4),
|
|
|
|
NSURL_AUTHORITY = NSURL_CREDENTIALS | NSURL_HOST | NSURL_PORT,
|
|
|
|
NSURL_PATH = (1 << 5),
|
|
|
|
NSURL_QUERY = (1 << 6),
|
|
|
|
NSURL_COMPLETE = NSURL_SCHEME | NSURL_AUTHORITY |
|
|
|
|
NSURL_PATH | NSURL_QUERY,
|
|
|
|
NSURL_FRAGMENT = (1 << 7),
|
|
|
|
NSURL_WITH_FRAGMENT = NSURL_COMPLETE | NSURL_FRAGMENT
|
|
|
|
} nsurl_component;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a NetSurf URL object from a URL string
|
|
|
|
*
|
|
|
|
* \param url_s String to create NetSurf URL from
|
|
|
|
* \param url Returns a NetSurf URL
|
|
|
|
* \return NSERROR_OK on success, appropriate error otherwise
|
|
|
|
*
|
|
|
|
* If return value != NSERROR_OK, nothing will be returned in url.
|
|
|
|
*
|
|
|
|
* It is up to the client to call nsurl_destroy when they are finished with
|
|
|
|
* the created object.
|
|
|
|
*/
|
|
|
|
nserror nsurl_create(const char const *url_s, nsurl **url);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2011-09-22 20:28:46 +04:00
|
|
|
* Increment the reference count to a NetSurf URL object
|
2011-09-21 18:36:42 +04:00
|
|
|
*
|
2011-09-22 20:28:46 +04:00
|
|
|
* \param url NetSurf URL to create another reference to
|
|
|
|
* \return The NetSurf URL pointer to use as the copy
|
|
|
|
*
|
|
|
|
* Use this when copying a NetSurf URL into a persistent data structure.
|
|
|
|
*/
|
|
|
|
nsurl *nsurl_ref(nsurl *url);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Drop a reference to a NetSurf URL object
|
|
|
|
*
|
|
|
|
* \param url NetSurf URL to drop reference to
|
|
|
|
*
|
|
|
|
* When the reference count reaches zero then the NetSurf URL will be destroyed
|
2011-09-21 18:36:42 +04:00
|
|
|
*/
|
2011-09-22 20:28:46 +04:00
|
|
|
void nsurl_unref(nsurl *url);
|
2011-09-21 18:36:42 +04:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compare two URLs
|
|
|
|
*
|
|
|
|
* \param url1 First NetSurf URL
|
|
|
|
* \param url2 Second NetSurf URL
|
|
|
|
* \param parts The URL components to be compared
|
|
|
|
* \param match Returns true if url1 and url2 matched, else false
|
|
|
|
* \return NSERROR_OK on success, appropriate error otherwise
|
|
|
|
*
|
|
|
|
* If return value != NSERROR_OK, match will be false.
|
|
|
|
*/
|
|
|
|
nserror nsurl_compare(const nsurl *url1, const nsurl *url2,
|
|
|
|
nsurl_component parts, bool *match);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get URL (section) as a string, from a NetSurf URL object
|
|
|
|
*
|
|
|
|
* \param url NetSurf URL
|
|
|
|
* \param parts The required URL components.
|
|
|
|
* \param url_s Returns a url string
|
|
|
|
* \param url_l Returns length of url_s
|
|
|
|
* \return NSERROR_OK on success, appropriate error otherwise
|
|
|
|
*
|
|
|
|
* If return value != NSERROR_OK, nothing will be returned in url_s or url_l.
|
|
|
|
*
|
|
|
|
* The string returned in url_s is owned by the client and it is up to them
|
|
|
|
* to free it. It includes a trailing '\0'.
|
|
|
|
*
|
|
|
|
* The length returned in url_l excludes the trailing '\0'.
|
|
|
|
*
|
|
|
|
* That the required URL components be consecutive is not enforced, however,
|
|
|
|
* non-consecutive URL components generally make no sense. The exception
|
|
|
|
* is removal of credentials from a URL, such as for display in browser
|
|
|
|
* window URL bar. 'NSURL_COMPLETE &~ NSURL_PASSWORD' would remove the
|
|
|
|
* password from a complete URL.
|
|
|
|
*/
|
|
|
|
nserror nsurl_get(const nsurl *url, nsurl_component parts,
|
|
|
|
char **url_s, size_t *url_l);
|
|
|
|
|
|
|
|
|
2011-09-22 20:28:46 +04:00
|
|
|
/**
|
|
|
|
* Access a URL (section) as a string, from a NetSurf URL object
|
|
|
|
*
|
|
|
|
* \param url NetSurf URL to retrieve a string pointer for.
|
|
|
|
* \param parts The required URL components.
|
|
|
|
* \param url_l Returns length of returned string
|
|
|
|
* \return the required string
|
|
|
|
*
|
|
|
|
* If return value != NSERROR_OK, nothing will be returned in url_s or url_l.
|
|
|
|
*
|
|
|
|
* The string returned in is owned by the NetSurf URL object. It will die
|
|
|
|
* with the NetSurf URL object. Keep a reference to the URL if you need it.
|
|
|
|
*
|
|
|
|
* Required URL components must be consecutive. Only when NSURL_WITH_FRAGMENT
|
|
|
|
* is passed as the parts param is a trailing '\0' guaranteed.
|
|
|
|
*
|
|
|
|
* The length returned in url_l excludes any trailing '\0'.
|
|
|
|
*/
|
|
|
|
char *nsurl_access(const nsurl *url, nsurl_component parts, size_t *url_l);
|
|
|
|
|
|
|
|
|
2011-09-21 18:36:42 +04:00
|
|
|
/**
|
|
|
|
* Join a base url to a relative link part, creating a new NetSurf URL object
|
|
|
|
*
|
|
|
|
* \param base NetSurf URL containing the base to join rel to
|
|
|
|
* \param rel String containing the relative link part
|
|
|
|
* \param joined Returns joined NetSurf URL
|
|
|
|
* \return NSERROR_OK on success, appropriate error otherwise
|
|
|
|
*
|
|
|
|
* If return value != NSERROR_OK, nothing will be returned in join.
|
|
|
|
*
|
|
|
|
* It is up to the client to call nsurl_destroy when they are finished with
|
|
|
|
* the created object.
|
|
|
|
*/
|
|
|
|
nserror nsurl_join(const nsurl *base, const char *rel, nsurl **joined);
|
|
|
|
|
|
|
|
#endif
|