#include "llist.h"
#include "array.h"
#include "str.h"
+#include "hostpid.h"
#include "ioloop.h"
#include "istream.h"
#include "istream-timeout.h"
#include "master-service.h"
#include "master-service-ssl.h"
#include "http-date.h"
+#include "http-url.h"
#include "http-request-parser.h"
#include "http-server-private.h"
static void http_server_connection_ready(struct http_server_connection *conn)
{
+ const struct http_server_settings *set = &conn->server->set;
+ struct http_url base_url;
struct stat st;
if (conn->server->set.rawlog_dir != NULL &&
&conn->conn.input, &conn->conn.output);
}
+ i_zero(&base_url);
+ if (set->default_host != NULL)
+ base_url.host.name = set->default_host;
+ else if (conn->ip.family != 0)
+ base_url.host.ip = conn->ip;
+ else
+ base_url.host.name = my_hostname;
+ base_url.port = conn->port;
+ base_url.have_ssl = conn->ssl;
+
conn->http_parser = http_request_parser_init(
- conn->conn.input, NULL, &conn->server->set.request_limits,
+ conn->conn.input, &base_url, &conn->server->set.request_limits,
HTTP_REQUEST_PARSE_FLAG_STRICT);
o_stream_set_flush_callback(conn->conn.output,
http_server_connection_output, conn);
pool = pool_alloconly_create("http server", 1024);
server = p_new(pool, struct http_server, 1);
server->pool = pool;
+
+ if (set->default_host != NULL && *set->default_host != '\0')
+ server->set.default_host = p_strdup(pool, set->default_host);
if (set->rawlog_dir != NULL && *set->rawlog_dir != '\0')
server->set.rawlog_dir = p_strdup(pool, set->rawlog_dir);
if (set->ssl != NULL) {