~ubuntu-branches/ubuntu/feisty/apache2/feisty

« back to all changes in this revision

Viewing changes to srclib/apr-util/include/apr_uri.h

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Barth
  • Date: 2006-12-09 21:05:45 UTC
  • mfrom: (0.6.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20061209210545-h70s0xaqc2v8vqr2
Tags: 2.2.3-3.2
* Non-maintainer upload.
* 043_ajp_connection_reuse: Patch from upstream Bugzilla, fixing a critical
  issue with regard to connection reuse in mod_proxy_ajp.
  Closes: #396265

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
 
2
 * applicable.
 
3
 *
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * You may obtain a copy of the License at
 
7
 *
 
8
 *     http://www.apache.org/licenses/LICENSE-2.0
 
9
 *
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS IS" BASIS,
 
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
/*
 
18
 * apr_uri.h: External Interface of apr_uri.c
 
19
 */
 
20
 
 
21
/**
 
22
 * @file apr_uri.h
 
23
 * @brief APR-UTIL URI Routines
 
24
 */
 
25
 
 
26
#ifndef APR_URI_H
 
27
#define APR_URI_H
 
28
 
 
29
#include "apu.h"
 
30
 
 
31
#include "apr_network_io.h"
 
32
 
 
33
#ifdef __cplusplus
 
34
extern "C" {
 
35
#endif
 
36
 
 
37
/**
 
38
 * @defgroup APR_Util_URI URI
 
39
 * @ingroup APR_Util
 
40
 * @{
 
41
 */
 
42
 
 
43
#define APR_URI_FTP_DEFAULT_PORT         21 /**< default FTP port */
 
44
#define APR_URI_SSH_DEFAULT_PORT         22 /**< default SSH port */
 
45
#define APR_URI_TELNET_DEFAULT_PORT      23 /**< default telnet port */
 
46
#define APR_URI_GOPHER_DEFAULT_PORT      70 /**< default Gopher port */
 
47
#define APR_URI_HTTP_DEFAULT_PORT        80 /**< default HTTP port */
 
48
#define APR_URI_POP_DEFAULT_PORT        110 /**< default POP port */
 
49
#define APR_URI_NNTP_DEFAULT_PORT       119 /**< default NNTP port */
 
50
#define APR_URI_IMAP_DEFAULT_PORT       143 /**< default IMAP port */
 
51
#define APR_URI_PROSPERO_DEFAULT_PORT   191 /**< default Prospero port */
 
52
#define APR_URI_WAIS_DEFAULT_PORT       210 /**< default WAIS port */
 
53
#define APR_URI_LDAP_DEFAULT_PORT       389 /**< default LDAP port */
 
54
#define APR_URI_HTTPS_DEFAULT_PORT      443 /**< default HTTPS port */
 
55
#define APR_URI_RTSP_DEFAULT_PORT       554 /**< default RTSP port */
 
56
#define APR_URI_SNEWS_DEFAULT_PORT      563 /**< default SNEWS port */
 
57
#define APR_URI_ACAP_DEFAULT_PORT       674 /**< default ACAP port */
 
58
#define APR_URI_NFS_DEFAULT_PORT       2049 /**< default NFS port */
 
59
#define APR_URI_TIP_DEFAULT_PORT       3372 /**< default TIP port */
 
60
#define APR_URI_SIP_DEFAULT_PORT       5060 /**< default SIP port */
 
61
 
 
62
/** Flags passed to unparse_uri_components(): */
 
63
/** suppress "scheme://user\@site:port" */
 
64
#define APR_URI_UNP_OMITSITEPART    (1U<<0)
 
65
/** Just omit user */
 
66
#define APR_URI_UNP_OMITUSER        (1U<<1)
 
67
/** Just omit password */
 
68
#define APR_URI_UNP_OMITPASSWORD    (1U<<2)
 
69
/** omit "user:password\@" part */
 
70
#define APR_URI_UNP_OMITUSERINFO    (APR_URI_UNP_OMITUSER | \
 
71
                                     APR_URI_UNP_OMITPASSWORD)
 
72
/** Show plain text password (default: show XXXXXXXX) */
 
73
#define APR_URI_UNP_REVEALPASSWORD  (1U<<3)
 
74
/** Show "scheme://user\@site:port" only */
 
75
#define APR_URI_UNP_OMITPATHINFO    (1U<<4)
 
76
/** Omit the "?queryarg" from the path */
 
77
#define APR_URI_UNP_OMITQUERY       (1U<<5)
 
78
 
 
79
/** @see apr_uri_t */
 
80
typedef struct apr_uri_t apr_uri_t;
 
81
 
 
82
/**
 
83
 * A structure to encompass all of the fields in a uri
 
84
 */
 
85
struct apr_uri_t {
 
86
    /** scheme ("http"/"ftp"/...) */
 
87
    char *scheme;
 
88
    /** combined [user[:password]\@]host[:port] */
 
89
    char *hostinfo;
 
90
    /** user name, as in http://user:passwd\@host:port/ */
 
91
    char *user;
 
92
    /** password, as in http://user:passwd\@host:port/ */
 
93
    char *password;
 
94
    /** hostname from URI (or from Host: header) */
 
95
    char *hostname;
 
96
    /** port string (integer representation is in "port") */
 
97
    char *port_str;
 
98
    /** the request path (or "/" if only scheme://host was given) */
 
99
    char *path;
 
100
    /** Everything after a '?' in the path, if present */
 
101
    char *query;
 
102
    /** Trailing "#fragment" string, if present */
 
103
    char *fragment;
 
104
 
 
105
    /** structure returned from gethostbyname() */
 
106
    struct hostent *hostent;
 
107
 
 
108
    /** The port number, numeric, valid only if port_str != NULL */
 
109
    apr_port_t port;
 
110
    
 
111
    /** has the structure been initialized */
 
112
    unsigned is_initialized:1;
 
113
 
 
114
    /** has the DNS been looked up yet */
 
115
    unsigned dns_looked_up:1;
 
116
    /** has the dns been resolved yet */
 
117
    unsigned dns_resolved:1;
 
118
};
 
119
 
 
120
/* apr_uri.c */
 
121
/**
 
122
 * Return the default port for a given scheme.  The schemes recognized are
 
123
 * http, ftp, https, gopher, wais, nntp, snews, and prospero
 
124
 * @param scheme_str The string that contains the current scheme
 
125
 * @return The default port for this scheme
 
126
 */ 
 
127
APU_DECLARE(apr_port_t) apr_uri_port_of_scheme(const char *scheme_str);
 
128
 
 
129
/**
 
130
 * Unparse a apr_uri_t structure to an URI string.  Optionally 
 
131
 * suppress the password for security reasons.
 
132
 * @param p The pool to allocate out of
 
133
 * @param uptr All of the parts of the uri
 
134
 * @param flags How to unparse the uri.  One of:
 
135
 * <PRE>
 
136
 *    APR_URI_UNP_OMITSITEPART        Suppress "scheme://user\@site:port" 
 
137
 *    APR_URI_UNP_OMITUSER            Just omit user 
 
138
 *    APR_URI_UNP_OMITPASSWORD        Just omit password 
 
139
 *    APR_URI_UNP_OMITUSERINFO        Omit "user:password\@" part
 
140
 *    APR_URI_UNP_REVEALPASSWORD      Show plain text password (default: show XXXXXXXX)
 
141
 *    APR_URI_UNP_OMITPATHINFO        Show "scheme://user\@site:port" only 
 
142
 *    APR_URI_UNP_OMITQUERY           Omit "?queryarg" or "#fragment" 
 
143
 * </PRE>
 
144
 * @return The uri as a string
 
145
 */
 
146
APU_DECLARE(char *) apr_uri_unparse(apr_pool_t *p, 
 
147
                                    const apr_uri_t *uptr,
 
148
                                    unsigned flags);
 
149
 
 
150
/**
 
151
 * Parse a given URI, fill in all supplied fields of a apr_uri_t
 
152
 * structure. This eliminates the necessity of extracting host, port,
 
153
 * path, query info repeatedly in the modules.
 
154
 * @param p The pool to allocate out of
 
155
 * @param uri The uri to parse
 
156
 * @param uptr The apr_uri_t to fill out
 
157
 * @return APR_SUCCESS for success or error code
 
158
 */
 
159
APU_DECLARE(apr_status_t) apr_uri_parse(apr_pool_t *p, const char *uri, 
 
160
                                        apr_uri_t *uptr);
 
161
 
 
162
/**
 
163
 * Special case for CONNECT parsing: it comes with the hostinfo part only
 
164
 * @param p The pool to allocate out of
 
165
 * @param hostinfo The hostinfo string to parse
 
166
 * @param uptr The apr_uri_t to fill out
 
167
 * @return APR_SUCCESS for success or error code
 
168
 */
 
169
APU_DECLARE(apr_status_t) apr_uri_parse_hostinfo(apr_pool_t *p, 
 
170
                                                 const char *hostinfo, 
 
171
                                                 apr_uri_t *uptr);
 
172
 
 
173
/** @} */
 
174
#ifdef __cplusplus
 
175
}
 
176
#endif
 
177
 
 
178
#endif /* APR_URI_H */