I'm happy with the status now. Here are the stats:
[ebb.git] / drum.h
blob0eb713ac67f2cd6af9a99360f7bc639add08fcaa
1 /* Drum Web Server
2 * Copyright (c) 2007 Ry Dahl <ry.d4hl@gmail.com>
3 * All rights reserved.
4 */
6 #include <glib.h>
7 #include "tcp_server.h"
8 #include "mongrel/parser.h"
10 #ifndef drum_h
11 #define drum_h
13 typedef struct drum_server drum_server;
14 typedef struct drum_request drum_request;
16 #define DRUM_LOG_DOMAIN "Drum"
17 #define drum_error(str, ...) \
18 g_log(DRUM_LOG_DOMAIN, G_LOG_LEVEL_ERROR, str, ## __VA_ARGS__);
21 /*** Drum Server ***/
23 typedef void (*drum_request_cb_t)(drum_request*, void*);
25 drum_server* drum_server_new();
26 void drum_server_free(drum_server*);
27 void drum_server_stop(drum_server*);
28 void drum_server_start(drum_server*, char *host, int port, drum_request_cb_t, void *request_cb_data);
30 struct drum_server {
31 tcp_server *tcp_server;
32 void *request_cb_data;
33 drum_request_cb_t request_cb;
36 /*** Drum Request ***/
38 drum_request* drum_request_new(drum_server *, tcp_client *);
39 void drum_request_free(drum_request *);
41 struct drum_request {
42 drum_server *server;
43 tcp_client *client;
44 http_parser *parser;
45 GQueue *env; /* queue of drum_env_pairs */
46 GString *buffer;
49 typedef struct drum_env_pair {
50 const char *field;
51 size_t flen;
52 const char *value;
53 size_t vlen;
54 } drum_env_pair;
56 drum_env_pair* drum_env_pair_new(const char *field, size_t flen, const char *value, size_t vlen);
57 #define drum_env_pair_new2(f,v) drum_env_pair_new(f,strlen(f),v,strlen(v))
58 #define drum_env_pair_free(pair) free(pair)
61 #endif drum_h