From f69037ea493a13e6687d7c068acb40bae87c4761 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Fri, 11 Oct 2013 17:15:28 -0400 Subject: New header file scheme to support FFI code in either of C or C++ [based on suggestion by Ron de Bruijn] --- include/urweb/types_cpp.h | 114 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 include/urweb/types_cpp.h (limited to 'include/urweb/types_cpp.h') diff --git a/include/urweb/types_cpp.h b/include/urweb/types_cpp.h new file mode 100644 index 00000000..330f7755 --- /dev/null +++ b/include/urweb/types_cpp.h @@ -0,0 +1,114 @@ +#ifndef URWEB_TYPES_CPP_H +#define URWEB_TYPES_CPP_H + +#include +#include +#include + +typedef long long uw_Basis_int; +typedef double uw_Basis_float; +typedef char* uw_Basis_string; +typedef char uw_Basis_char; +typedef struct { + time_t seconds; + unsigned microseconds; +} uw_Basis_time; +typedef struct { + size_t size; + char *data; +} uw_Basis_blob; + +typedef int uw_unit; +typedef uw_unit uw_Basis_unit; + +typedef enum uw_Basis_bool { uw_Basis_False, uw_Basis_True } uw_Basis_bool; + +typedef uw_Basis_string uw_Basis_xhtml; +typedef uw_Basis_string uw_Basis_page; +typedef uw_Basis_string uw_Basis_xbody; +typedef uw_Basis_string uw_Basis_css_class; + +typedef unsigned uw_Basis_client; +typedef struct { + unsigned cli, chn; +} uw_Basis_channel; + +typedef struct { + int context; + unsigned long long source; +} uw_Basis_source; + +typedef struct uw_Basis_file { + uw_Basis_string name, type; + uw_Basis_blob data; +} uw_Basis_file; + +typedef struct uw_Basis_postBody { + uw_Basis_string type, data; + size_t len; +} uw_Basis_postBody; + +typedef uw_Basis_string uw_Basis_queryString; + +typedef struct { + uw_Basis_string name, value, remaining; +} uw_Basis_postField; + +typedef enum { SUCCESS, FATAL, BOUNDED_RETRY, UNLIMITED_RETRY, RETURN_INDIRECTLY } failure_kind; + +typedef enum { SERVED, KEEP_OPEN, FAILED } request_result; + +#define INTS_MAX 50 +#define FLOATS_MAX 100 +#define TIMES_MAX 100 + +typedef void (*uw_callback)(void *); +typedef void (*uw_callback_with_retry)(void *, int will_retry); +typedef void (*uw_logger)(void*, const char *fmt, ...); + +struct uw_context; + +typedef struct { + void (*callback)(struct uw_context *); + unsigned int period; +} uw_periodic; + +typedef struct { + int inputs_len, timeout; + char *url_prefix; + + void (*client_init)(); + void (*initializer)(struct uw_context *); + void (*expunger)(struct uw_context *, uw_Basis_client); + + void (*db_init)(struct uw_context *); + int (*db_begin)(struct uw_context *); + int (*db_commit)(struct uw_context *); + int (*db_rollback)(struct uw_context *); + void (*db_close)(struct uw_context *); + + void (*handle)(struct uw_context *, char *); + + int (*input_num)(const char*); + uw_Basis_string (*cookie_sig)(struct uw_context *); + int (*check_url)(const char *); + int (*check_mime)(const char *); + int (*check_requestHeader)(const char *); + int (*check_responseHeader)(const char *); + int (*check_envVar)(const char *); + + void (*on_error)(struct uw_context *, char *); + + uw_periodic *periodics; // 0-terminated array + + uw_Basis_string time_format; +} uw_app; + +#define ERROR_BUF_LEN 1024 + +typedef struct { + size_t max; + char *start, *front, *back; +} uw_buffer; + +#endif -- cgit v1.2.3