xref: /lighttpd1.4/src/burl.h (revision a01e62bb)
1 #ifndef INCLUDED_BURL_H
2 #define INCLUDED_BURL_H
3 #include "first.h"
4 
5 #include "buffer.h"
6 
7 struct burl_parts_t {
8   const buffer *scheme;
9   const buffer *authority;
10   unsigned short port;
11   const buffer *path;
12   const buffer *query;
13 };
14 
15 enum burl_opts_e {
16   HTTP_PARSEOPT_HEADER_STRICT  = 0x1
17  ,HTTP_PARSEOPT_HOST_STRICT    = 0x2
18  ,HTTP_PARSEOPT_HOST_NORMALIZE = 0x4
19  ,HTTP_PARSEOPT_URL_NORMALIZE  = 0x8/*normalize chars %-encoded, uppercase hex*/
20  ,HTTP_PARSEOPT_URL_NORMALIZE_UNRESERVED          =0x10 /* decode unreserved */
21  ,HTTP_PARSEOPT_URL_NORMALIZE_REQUIRED            =0x20 /* decode (un)reserved*/
22  ,HTTP_PARSEOPT_URL_NORMALIZE_CTRLS_REJECT        =0x40
23  ,HTTP_PARSEOPT_URL_NORMALIZE_PATH_BACKSLASH_TRANS=0x80 /* "\\" -> "/" Cygwin */
24  ,HTTP_PARSEOPT_URL_NORMALIZE_PATH_2F_DECODE      =0x100/* "%2F"-> "/" */
25  ,HTTP_PARSEOPT_URL_NORMALIZE_PATH_2F_REJECT      =0x200
26  ,HTTP_PARSEOPT_URL_NORMALIZE_PATH_DOTSEG_REMOVE  =0x400/* "." ".." "//" */
27  ,HTTP_PARSEOPT_URL_NORMALIZE_PATH_DOTSEG_REJECT  =0x800
28  ,HTTP_PARSEOPT_URL_NORMALIZE_QUERY_20_PLUS       =0x1000
29  ,HTTP_PARSEOPT_URL_NORMALIZE_INVALID_UTF8_REJECT =0x2000
30  ,HTTP_PARSEOPT_METHOD_GET_BODY                   =0x8000
31 };
32 
33 int burl_normalize (buffer *b, buffer *t, int flags);
34 
35 enum burl_recoding_e {
36   BURL_TOLOWER         = 0x0001
37  ,BURL_TOUPPER         = 0x0002
38  ,BURL_ENCODE_NONE     = 0x0004
39  ,BURL_ENCODE_ALL      = 0x0008
40  ,BURL_ENCODE_NDE      = 0x0010 /* encode delims, but no-double-encode (NDE) */
41  ,BURL_ENCODE_PSNDE    = 0x0020 /* similar to NDE, but preserve literal slash */
42  ,BURL_ENCODE_B64U     = 0x0040
43  ,BURL_DECODE_B64U     = 0x0080
44 };
45 
46 void burl_append (buffer * const b, const char * const str, const size_t len, const int flags);
47 
48 #endif
49