File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / src / array.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 ARRAY_H
    2: #define ARRAY_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: #include "buffer.h"
   13: 
   14: #include <stdlib.h>
   15: 
   16: #define DATA_IS_STRING(x) (x->type == TYPE_STRING)
   17: 
   18: typedef enum { TYPE_UNSET, TYPE_STRING, TYPE_COUNT, TYPE_ARRAY, TYPE_INTEGER, TYPE_FASTCGI, TYPE_CONFIG } data_type_t;
   19: #define DATA_UNSET \
   20: 	data_type_t type; \
   21: 	buffer *key; \
   22: 	int is_index_key; /* 1 if key is a array index (autogenerated keys) */ \
   23: 	struct data_unset *(*copy)(const struct data_unset *src); \
   24: 	void (* free)(struct data_unset *p); \
   25: 	void (* reset)(struct data_unset *p); \
   26: 	int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
   27: 	void (*print)(const struct data_unset *p, int depth)
   28: 
   29: typedef struct data_unset {
   30: 	DATA_UNSET;
   31: } data_unset;
   32: 
   33: typedef struct {
   34: 	data_unset  **data;
   35: 
   36: 	size_t *sorted;
   37: 
   38: 	size_t used;
   39: 	size_t size;
   40: 
   41: 	size_t unique_ndx;
   42: 
   43: 	size_t next_power_of_2;
   44: 	int is_weakref; /* data is weakref, don't bother the data */
   45: } array;
   46: 
   47: typedef struct {
   48: 	DATA_UNSET;
   49: 
   50: 	int count;
   51: } data_count;
   52: 
   53: data_count *data_count_init(void);
   54: 
   55: typedef struct {
   56: 	DATA_UNSET;
   57: 
   58: 	buffer *value;
   59: } data_string;
   60: 
   61: data_string *data_string_init(void);
   62: data_string *data_response_init(void);
   63: 
   64: typedef struct {
   65: 	DATA_UNSET;
   66: 
   67: 	array *value;
   68: } data_array;
   69: 
   70: data_array *data_array_init(void);
   71: 
   72: /**
   73:  * possible compare ops in the configfile parser
   74:  */
   75: typedef enum {
   76: 	CONFIG_COND_UNSET,
   77: 	CONFIG_COND_EQ,      /** == */
   78: 	CONFIG_COND_MATCH,   /** =~ */
   79: 	CONFIG_COND_NE,      /** != */
   80: 	CONFIG_COND_NOMATCH  /** !~ */
   81: } config_cond_t;
   82: 
   83: /**
   84:  * possible fields to match against
   85:  */
   86: typedef enum {
   87: 	COMP_UNSET,
   88: 	COMP_SERVER_SOCKET,
   89: 	COMP_HTTP_URL,
   90: 	COMP_HTTP_HOST,
   91: 	COMP_HTTP_REFERER,
   92: 	COMP_HTTP_USER_AGENT,
   93: 	COMP_HTTP_LANGUAGE,
   94: 	COMP_HTTP_COOKIE,
   95: 	COMP_HTTP_REMOTE_IP,
   96: 	COMP_HTTP_QUERY_STRING,
   97: 	COMP_HTTP_SCHEME,
   98: 	COMP_HTTP_REQUEST_METHOD,
   99: 
  100: 	COMP_LAST_ELEMENT
  101: } comp_key_t;
  102: 
  103: /* $HTTP["host"] ==    "incremental.home.kneschke.de" { ... }
  104:  * for print:   comp_key      op    string
  105:  * for compare: comp          cond  string/regex
  106:  */
  107: 
  108: typedef struct _data_config data_config;
  109: struct _data_config {
  110: 	DATA_UNSET;
  111: 
  112: 	array *value;
  113: 
  114: 	buffer *comp_key;
  115: 	comp_key_t comp;
  116: 
  117: 	config_cond_t cond;
  118: 	buffer *op;
  119: 
  120: 	int context_ndx; /* more or less like an id */
  121: 	array *childs;
  122: 	/* nested */
  123: 	data_config *parent;
  124: 	/* for chaining only */
  125: 	data_config *prev;
  126: 	data_config *next;
  127: 
  128: 	buffer *string;
  129: #ifdef HAVE_PCRE_H
  130: 	pcre   *regex;
  131: 	pcre_extra *regex_study;
  132: #endif
  133: };
  134: 
  135: data_config *data_config_init(void);
  136: 
  137: typedef struct {
  138: 	DATA_UNSET;
  139: 
  140: 	int value;
  141: } data_integer;
  142: 
  143: data_integer *data_integer_init(void);
  144: 
  145: typedef struct {
  146: 	DATA_UNSET;
  147: 
  148: 	buffer *host;
  149: 
  150: 	unsigned short port;
  151: 
  152: 	time_t disable_ts;
  153: 	int is_disabled;
  154: 	size_t balance;
  155: 
  156: 	int usage; /* fair-balancing needs the no. of connections active on this host */
  157: 	int last_used_ndx; /* round robin */
  158: } data_fastcgi;
  159: 
  160: data_fastcgi *data_fastcgi_init(void);
  161: 
  162: array *array_init(void);
  163: array *array_init_array(array *a);
  164: void array_free(array *a);
  165: void array_reset(array *a);
  166: int array_insert_unique(array *a, data_unset *str);
  167: data_unset *array_pop(array *a);
  168: int array_print(array *a, int depth);
  169: data_unset *array_get_unused_element(array *a, data_type_t t);
  170: data_unset *array_get_element(array *a, const char *key);
  171: void array_set_key_value(array *hdrs, const char *key, size_t key_len, const char *value, size_t val_len);
  172: data_unset *array_replace(array *a, data_unset *du);
  173: int array_strcasecmp(const char *a, size_t a_len, const char *b, size_t b_len);
  174: void array_print_indent(int depth);
  175: size_t array_get_max_key_length(array *a);
  176: 
  177: #endif

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