adam@1881: #ifndef URWEB_TYPES_CPP_H adam@1881: #define URWEB_TYPES_CPP_H adam@1881: adam@1881: #include adam@1881: #include adam@1881: #include adam@1881: adam@1881: typedef long long uw_Basis_int; adam@1881: typedef double uw_Basis_float; adam@1881: typedef char* uw_Basis_string; adam@1881: typedef char uw_Basis_char; adam@1881: typedef struct { adam@1881: time_t seconds; adam@1881: unsigned microseconds; adam@1881: } uw_Basis_time; adam@1881: typedef struct { adam@1881: size_t size; adam@1881: char *data; adam@1881: } uw_Basis_blob; adam@1881: adam@1881: typedef int uw_unit; adam@1881: typedef uw_unit uw_Basis_unit; adam@1881: adam@1881: typedef enum uw_Basis_bool { uw_Basis_False, uw_Basis_True } uw_Basis_bool; adam@1881: adam@1881: typedef uw_Basis_string uw_Basis_xhtml; adam@1881: typedef uw_Basis_string uw_Basis_page; adam@1881: typedef uw_Basis_string uw_Basis_xbody; adam@1881: typedef uw_Basis_string uw_Basis_css_class; adam@1881: adam@1881: typedef unsigned uw_Basis_client; adam@1881: typedef struct { adam@1881: unsigned cli, chn; adam@1881: } uw_Basis_channel; adam@1881: adam@1881: typedef struct { adam@1881: int context; adam@1881: unsigned long long source; adam@1881: } uw_Basis_source; adam@1881: adam@1881: typedef struct uw_Basis_file { adam@1881: uw_Basis_string name, type; adam@1881: uw_Basis_blob data; adam@1881: } uw_Basis_file; adam@1881: adam@1881: typedef struct uw_Basis_postBody { adam@1881: uw_Basis_string type, data; adam@1881: size_t len; adam@1881: } uw_Basis_postBody; adam@1881: adam@1881: typedef uw_Basis_string uw_Basis_queryString; adam@1881: adam@1881: typedef struct { adam@1881: uw_Basis_string name, value, remaining; adam@1881: } uw_Basis_postField; adam@1881: adam@1881: typedef enum { SUCCESS, FATAL, BOUNDED_RETRY, UNLIMITED_RETRY, RETURN_INDIRECTLY } failure_kind; adam@1881: adam@1881: typedef enum { SERVED, KEEP_OPEN, FAILED } request_result; adam@1881: adam@1881: #define INTS_MAX 50 adam@1881: #define FLOATS_MAX 100 adam@1881: #define TIMES_MAX 100 adam@1881: adam@1881: typedef void (*uw_callback)(void *); adam@1881: typedef void (*uw_callback_with_retry)(void *, int will_retry); adam@1881: typedef void (*uw_logger)(void*, const char *fmt, ...); adam@1881: adam@1881: struct uw_context; adam@1881: adam@1881: typedef struct { adam@1881: void (*callback)(struct uw_context *); adam@1881: unsigned int period; adam@1881: } uw_periodic; adam@1881: adam@1881: typedef struct { adam@1881: int inputs_len, timeout; adam@1881: char *url_prefix; adam@1881: adam@1881: void (*client_init)(); adam@1881: void (*initializer)(struct uw_context *); adam@1881: void (*expunger)(struct uw_context *, uw_Basis_client); adam@1881: adam@1881: void (*db_init)(struct uw_context *); adam@1936: int (*db_begin)(struct uw_context *, int could_write); adam@1881: int (*db_commit)(struct uw_context *); adam@1881: int (*db_rollback)(struct uw_context *); adam@1881: void (*db_close)(struct uw_context *); adam@1881: adam@1881: void (*handle)(struct uw_context *, char *); adam@1881: adam@1881: int (*input_num)(const char*); adam@1881: uw_Basis_string (*cookie_sig)(struct uw_context *); adam@1881: int (*check_url)(const char *); adam@1881: int (*check_mime)(const char *); adam@1881: int (*check_requestHeader)(const char *); adam@1881: int (*check_responseHeader)(const char *); adam@1881: int (*check_envVar)(const char *); adam@1881: adam@1881: void (*on_error)(struct uw_context *, char *); adam@1881: adam@1881: uw_periodic *periodics; // 0-terminated array adam@1881: adam@1881: uw_Basis_string time_format; adam@1956: adam@1956: int is_html5; adam@1881: } uw_app; adam@1881: grrwlf@1997: typedef struct { grrwlf@1997: /* uw_app *app; */ grrwlf@1997: void *logger_data; grrwlf@1997: uw_logger log_error, log_debug; grrwlf@1997: } uw_loggers; grrwlf@1997: adam@1881: #define ERROR_BUF_LEN 1024 adam@1881: adam@1881: typedef struct { adam@1881: size_t max; adam@1881: char *start, *front, *back; adam@1881: } uw_buffer; adam@1881: adam@1881: #endif