summaryrefslogtreecommitdiff
path: root/src/web/ejabberd_http.erl
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2012-02-14 11:35:17 +0100
committerBadlop <badlop@process-one.net>2012-02-14 11:35:52 +0100
commit7d623d5eb4352a7e150f55d9bde938ea9dd6f14b (patch)
treed84e70ca6f6d4fdf9443d6abd1e69f22183b63c6 /src/web/ejabberd_http.erl
parentReceiver should not generate an exception (diff)
Option default_host for handling HTTP requests with ambiguous Host (EJAB-1261)
Diffstat (limited to '')
-rw-r--r--src/web/ejabberd_http.erl15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/web/ejabberd_http.erl b/src/web/ejabberd_http.erl
index abfe4070..47ef97a0 100644
--- a/src/web/ejabberd_http.erl
+++ b/src/web/ejabberd_http.erl
@@ -65,6 +65,7 @@
request_tp,
request_headers = [],
end_of_request = false,
+ default_host,
trail = ""
}).
@@ -140,9 +141,12 @@ init({SockMod, Socket}, Opts) ->
end,
?DEBUG("S: ~p~n", [RequestHandlers]),
+ DefaultHost = gen_mod:get_opt(default_host, Opts, undefined),
+
?INFO_MSG("started: ~p", [{SockMod1, Socket1}]),
State = #state{sockmod = SockMod1,
socket = Socket1,
+ default_host = DefaultHost,
request_handlers = RequestHandlers},
receive_headers(State).
@@ -261,8 +265,9 @@ process_header(State, Data) ->
[State#state.socket,
State#state.request_method,
element(2, State#state.request_path)]),
- {Host, Port, TP} = get_transfer_protocol(SockMod,
+ {HostProvided, Port, TP} = get_transfer_protocol(SockMod,
State#state.request_host),
+ Host = get_host_really_served(State#state.default_host, HostProvided),
State2 = State#state{request_host = Host,
request_port = Port,
request_tp = TP},
@@ -294,6 +299,14 @@ process_header(State, Data) ->
add_header(Name, Value, State) ->
[{Name, Value} | State#state.request_headers].
+get_host_really_served(undefined, Provided) ->
+ Provided;
+get_host_really_served(Default, Provided) ->
+ case lists:member(Provided, ?MYHOSTS) of
+ true -> Provided;
+ false -> Default
+ end.
+
%% @spec (SockMod, HostPort) -> {Host::string(), Port::integer(), TP}
%% where
%% SockMod = gen_tcp | tls