forked from lda/telodendria
Start working on adding TLS support to HttpServer.
This commit is contained in:
parent
6561b5bae1
commit
b58ca7d22e
8 changed files with 37 additions and 13 deletions
|
@ -61,7 +61,7 @@ HttpRequest(HttpRequestMethod method, int flags, unsigned short port, char *host
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef TLS_IMPL
|
#ifndef TLS_IMPL
|
||||||
if (flags & HTTP_TLS)
|
if (flags & HTTP_FLAG_TLS)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ HttpRequest(HttpRequestMethod method, int flags, unsigned short port, char *host
|
||||||
|
|
||||||
if (!port)
|
if (!port)
|
||||||
{
|
{
|
||||||
if (flags & HTTP_TLS)
|
if (flags & HTTP_FLAG_TLS)
|
||||||
{
|
{
|
||||||
strcpy(serv, "https");
|
strcpy(serv, "https");
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ HttpRequest(HttpRequestMethod method, int flags, unsigned short port, char *host
|
||||||
freeaddrinfo(res0);
|
freeaddrinfo(res0);
|
||||||
|
|
||||||
#ifdef TLS_IMPL
|
#ifdef TLS_IMPL
|
||||||
if (flags & HTTP_TLS)
|
if (flags & HTTP_FLAG_TLS)
|
||||||
{
|
{
|
||||||
context->stream = TlsClientStream(sd, host);
|
context->stream = TlsClientStream(sd, host);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <Queue.h>
|
#include <Queue.h>
|
||||||
#include <Array.h>
|
#include <Array.h>
|
||||||
#include <Util.h>
|
#include <Util.h>
|
||||||
|
#include <Tls.h>
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -51,6 +52,7 @@ struct HttpServer
|
||||||
unsigned int nThreads;
|
unsigned int nThreads;
|
||||||
unsigned int maxConnections;
|
unsigned int maxConnections;
|
||||||
pthread_t socketThread;
|
pthread_t socketThread;
|
||||||
|
int flags;
|
||||||
|
|
||||||
volatile unsigned int stop:1;
|
volatile unsigned int stop:1;
|
||||||
volatile unsigned int isRunning:1;
|
volatile unsigned int isRunning:1;
|
||||||
|
@ -276,7 +278,7 @@ DequeueConnection(HttpServer * server)
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpServer *
|
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)
|
HttpHandler * requestHandler, void *handlerArgs)
|
||||||
{
|
{
|
||||||
HttpServer *server;
|
HttpServer *server;
|
||||||
|
@ -287,6 +289,13 @@ HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxCon
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef TLS_IMPL
|
||||||
|
if (flags & HTTP_FLAG_TLS)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
server = Malloc(sizeof(HttpServer));
|
server = Malloc(sizeof(HttpServer));
|
||||||
if (!server)
|
if (!server)
|
||||||
{
|
{
|
||||||
|
@ -295,6 +304,8 @@ HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxCon
|
||||||
|
|
||||||
memset(server, 0, sizeof(HttpServer));
|
memset(server, 0, sizeof(HttpServer));
|
||||||
|
|
||||||
|
server->flags = flags;
|
||||||
|
|
||||||
server->threadPool = ArrayCreate();
|
server->threadPool = ArrayCreate();
|
||||||
if (!server->threadPool)
|
if (!server->threadPool)
|
||||||
{
|
{
|
||||||
|
@ -632,7 +643,20 @@ HttpServerEventThread(void *args)
|
||||||
continue;
|
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);
|
fp = StreamFd(connFd);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!fp)
|
if (!fp)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&server->connQueueMutex);
|
pthread_mutex_unlock(&server->connQueueMutex);
|
||||||
|
|
|
@ -274,8 +274,8 @@ main(int argc, char **argv)
|
||||||
matrixArgs.config = tConfig;
|
matrixArgs.config = tConfig;
|
||||||
|
|
||||||
/* Bind the socket before possibly dropping permissions */
|
/* Bind the socket before possibly dropping permissions */
|
||||||
httpServer = HttpServerCreate(tConfig->listenPort, tConfig->threads, tConfig->maxConnections,
|
httpServer = HttpServerCreate(HTTP_FLAG_NONE, tConfig->listenPort, tConfig->threads,
|
||||||
MatrixHttpHandler, &matrixArgs);
|
tConfig->maxConnections, MatrixHttpHandler, &matrixArgs);
|
||||||
if (!httpServer)
|
if (!httpServer)
|
||||||
{
|
{
|
||||||
Log(lc, LOG_ERR, "Unable to create HTTP server on port %d: %s",
|
Log(lc, LOG_ERR, "Unable to create HTTP server on port %d: %s",
|
||||||
|
|
|
@ -29,6 +29,9 @@
|
||||||
#include <HashMap.h>
|
#include <HashMap.h>
|
||||||
#include <Stream.h>
|
#include <Stream.h>
|
||||||
|
|
||||||
|
#define HTTP_FLAG_NONE 0
|
||||||
|
#define HTTP_FLAG_TLS (1 << 0)
|
||||||
|
|
||||||
typedef enum HttpRequestMethod
|
typedef enum HttpRequestMethod
|
||||||
{
|
{
|
||||||
HTTP_METHOD_UNKNOWN,
|
HTTP_METHOD_UNKNOWN,
|
||||||
|
|
|
@ -29,9 +29,6 @@
|
||||||
#include <HashMap.h>
|
#include <HashMap.h>
|
||||||
#include <Http.h>
|
#include <Http.h>
|
||||||
|
|
||||||
#define HTTP_NONE 0
|
|
||||||
#define HTTP_TLS (1 << 0)
|
|
||||||
|
|
||||||
typedef struct HttpClientContext HttpClientContext;
|
typedef struct HttpClientContext HttpClientContext;
|
||||||
|
|
||||||
extern HttpClientContext *
|
extern HttpClientContext *
|
||||||
|
|
|
@ -37,7 +37,7 @@ typedef struct HttpServerContext HttpServerContext;
|
||||||
typedef void (HttpHandler) (HttpServerContext *, void *);
|
typedef void (HttpHandler) (HttpServerContext *, void *);
|
||||||
|
|
||||||
extern HttpServer *
|
extern HttpServer *
|
||||||
HttpServerCreate(unsigned short, unsigned int, unsigned int, HttpHandler *, void *);
|
HttpServerCreate(int, unsigned short, unsigned int, unsigned int, HttpHandler *, void *);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
HttpServerFree(HttpServer *);
|
HttpServerFree(HttpServer *);
|
||||||
|
|
|
@ -74,7 +74,7 @@ main(void)
|
||||||
{
|
{
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
|
||||||
server = HttpServerCreate(8008, 1, 1, HttpHandle, NULL);
|
server = HttpServerCreate(HTTP_FLAG_NONE, 8008, 1, 1, HttpHandle, NULL);
|
||||||
if (!HttpServerStart(server))
|
if (!HttpServerStart(server))
|
||||||
{
|
{
|
||||||
StreamPuts(StreamStderr(), "Unable to start HTTP server.\n");
|
StreamPuts(StreamStderr(), "Unable to start HTTP server.\n");
|
||||||
|
|
|
@ -57,7 +57,7 @@ main(int argc, char **argv)
|
||||||
char *val;
|
char *val;
|
||||||
|
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
int requestFlags = HTTP_NONE;
|
int requestFlags = HTTP_FLAG_NONE;
|
||||||
|
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
if (strcmp(uri->proto, "https") == 0)
|
if (strcmp(uri->proto, "https") == 0)
|
||||||
{
|
{
|
||||||
requestFlags |= HTTP_TLS;
|
requestFlags |= HTTP_FLAG_TLS;
|
||||||
}
|
}
|
||||||
|
|
||||||
cx = HttpRequest(method, requestFlags, uri->port, uri->host, uri->path);
|
cx = HttpRequest(method, requestFlags, uri->port, uri->host, uri->path);
|
||||||
|
|
Loading…
Reference in a new issue