From ba1e79e848c7df81517610af0f7096b8f7b7070f Mon Sep 17 00:00:00 2001 From: Pierre-Francois Carpentier Date: Fri, 18 Dec 2015 00:29:43 +0100 Subject: [PATCH] begin implementing the http part --- inc/rfc3161.h | 1 + src/cmd/uts-server.c | 2 ++ src/lib/rfc3161.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/inc/rfc3161.h b/inc/rfc3161.h index e69de29..d998d73 100644 --- a/inc/rfc3161.h +++ b/inc/rfc3161.h @@ -0,0 +1 @@ +int http_server_start(); diff --git a/src/cmd/uts-server.c b/src/cmd/uts-server.c index 8fe3498..5ca2ef6 100644 --- a/src/cmd/uts-server.c +++ b/src/cmd/uts-server.c @@ -7,6 +7,7 @@ #include #include #include "utils.h" +#include "rfc3161.h" const char *argp_program_version = UTS_VERSION; @@ -68,6 +69,7 @@ int main(int argc, char **argv) while (1) { //TODO: Insert daemon code here. + http_server_start(); syslog (LOG_NOTICE, "First daemon started."); sleep (5); break; diff --git a/src/lib/rfc3161.c b/src/lib/rfc3161.c index 420048f..b89be1d 100644 --- a/src/lib/rfc3161.c +++ b/src/lib/rfc3161.c @@ -7,4 +7,38 @@ #include #include #include +#include +int ts_http_respond(short event, ad_conn_t *conn, void *userdata) { + if (event & AD_EVENT_READ) { + if (ad_http_get_status(conn) == AD_HTTP_REQ_DONE) { + ad_http_response(conn, 200, "text/html", "Hello World", 11); + return ad_http_is_keepalive_request(conn) ? AD_DONE : AD_CLOSE; + } + } + return AD_OK; +} + +int http_default_handler(short event, ad_conn_t *conn, void *userdata) { + if (event & AD_EVENT_READ) { + if (ad_http_get_status(conn) == AD_HTTP_REQ_DONE) { + ad_http_response(conn, 501, "text/html", "Not implemented", 15); + return AD_CLOSE; // Close connection. + } + } + return AD_OK; +} + +int http_server_start() { + //SSL_load_error_strings(); + //SSL_library_init(); + ad_log_level(AD_LOG_DEBUG); + ad_server_t *server = ad_server_new(); + ad_server_set_option(server, "server.port", "8888"); + //ad_server_set_ssl_ctx(server, + // ad_server_ssl_ctx_create_simple("ssl.cert", "ssl.pkey")); + ad_server_register_hook(server, ad_http_handler, NULL); // HTTP Parser is also a hook. + ad_server_register_hook_on_method(server, "GET", ts_http_respond, NULL); + ad_server_register_hook(server, http_default_handler, NULL); + return ad_server_start(server); +}