diff --git a/src/HttpClient.c b/src/HttpClient.c index 52b3b6a..06be264 100644 --- a/src/HttpClient.c +++ b/src/HttpClient.c @@ -61,7 +61,7 @@ HttpRequest(HttpRequestMethod method, int flags, unsigned short port, char *host } #ifndef TLS_IMPL - if (flags & HTTP_TLS) + if (flags & HTTP_FLAG_TLS) { return NULL; } @@ -69,7 +69,7 @@ HttpRequest(HttpRequestMethod method, int flags, unsigned short port, char *host if (!port) { - if (flags & HTTP_TLS) + if (flags & HTTP_FLAG_TLS) { strcpy(serv, "https"); } @@ -130,7 +130,7 @@ HttpRequest(HttpRequestMethod method, int flags, unsigned short port, char *host freeaddrinfo(res0); #ifdef TLS_IMPL - if (flags & HTTP_TLS) + if (flags & HTTP_FLAG_TLS) { context->stream = TlsClientStream(sd, host); } diff --git a/src/HttpServer.c b/src/HttpServer.c index 5c08522..36ab699 100644 --- a/src/HttpServer.c +++ b/src/HttpServer.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -51,6 +52,7 @@ struct HttpServer unsigned int nThreads; unsigned int maxConnections; pthread_t socketThread; + int flags; volatile unsigned int stop:1; volatile unsigned int isRunning:1; @@ -276,7 +278,7 @@ DequeueConnection(HttpServer * server) } HttpServer * -HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxConnections, +HttpServerCreate(int flags, unsigned short port, unsigned int nThreads, unsigned int maxConnections, HttpHandler * requestHandler, void *handlerArgs) { HttpServer *server; @@ -287,6 +289,13 @@ HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxCon return NULL; } +#ifndef TLS_IMPL + if (flags & HTTP_FLAG_TLS) + { + return NULL; + } +#endif + server = Malloc(sizeof(HttpServer)); if (!server) { @@ -295,6 +304,8 @@ HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxCon memset(server, 0, sizeof(HttpServer)); + server->flags = flags; + server->threadPool = ArrayCreate(); if (!server->threadPool) { @@ -632,7 +643,20 @@ HttpServerEventThread(void *args) continue; } +#ifdef TLS_IMPL + if (server->flags & HTTP_FLAG_TLS) + { + /* TODO: Get server cert and key in here */ + fp = TlsServerStream(connFd, NULL, NULL); + } + else + { + fp = StreamFd(connFd); + } +#else fp = StreamFd(connFd); +#endif + if (!fp) { pthread_mutex_unlock(&server->connQueueMutex); diff --git a/src/Main.c b/src/Main.c index 6089b2c..afab7de 100644 --- a/src/Main.c +++ b/src/Main.c @@ -274,8 +274,8 @@ main(int argc, char **argv) matrixArgs.config = tConfig; /* Bind the socket before possibly dropping permissions */ - httpServer = HttpServerCreate(tConfig->listenPort, tConfig->threads, tConfig->maxConnections, - MatrixHttpHandler, &matrixArgs); + httpServer = HttpServerCreate(HTTP_FLAG_NONE, tConfig->listenPort, tConfig->threads, + tConfig->maxConnections, MatrixHttpHandler, &matrixArgs); if (!httpServer) { Log(lc, LOG_ERR, "Unable to create HTTP server on port %d: %s", diff --git a/src/include/Http.h b/src/include/Http.h index e307bfd..cfb8a91 100644 --- a/src/include/Http.h +++ b/src/include/Http.h @@ -29,6 +29,9 @@ #include #include +#define HTTP_FLAG_NONE 0 +#define HTTP_FLAG_TLS (1 << 0) + typedef enum HttpRequestMethod { HTTP_METHOD_UNKNOWN, diff --git a/src/include/HttpClient.h b/src/include/HttpClient.h index 8917098..f5329e8 100644 --- a/src/include/HttpClient.h +++ b/src/include/HttpClient.h @@ -29,9 +29,6 @@ #include #include -#define HTTP_NONE 0 -#define HTTP_TLS (1 << 0) - typedef struct HttpClientContext HttpClientContext; extern HttpClientContext * diff --git a/src/include/HttpServer.h b/src/include/HttpServer.h index 6703939..b52a141 100644 --- a/src/include/HttpServer.h +++ b/src/include/HttpServer.h @@ -37,7 +37,7 @@ typedef struct HttpServerContext HttpServerContext; typedef void (HttpHandler) (HttpServerContext *, void *); extern HttpServer * - HttpServerCreate(unsigned short, unsigned int, unsigned int, HttpHandler *, void *); + HttpServerCreate(int, unsigned short, unsigned int, unsigned int, HttpHandler *, void *); extern void HttpServerFree(HttpServer *); diff --git a/tools/src/http-debug-server.c b/tools/src/http-debug-server.c index 109abbb..cb42329 100644 --- a/tools/src/http-debug-server.c +++ b/tools/src/http-debug-server.c @@ -74,7 +74,7 @@ main(void) { struct sigaction sa; - server = HttpServerCreate(8008, 1, 1, HttpHandle, NULL); + server = HttpServerCreate(HTTP_FLAG_NONE, 8008, 1, 1, HttpHandle, NULL); if (!HttpServerStart(server)) { StreamPuts(StreamStderr(), "Unable to start HTTP server.\n"); diff --git a/tools/src/http.c b/tools/src/http.c index 13e088f..e42b8a2 100644 --- a/tools/src/http.c +++ b/tools/src/http.c @@ -57,7 +57,7 @@ main(int argc, char **argv) char *val; int flags = 0; - int requestFlags = HTTP_NONE; + int requestFlags = HTTP_FLAG_NONE; int ch; @@ -138,7 +138,7 @@ main(int argc, char **argv) if (strcmp(uri->proto, "https") == 0) { - requestFlags |= HTTP_TLS; + requestFlags |= HTTP_FLAG_TLS; } cx = HttpRequest(method, requestFlags, uri->port, uri->host, uri->path);