diff options
author | Badlop <badlop@process-one.net> | 2012-02-14 11:35:17 +0100 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2012-02-14 11:35:52 +0100 |
commit | 7d623d5eb4352a7e150f55d9bde938ea9dd6f14b (patch) | |
tree | d84e70ca6f6d4fdf9443d6abd1e69f22183b63c6 /src/web/ejabberd_http.erl | |
parent | Receiver 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.erl | 15 |
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 |