@@ -30,12 +30,11 @@ *_modules; } - (OFPlugin *)loadModuleAtPath: (OFString *)path withConfig: (OFXMLElement *)config; -- (void)startWebserverOnHost: (OFString *)host - port: (uint16_t)port; +- (void)startWebserverWithListenConfig: (ListenConfig *)listenConfig; @end OF_APPLICATION_DELEGATE(ObjWebServer) @implementation ObjWebServer @@ -60,18 +59,12 @@ secondObject: module]]; } [modules makeImmutable]; _modules = [modules copy]; - for (OFPair OF_GENERIC(OFString *, OFNumber *) *listenHost in - [_config listenHosts]) { - OFString *host = [listenHost firstObject]; - OFNumber *port = [listenHost secondObject]; - - [self startWebserverOnHost: host - port: [port uInt16Value]]; - } + for (ListenConfig *listenConfig in [_config listenConfigs]) + [self startWebserverWithListenConfig: listenConfig]; } - (OFPlugin *)loadModuleAtPath: (OFString *)path withConfig: (OFXMLElement *)config { @@ -83,20 +76,28 @@ [module parseConfig: config]; return module; } -- (void)startWebserverOnHost: (OFString *)host - port: (uint16_t)port +- (void)startWebserverWithListenConfig: (ListenConfig *)listenConfig { OFHTTPServer *server = [OFHTTPServer server]; - [server setHost: host]; - [server setPort: port]; - [server setDelegate: self]; + [server setHost: [listenConfig host]]; + [server setPort: [listenConfig port]]; + + if ([listenConfig TLSCertificateFile] != nil && + [listenConfig TLSKeyFile] != nil) { + [server setUsesTLS: true]; + [server setCertificateFile: [listenConfig TLSCertificateFile]]; + [server setPrivateKeyFile: [listenConfig TLSKeyFile]]; + } + [server setNumberOfThreads: [OFSystemInfo numberOfCPUs] + 1]; + [server setDelegate: self]; - of_log(@"Starting server on host %@ port %" PRIu16, host, port); + of_log(@"Starting server on host %@ port %" PRIu16, + [listenConfig host], [listenConfig port]); [server start]; } - (void)server: (OFHTTPServer *)server @@ -113,6 +114,14 @@ if ([[module secondObject] handleRequest: request requestBody: requestBody response: response]) return; } + +- (bool)server: (OFHTTPServer *)server + didReceiveExceptionOnListeningSocket: (id)exception +{ + of_log(@"Exception on listening socket: %@", exception); + + return true; +} @end