1 #ifndef _KEY_VALUE_H_
2 #define _KEY_VALUE_H_
3 
4 #ifdef HAVE_CONFIG_H
5 # include "config.h"
6 #endif
7 
8 #ifdef HAVE_PCRE_H
9 # include <pcre.h>
10 #endif
11 
12 struct server;
13 
14 typedef enum {
15 	HTTP_METHOD_UNSET = -1,
16 	HTTP_METHOD_GET,
17 	HTTP_METHOD_POST,
18 	HTTP_METHOD_HEAD,
19 	HTTP_METHOD_OPTIONS,
20 	HTTP_METHOD_PROPFIND,  /* WebDAV */
21 	HTTP_METHOD_MKCOL,
22 	HTTP_METHOD_PUT,
23 	HTTP_METHOD_PATCH,
24 	HTTP_METHOD_DELETE,
25 	HTTP_METHOD_COPY,
26 	HTTP_METHOD_MOVE,
27 	HTTP_METHOD_PROPPATCH,
28 	HTTP_METHOD_REPORT, /* DeltaV */
29 	HTTP_METHOD_CHECKOUT,
30 	HTTP_METHOD_CHECKIN,
31 	HTTP_METHOD_VERSION_CONTROL,
32 	HTTP_METHOD_UNCHECKOUT,
33 	HTTP_METHOD_MKACTIVITY,
34 	HTTP_METHOD_MERGE,
35 	HTTP_METHOD_LOCK,
36 	HTTP_METHOD_UNLOCK,
37 	HTTP_METHOD_LABEL,
38 	HTTP_METHOD_CONNECT
39 } http_method_t;
40 
41 typedef enum { HTTP_VERSION_UNSET = -1, HTTP_VERSION_1_0, HTTP_VERSION_1_1 } http_version_t;
42 
43 typedef struct {
44 	int key;
45 
46 	char *value;
47 } keyvalue;
48 
49 typedef struct {
50 	char *key;
51 
52 	char *value;
53 } s_keyvalue;
54 
55 typedef struct {
56 #ifdef HAVE_PCRE_H
57 	pcre *key;
58 	pcre_extra *key_extra;
59 #endif
60 
61 	buffer *value;
62 } pcre_keyvalue;
63 
64 typedef enum { HTTP_AUTH_BASIC, HTTP_AUTH_DIGEST } httpauth_type;
65 
66 typedef struct {
67 	char *key;
68 
69 	char *realm;
70 	httpauth_type type;
71 } httpauth_keyvalue;
72 
73 #define KVB(x) \
74 typedef struct {\
75 	x **kv; \
76 	size_t used;\
77 	size_t size;\
78 } x ## _buffer
79 
80 KVB(keyvalue);
81 KVB(s_keyvalue);
82 KVB(httpauth_keyvalue);
83 KVB(pcre_keyvalue);
84 
85 const char *get_http_status_name(int i);
86 const char *get_http_version_name(int i);
87 const char *get_http_method_name(http_method_t i);
88 const char *get_http_status_body_name(int i);
89 int get_http_version_key(const char *s);
90 http_method_t get_http_method_key(const char *s);
91 
92 const char *keyvalue_get_value(const keyvalue *kv, int k);
93 int keyvalue_get_key(const keyvalue *kv, const char *s);
94 
95 keyvalue_buffer *keyvalue_buffer_init(void);
96 int keyvalue_buffer_append(keyvalue_buffer *kvb, int k, const char *value);
97 void keyvalue_buffer_free(keyvalue_buffer *kvb);
98 
99 s_keyvalue_buffer *s_keyvalue_buffer_init(void);
100 int s_keyvalue_buffer_append(s_keyvalue_buffer *kvb, const char *key, const char *value);
101 void s_keyvalue_buffer_free(s_keyvalue_buffer *kvb);
102 
103 httpauth_keyvalue_buffer *httpauth_keyvalue_buffer_init(void);
104 int httpauth_keyvalue_buffer_append(httpauth_keyvalue_buffer *kvb, const char *key, const char *realm, httpauth_type type);
105 void httpauth_keyvalue_buffer_free(httpauth_keyvalue_buffer *kvb);
106 
107 pcre_keyvalue_buffer *pcre_keyvalue_buffer_init(void);
108 int pcre_keyvalue_buffer_append(struct server *srv, pcre_keyvalue_buffer *kvb, const char *key, const char *value);
109 void pcre_keyvalue_buffer_free(pcre_keyvalue_buffer *kvb);
110 
111 #endif
112