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