File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / src / keyvalue.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 10:32:47 2013 UTC (10 years, 8 months ago) by misho
Branches: lighttpd, MAIN
CVS tags: v1_4_35p0, v1_4_35, v1_4_33, HEAD
1.4.33

    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: /* sources:
   15:  * - [RFC2616], Section 9
   16:  *   (or http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-22)
   17:  * - http://tools.ietf.org/html/draft-ietf-httpbis-method-registrations-11, Appendix A
   18:  *
   19:  * http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-22, Section 8.1 defines
   20:  * a new registry (not available yet):
   21:  *   http://www.iana.org/assignments/http-methods
   22:  */
   23: 
   24: typedef enum {
   25: 	HTTP_METHOD_UNSET = -1,
   26: 	HTTP_METHOD_GET,               /* [RFC2616], Section 9.3 */
   27: 	HTTP_METHOD_HEAD,              /* [RFC2616], Section 9.4 */
   28: 	HTTP_METHOD_POST,              /* [RFC2616], Section 9.5 */
   29: 	HTTP_METHOD_PUT,               /* [RFC2616], Section 9.6 */
   30: 	HTTP_METHOD_DELETE,            /* [RFC2616], Section 9.7 */
   31: 	HTTP_METHOD_CONNECT,           /* [RFC2616], Section 9.9 */
   32: 	HTTP_METHOD_OPTIONS,           /* [RFC2616], Section 9.2 */
   33: 	HTTP_METHOD_TRACE,             /* [RFC2616], Section 9.8 */
   34: 	HTTP_METHOD_ACL,               /* [RFC3744], Section 8.1 */
   35: 	HTTP_METHOD_BASELINE_CONTROL,  /* [RFC3253], Section 12.6 */
   36: 	HTTP_METHOD_BIND,              /* [RFC5842], Section 4 */
   37: 	HTTP_METHOD_CHECKIN,           /* [RFC3253], Section 4.4 and [RFC3253], Section 9.4 */
   38: 	HTTP_METHOD_CHECKOUT,          /* [RFC3253], Section 4.3 and [RFC3253], Section 8.8 */
   39: 	HTTP_METHOD_COPY,              /* [RFC4918], Section 9.8 */
   40: 	HTTP_METHOD_LABEL,             /* [RFC3253], Section 8.2 */
   41: 	HTTP_METHOD_LINK,              /* [RFC2068], Section 19.6.1.2 */
   42: 	HTTP_METHOD_LOCK,              /* [RFC4918], Section 9.10 */
   43: 	HTTP_METHOD_MERGE,             /* [RFC3253], Section 11.2 */
   44: 	HTTP_METHOD_MKACTIVITY,        /* [RFC3253], Section 13.5 */
   45: 	HTTP_METHOD_MKCALENDAR,        /* [RFC4791], Section 5.3.1 */
   46: 	HTTP_METHOD_MKCOL,             /* [RFC4918], Section 9.3 */
   47: 	HTTP_METHOD_MKREDIRECTREF,     /* [RFC4437], Section 6 */
   48: 	HTTP_METHOD_MKWORKSPACE,       /* [RFC3253], Section 6.3 */
   49: 	HTTP_METHOD_MOVE,              /* [RFC4918], Section 9.9 */
   50: 	HTTP_METHOD_ORDERPATCH,        /* [RFC3648], Section 7 */
   51: 	HTTP_METHOD_PATCH,             /* [RFC5789], Section 2 */
   52: 	HTTP_METHOD_PROPFIND,          /* [RFC4918], Section 9.1 */
   53: 	HTTP_METHOD_PROPPATCH,         /* [RFC4918], Section 9.2 */
   54: 	HTTP_METHOD_REBIND,            /* [RFC5842], Section 6 */
   55: 	HTTP_METHOD_REPORT,            /* [RFC3253], Section 3.6 */
   56: 	HTTP_METHOD_SEARCH,            /* [RFC5323], Section 2 */
   57: 	HTTP_METHOD_UNBIND,            /* [RFC5842], Section 5 */
   58: 	HTTP_METHOD_UNCHECKOUT,        /* [RFC3253], Section 4.5 */
   59: 	HTTP_METHOD_UNLINK,            /* [RFC2068], Section 19.6.1.3 */
   60: 	HTTP_METHOD_UNLOCK,            /* [RFC4918], Section 9.11 */
   61: 	HTTP_METHOD_UPDATE,            /* [RFC3253], Section 7.1 */
   62: 	HTTP_METHOD_UPDATEREDIRECTREF, /* [RFC4437], Section 7 */
   63: 	HTTP_METHOD_VERSION_CONTROL    /* [RFC3253], Section 3.5 */
   64: } http_method_t;
   65: 
   66: typedef enum { HTTP_VERSION_UNSET = -1, HTTP_VERSION_1_0, HTTP_VERSION_1_1 } http_version_t;
   67: 
   68: typedef struct {
   69: 	int key;
   70: 
   71: 	char *value;
   72: } keyvalue;
   73: 
   74: typedef struct {
   75: 	char *key;
   76: 
   77: 	char *value;
   78: } s_keyvalue;
   79: 
   80: typedef struct {
   81: #ifdef HAVE_PCRE_H
   82: 	pcre *key;
   83: 	pcre_extra *key_extra;
   84: #endif
   85: 
   86: 	buffer *value;
   87: } pcre_keyvalue;
   88: 
   89: typedef enum { HTTP_AUTH_BASIC, HTTP_AUTH_DIGEST } httpauth_type;
   90: 
   91: typedef struct {
   92: 	char *key;
   93: 
   94: 	char *realm;
   95: 	httpauth_type type;
   96: } httpauth_keyvalue;
   97: 
   98: #define KVB(x) \
   99: typedef struct {\
  100: 	x **kv; \
  101: 	size_t used;\
  102: 	size_t size;\
  103: } x ## _buffer
  104: 
  105: KVB(keyvalue);
  106: KVB(s_keyvalue);
  107: KVB(httpauth_keyvalue);
  108: KVB(pcre_keyvalue);
  109: 
  110: const char *get_http_status_name(int i);
  111: const char *get_http_version_name(int i);
  112: const char *get_http_method_name(http_method_t i);
  113: const char *get_http_status_body_name(int i);
  114: int get_http_version_key(const char *s);
  115: http_method_t get_http_method_key(const char *s);
  116: 
  117: const char *keyvalue_get_value(keyvalue *kv, int k);
  118: int keyvalue_get_key(keyvalue *kv, const char *s);
  119: 
  120: keyvalue_buffer *keyvalue_buffer_init(void);
  121: int keyvalue_buffer_append(keyvalue_buffer *kvb, int k, const char *value);
  122: void keyvalue_buffer_free(keyvalue_buffer *kvb);
  123: 
  124: s_keyvalue_buffer *s_keyvalue_buffer_init(void);
  125: int s_keyvalue_buffer_append(s_keyvalue_buffer *kvb, const char *key, const char *value);
  126: void s_keyvalue_buffer_free(s_keyvalue_buffer *kvb);
  127: 
  128: httpauth_keyvalue_buffer *httpauth_keyvalue_buffer_init(void);
  129: int httpauth_keyvalue_buffer_append(httpauth_keyvalue_buffer *kvb, const char *key, const char *realm, httpauth_type type);
  130: void httpauth_keyvalue_buffer_free(httpauth_keyvalue_buffer *kvb);
  131: 
  132: pcre_keyvalue_buffer *pcre_keyvalue_buffer_init(void);
  133: int pcre_keyvalue_buffer_append(struct server *srv, pcre_keyvalue_buffer *kvb, const char *key, const char *value);
  134: void pcre_keyvalue_buffer_free(pcre_keyvalue_buffer *kvb);
  135: 
  136: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>