1251876Speter/* Licensed to the Apache Software Foundation (ASF) under one or more 2251876Speter * contributor license agreements. See the NOTICE file distributed with 3251876Speter * this work for additional information regarding copyright ownership. 4251876Speter * The ASF licenses this file to You under the Apache License, Version 2.0 5251876Speter * (the "License"); you may not use this file except in compliance with 6251876Speter * the License. You may obtain a copy of the License at 7251876Speter * 8251876Speter * http://www.apache.org/licenses/LICENSE-2.0 9251876Speter * 10251876Speter * Unless required by applicable law or agreed to in writing, software 11251876Speter * distributed under the License is distributed on an "AS IS" BASIS, 12251876Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251876Speter * See the License for the specific language governing permissions and 14251876Speter * limitations under the License. 15251876Speter */ 16251876Speter 17251876Speter/* 18251876Speter * apr_uri.h: External Interface of apr_uri.c 19251876Speter */ 20251876Speter 21251876Speter/** 22251876Speter * @file apr_uri.h 23251876Speter * @brief APR-UTIL URI Routines 24251876Speter */ 25251876Speter 26251876Speter#ifndef APR_URI_H 27251876Speter#define APR_URI_H 28251876Speter 29251876Speter#include "apu.h" 30251876Speter 31251876Speter#include "apr_network_io.h" 32251876Speter 33251876Speter#ifdef __cplusplus 34251876Speterextern "C" { 35251876Speter#endif 36251876Speter 37251876Speter/** 38251876Speter * @defgroup APR_Util_URI URI 39251876Speter * @ingroup APR_Util 40251876Speter * @{ 41251876Speter */ 42251876Speter 43251876Speter#define APR_URI_FTP_DEFAULT_PORT 21 /**< default FTP port */ 44251876Speter#define APR_URI_SSH_DEFAULT_PORT 22 /**< default SSH port */ 45251876Speter#define APR_URI_TELNET_DEFAULT_PORT 23 /**< default telnet port */ 46251876Speter#define APR_URI_GOPHER_DEFAULT_PORT 70 /**< default Gopher port */ 47251876Speter#define APR_URI_HTTP_DEFAULT_PORT 80 /**< default HTTP port */ 48251876Speter#define APR_URI_POP_DEFAULT_PORT 110 /**< default POP port */ 49251876Speter#define APR_URI_NNTP_DEFAULT_PORT 119 /**< default NNTP port */ 50251876Speter#define APR_URI_IMAP_DEFAULT_PORT 143 /**< default IMAP port */ 51251876Speter#define APR_URI_PROSPERO_DEFAULT_PORT 191 /**< default Prospero port */ 52251876Speter#define APR_URI_WAIS_DEFAULT_PORT 210 /**< default WAIS port */ 53251876Speter#define APR_URI_LDAP_DEFAULT_PORT 389 /**< default LDAP port */ 54251876Speter#define APR_URI_HTTPS_DEFAULT_PORT 443 /**< default HTTPS port */ 55251876Speter#define APR_URI_RTSP_DEFAULT_PORT 554 /**< default RTSP port */ 56251876Speter#define APR_URI_SNEWS_DEFAULT_PORT 563 /**< default SNEWS port */ 57251876Speter#define APR_URI_ACAP_DEFAULT_PORT 674 /**< default ACAP port */ 58251876Speter#define APR_URI_NFS_DEFAULT_PORT 2049 /**< default NFS port */ 59251876Speter#define APR_URI_TIP_DEFAULT_PORT 3372 /**< default TIP port */ 60251876Speter#define APR_URI_SIP_DEFAULT_PORT 5060 /**< default SIP port */ 61251876Speter 62251876Speter/** Flags passed to unparse_uri_components(): */ 63251876Speter/** suppress "scheme://user\@site:port" */ 64251876Speter#define APR_URI_UNP_OMITSITEPART (1U<<0) 65251876Speter/** Just omit user */ 66251876Speter#define APR_URI_UNP_OMITUSER (1U<<1) 67251876Speter/** Just omit password */ 68251876Speter#define APR_URI_UNP_OMITPASSWORD (1U<<2) 69251876Speter/** omit "user:password\@" part */ 70251876Speter#define APR_URI_UNP_OMITUSERINFO (APR_URI_UNP_OMITUSER | \ 71251876Speter APR_URI_UNP_OMITPASSWORD) 72251876Speter/** Show plain text password (default: show XXXXXXXX) */ 73251876Speter#define APR_URI_UNP_REVEALPASSWORD (1U<<3) 74251876Speter/** Show "scheme://user\@site:port" only */ 75251876Speter#define APR_URI_UNP_OMITPATHINFO (1U<<4) 76251876Speter/** Omit the "?queryarg" from the path */ 77251876Speter#define APR_URI_UNP_OMITQUERY (1U<<5) 78251876Speter 79251876Speter/** @see apr_uri_t */ 80251876Spetertypedef struct apr_uri_t apr_uri_t; 81251876Speter 82251876Speter/** 83251876Speter * A structure to encompass all of the fields in a uri 84251876Speter */ 85251876Speterstruct apr_uri_t { 86251876Speter /** scheme ("http"/"ftp"/...) */ 87251876Speter char *scheme; 88251876Speter /** combined [user[:password]\@]host[:port] */ 89251876Speter char *hostinfo; 90251876Speter /** user name, as in http://user:passwd\@host:port/ */ 91251876Speter char *user; 92251876Speter /** password, as in http://user:passwd\@host:port/ */ 93251876Speter char *password; 94251876Speter /** hostname from URI (or from Host: header) */ 95251876Speter char *hostname; 96251876Speter /** port string (integer representation is in "port") */ 97251876Speter char *port_str; 98251876Speter /** the request path (or NULL if only scheme://host was given) */ 99251876Speter char *path; 100251876Speter /** Everything after a '?' in the path, if present */ 101251876Speter char *query; 102251876Speter /** Trailing "#fragment" string, if present */ 103251876Speter char *fragment; 104251876Speter 105251876Speter /** structure returned from gethostbyname() */ 106251876Speter struct hostent *hostent; 107251876Speter 108251876Speter /** The port number, numeric, valid only if port_str != NULL */ 109251876Speter apr_port_t port; 110251876Speter 111251876Speter /** has the structure been initialized */ 112251876Speter unsigned is_initialized:1; 113251876Speter 114251876Speter /** has the DNS been looked up yet */ 115251876Speter unsigned dns_looked_up:1; 116251876Speter /** has the dns been resolved yet */ 117251876Speter unsigned dns_resolved:1; 118251876Speter}; 119251876Speter 120251876Speter/* apr_uri.c */ 121251876Speter/** 122251876Speter * Return the default port for a given scheme. The schemes recognized are 123251876Speter * http, ftp, https, gopher, wais, nntp, snews, and prospero 124251876Speter * @param scheme_str The string that contains the current scheme 125251876Speter * @return The default port for this scheme 126251876Speter */ 127251876SpeterAPU_DECLARE(apr_port_t) apr_uri_port_of_scheme(const char *scheme_str); 128251876Speter 129251876Speter/** 130251876Speter * Unparse a apr_uri_t structure to an URI string. Optionally 131251876Speter * suppress the password for security reasons. 132251876Speter * @param p The pool to allocate out of 133251876Speter * @param uptr All of the parts of the uri 134251876Speter * @param flags How to unparse the uri. One of: 135251876Speter * <PRE> 136251876Speter * APR_URI_UNP_OMITSITEPART Suppress "scheme://user\@site:port" 137251876Speter * APR_URI_UNP_OMITUSER Just omit user 138251876Speter * APR_URI_UNP_OMITPASSWORD Just omit password 139251876Speter * APR_URI_UNP_OMITUSERINFO Omit "user:password\@" part 140251876Speter * APR_URI_UNP_REVEALPASSWORD Show plain text password (default: show XXXXXXXX) 141251876Speter * APR_URI_UNP_OMITPATHINFO Show "scheme://user\@site:port" only 142251876Speter * APR_URI_UNP_OMITQUERY Omit "?queryarg" or "#fragment" 143251876Speter * </PRE> 144251876Speter * @return The uri as a string 145251876Speter */ 146251876SpeterAPU_DECLARE(char *) apr_uri_unparse(apr_pool_t *p, 147251876Speter const apr_uri_t *uptr, 148251876Speter unsigned flags); 149251876Speter 150251876Speter/** 151251876Speter * Parse a given URI, fill in all supplied fields of a apr_uri_t 152251876Speter * structure. This eliminates the necessity of extracting host, port, 153251876Speter * path, query info repeatedly in the modules. 154251876Speter * @param p The pool to allocate out of 155251876Speter * @param uri The uri to parse 156251876Speter * @param uptr The apr_uri_t to fill out 157251876Speter * @return APR_SUCCESS for success or error code 158251876Speter */ 159251876SpeterAPU_DECLARE(apr_status_t) apr_uri_parse(apr_pool_t *p, const char *uri, 160251876Speter apr_uri_t *uptr); 161251876Speter 162251876Speter/** 163251876Speter * Special case for CONNECT parsing: it comes with the hostinfo part only 164251876Speter * @param p The pool to allocate out of 165251876Speter * @param hostinfo The hostinfo string to parse 166251876Speter * @param uptr The apr_uri_t to fill out 167251876Speter * @return APR_SUCCESS for success or error code 168251876Speter */ 169251876SpeterAPU_DECLARE(apr_status_t) apr_uri_parse_hostinfo(apr_pool_t *p, 170251876Speter const char *hostinfo, 171251876Speter apr_uri_t *uptr); 172251876Speter 173251876Speter/** @} */ 174251876Speter#ifdef __cplusplus 175251876Speter} 176251876Speter#endif 177251876Speter 178251876Speter#endif /* APR_URI_H */ 179