Added a timeout watcher to TCP class - probably isn't working properly yet.
[ebb.git] / ebb.h
blob5881cf784c73436415311dc5630f164a34c197f3
1 /* Ebb Web Server
2 * Copyright (c) 2007 Ry Dahl <ry.d4hl@gmail.com>
3 * This software is released under the "MIT License". See README file for details.
4 */
6 #include <glib.h>
7 #include "tcp.h"
8 #include "mongrel/parser.h"
10 #ifndef ebb_h
11 #define ebb_h
13 typedef struct ebb_server ebb_server;
14 typedef struct ebb_client ebb_client;
16 #define EBB_LOG_DOMAIN "Ebb"
17 #define ebb_error(str, ...) \
18 g_log(EBB_LOG_DOMAIN, G_LOG_LEVEL_ERROR, str, ## __VA_ARGS__);
21 /*** Ebb Server ***/
23 typedef void (*ebb_request_cb_t)(ebb_client*, void*);
25 ebb_server* ebb_server_new();
26 void ebb_server_free(ebb_server*);
27 void ebb_server_stop(ebb_server*);
28 void ebb_server_start(ebb_server*, char *host, int port, ebb_request_cb_t, void *request_cb_data);
30 struct ebb_server {
31 tcp_server *socket;
32 void *request_cb_data;
33 ebb_request_cb_t request_cb;
36 /*** Ebb Client ***/
38 ebb_client* ebb_client_new(ebb_server *, tcp_client *);
39 void ebb_client_free(ebb_client*);
40 void ebb_client_close(ebb_client*);
41 int ebb_client_write(ebb_client*, const char *data, int length);
43 struct ebb_client {
44 ebb_server *server;
45 tcp_client *socket;
46 http_parser *parser;
47 GQueue *env; /* queue of ebb_env_pairs */
48 GString *buffer;
51 typedef struct ebb_env_pair {
52 const char *field;
53 size_t flen;
54 const char *value;
55 size_t vlen;
56 } ebb_env_pair;
58 ebb_env_pair* ebb_env_pair_new(const char *field, size_t flen, const char *value, size_t vlen);
59 #define ebb_env_pair_new2(f,v) ebb_env_pair_new(f,strlen(f),v,strlen(v))
60 #define ebb_env_pair_free(pair) free(pair)
62 #endif ebb_h