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