diff options
author | deva <deva> | 2010-01-04 11:01:30 +0000 |
---|---|---|
committer | deva <deva> | 2010-01-04 11:01:30 +0000 |
commit | fc6e95c57f8f7f0acc083daf15dbac828e627e20 (patch) | |
tree | 79132d6c4f5dff5a848c6dbee3f6e1e1d50ec43b /server/src/server.cc | |
parent | 99832c46482751486e3348f2e5e18ee46d0a2856 (diff) |
Added config, cli and compiletime check for ssl usage. Still needs to check is microhttpd has ssl support.
Diffstat (limited to 'server/src/server.cc')
-rw-r--r-- | server/src/server.cc | 137 |
1 files changed, 22 insertions, 115 deletions
diff --git a/server/src/server.cc b/server/src/server.cc index 747e88c..9b8f7f1 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -26,6 +26,8 @@ */ #include "server.h" +#include <config.h> + #include "tcpsocket.h" #include <errno.h> @@ -204,39 +206,6 @@ static void httpderr(void *arg, const char *fmt, va_list ap) PRACRO_ERR_VA(server, fmt, ap); } -#define CERT "\ ------BEGIN CERTIFICATE-----\n\ -MIICFTCCAX6gAwIBAgIBAjANBgkqhkiG9w0BAQUFADBVMRswGQYDVQQKExJBcGFj\n\ -aGUgSFRUUCBTZXJ2ZXIxIjAgBgNVBAsTGUZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u\n\ -bHkxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0wNzA2MjEwODE4MzZaFw0wODA2MjAw\n\ -ODE4MzZaMEwxGzAZBgNVBAoTEkFwYWNoZSBIVFRQIFNlcnZlcjEZMBcGA1UECxMQ\n\ -VGVzdCBDZXJ0aWZpY2F0ZTESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3\n\ -DQEBAQUAA4GNADCBiQKBgQDWTACKSoxd5cL06w7RtPIhFqY1l3UE/aRGmPmh8gEo\n\ -w3zNf+gWxco2yjQgBTQhGww1ybOsAUtXPIsUOSFAGvPUKJZf8ibZMiJEzl2919uz\n\ -IcV9+cUm7k3jFPQx4ALQEalbV++o/lfT5lhgsSiH1t1eln2omVrGCjI/1HeYrw7X\n\ -owIDAQABMA0GCSqGSIb3DQEBBQUAA4GBALVFzprK6rYkWVZZZwq85w2lCYJpEl9a\n\ -66IMzIwNNRfyZMoc9D9PSwsXKYfYOg1RpMt7RhWT/bpggGlsFqctsAgJSv8Ol5Cz\n\ -DqTXhpV+8WOG6l4xDYZz3U3ajiu2jth2+aaMuWKy9Wkr8bzHGDufltToLalucne2\n\ -npM7yCJ83Ana\n\ ------END CERTIFICATE-----" - -#define KEY "\ ------BEGIN RSA PRIVATE KEY-----\n\ -MIICXAIBAAKBgQDWTACKSoxd5cL06w7RtPIhFqY1l3UE/aRGmPmh8gEow3zNf+gW\n\ -xco2yjQgBTQhGww1ybOsAUtXPIsUOSFAGvPUKJZf8ibZMiJEzl2919uzIcV9+cUm\n\ -7k3jFPQx4ALQEalbV++o/lfT5lhgsSiH1t1eln2omVrGCjI/1HeYrw7XowIDAQAB\n\ -AoGANUXHjJljs6P+hyw4DuHQn3El+ISiTo9PW02EIUIsD5opWFzHsYGR93Tk6GDi\n\ -yKgUrPprdAMOW61tVaWuImWQ32R2xyrJogjGYo9XE2xAej9N37jM0AGBtn/vd4Dr\n\ -LsYfpjNaM3gqIChD73iYfO+CrNbdLqTxIdG53g/u05GJ4cECQQD0vMm5+a8N82Jb\n\ -oHJgE2jb83WqaYBHe0O03ujtiq3+hPZHoVV3iJWmA/aMlgdtunkJT3PdEsVfQNkH\n\ -fvzR9JhbAkEA4CiZRk5Gcz7cEqyogDTMQYtmrE8hbgofISLuz1rpTEzd8hFAcerU\n\ -nuwFIT3go3hO7oIHMlKU1H5iT1BsFvegWQJBAOSa6A+5A+STIKAX+l52Iu+5tYKN\n\ -885RfMgZpBgm/yoMxwPX1r7GLYsajpV5mszLbz3cIo0xeH3mVBOlccEoqZsCQECP\n\ -8PWq/eebp09Jo46pplsKh5wBfqNvDuBAa4AVszRiv1pFVcZ52JudZyzX4aezsyhH\n\ -E0OPPYamkDI/+6Hx2KECQHF9xV1XatyXuFmfRAInK2BtfGY5UIvJaLxVD3Z1+i6q\n\ -/enz7/wUwvC6G4FSWNMYgAYJOfwZ3BerdkqcRNxyR/Q=\n\ ------END RSA PRIVATE KEY-----" - extern bool pracro_is_running; void server() { @@ -245,6 +214,11 @@ void server() bool forceshutdown = false; port_t port = Conf::server_port; + int flags = MHD_USE_DEBUG | MHD_USE_SELECT_INTERNALLY; // | MHD_USE_PEDANTIC_CHECKS +#ifndef WITHOUT_SSL + if(Conf::use_ssl) flags |= MHD_USE_SSL; +#endif + PRACRO_DEBUG(server, "Server running on port %d.\n", port); struct conn_t conn; @@ -252,19 +226,15 @@ void server() "", Conf::database_user, Conf::database_passwd, ""); struct MHD_Daemon *d; - d = MHD_start_daemon(MHD_USE_DEBUG - | MHD_USE_SELECT_INTERNALLY - // | MHD_USE_PEDANTIC_CHECKS - // | MHD_USE_SSL - , - port, - NULL, NULL, + d = MHD_start_daemon(flags, port, NULL, NULL, handle_request, &conn, MHD_OPTION_NOTIFY_COMPLETED, NULL, NULL, - // MHD_OPTION_CONNECTION_LIMIT, 42, - MHD_OPTION_HTTPS_MEM_KEY, KEY, - MHD_OPTION_HTTPS_MEM_CERT, CERT, - //MHD_OPTION_CONNECTION_TIMEOUT, 0, + MHD_OPTION_CONNECTION_LIMIT, Conf::connection_limit, +#ifndef WITHOUT_SSL + MHD_OPTION_HTTPS_MEM_KEY, Conf::ssl_key.c_str(), + MHD_OPTION_HTTPS_MEM_CERT, Conf::ssl_cert.c_str(), +#endif + MHD_OPTION_CONNECTION_TIMEOUT, Conf::connection_timeout, MHD_OPTION_EXTERNAL_LOGGER, httpderr, NULL, MHD_OPTION_END); @@ -276,11 +246,14 @@ void server() while(pracro_is_running) sleep(1); if(!forceshutdown && conn.sessions.size() != 0) { - char errbuf[128]; - snprintf(errbuf, sizeof(errbuf), "There are %d live sessions." - " Kill again to force shutdown.\n", conn.sessions.size()); - PRACRO_ERR_LOG(server, "%s", errbuf); - log(errbuf); + char *errbuf; + if(asprintf(&errbuf, "There are %d live sessions." + " Kill again to force shutdown.\n", + conn.sessions.size()) != -1) { + PRACRO_ERR_LOG(server, "%s", errbuf); + log(errbuf); + free(errbuf); + } pracro_is_running = true; forceshutdown = true; goto again; @@ -293,72 +266,6 @@ void server() } -#if 0 -//#define NON_FORKING -#include <sys/socket.h> -extern bool pracro_is_running; -void server() -{ - port_t port = Conf::server_port; - TCPSocket *socket = NULL; - - try { - socket = new TCPSocket("Listen socket"); - socket->listen(port); - } catch (Exception &e) { - PRACRO_ERR_LOG(server, "Error in listen:\n%s\n", e.what()); - delete socket; - socket = NULL; - return; - } - - while(pracro_is_running && socket->connected()) { - - { // Reload if new port is assigned. - int old_port = port; - port = Conf::server_port; - - if(port != old_port) { - // Start listening on the new port - delete socket; - socket = new TCPSocket("Listen socket (reloaded)"); - socket->listen(port); - } - } - - TCPSocket *child = socket->accept(); - if(child) { - -#ifndef NON_FORKING - switch(fork()) { - case -1: // error - PRACRO_ERR_LOG(server, "Could not fork: %s\n", strerror(errno)); - break; - - case 0: // child - delete socket; -#endif/*NON_FORKING*/ - handleConnection(child); - delete child; -#ifndef NON_FORKING - return; - - default: // parent - delete child; - break; - } -#endif/*NON_FORKING*/ - - } - } - - //socket->shutdown(); - delete socket; - - PRACRO_DEBUG(server, "Server gracefully shut down.\n"); -} -#endif//0 - #ifdef TEST_SERVER #include <sys/types.h> |