1 #ifndef __GSK_HTTP_SERVER_H_ 2 #define __GSK_HTTP_SERVER_H_ 3 4 #include "gskhttpheader.h" 5 #include "gskhttprequest.h" 6 #include "gskhttpresponse.h" 7 #include "../gskstream.h" 8 #include "../gskmainloop.h" 9 10 G_BEGIN_DECLS 11 12 /* --- typedefs --- */ 13 typedef struct _GskHttpServer GskHttpServer; 14 typedef struct _GskHttpServerResponse GskHttpServerResponse; 15 typedef struct _GskHttpServerClass GskHttpServerClass; 16 /* --- type macros --- */ 17 GType gsk_http_server_get_type(void) G_GNUC_CONST; 18 #define GSK_TYPE_HTTP_SERVER (gsk_http_server_get_type ()) 19 #define GSK_HTTP_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_HTTP_SERVER, GskHttpServer)) 20 #define GSK_HTTP_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_HTTP_SERVER, GskHttpServerClass)) 21 #define GSK_HTTP_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_HTTP_SERVER, GskHttpServerClass)) 22 #define GSK_IS_HTTP_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_HTTP_SERVER)) 23 #define GSK_IS_HTTP_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_HTTP_SERVER)) 24 25 typedef gboolean (*GskHttpServerTrap) (GskHttpServer *server, 26 gpointer data); 27 28 /* --- structures --- */ 29 struct _GskHttpServerClass 30 { 31 GskStreamClass stream_class; 32 void (*set_poll_request) (GskHttpServer *server, 33 gboolean do_poll); 34 void (*shutdown_request) (GskHttpServer *server); 35 }; 36 struct _GskHttpServer 37 { 38 GskStream stream; 39 GskHook has_request_hook; 40 GskBuffer incoming; 41 GskHttpServerResponse *first_response; 42 GskHttpServerResponse *last_response; 43 GskHttpServerResponse *trapped_response; 44 guint read_poll : 1; 45 guint write_poll : 1; 46 guint got_close : 1; 47 gint keepalive_idle_timeout_ms; /* or -1 for no timeout */ 48 GskSource *keepalive_idle_timeout; 49 }; 50 51 /* --- prototypes --- */ 52 #define GSK_HTTP_SERVER_HOOK(client) (&GSK_HTTP_SERVER (client)->has_request_hook) 53 #define gsk_http_server_trap(server,func,shutdown,data,destroy) \ 54 gsk_hook_trap (GSK_HTTP_SERVER_HOOK (server), (GskHookFunc) func, \ 55 (GskHookFunc) shutdown, data, destroy) 56 #define gsk_http_server_untrap(server) \ 57 gsk_hook_untrap (GSK_HTTP_SERVER_HOOK (server)) 58 59 60 GskHttpServer *gsk_http_server_new (void); 61 gboolean gsk_http_server_get_request (GskHttpServer *server, 62 GskHttpRequest **request_out, 63 GskStream **post_data_out); 64 void gsk_http_server_respond (GskHttpServer *server, 65 GskHttpRequest *request, 66 GskHttpResponse *response, 67 GskStream *content); 68 void gsk_http_server_set_idle_timeout 69 (GskHttpServer *server, 70 gint millis); 71 72 73 74 75 G_END_DECLS 76 77 #endif 78