Options: \texttt{certfile}
\titem{\texttt{ejabberd\_http}}
Handles incoming HTTP connections.\\
- Options: \texttt{captcha}, \texttt{certfile}, \texttt{http\_bind}, \texttt{http\_poll},
+ Options: \texttt{captcha}, \texttt{certfile}, \texttt{default\_host}, \texttt{http\_bind}, \texttt{http\_poll},
\texttt{request\_handlers}, \texttt{tls}, \texttt{trusted\_proxies}, \texttt{web\_admin}\\
\end{description}
Simple web page that allows a user to fill a CAPTCHA challenge (see section \ref{captcha}).
\titem{\{certfile, Path\}} Full path to a file containing the default SSL certificate.
To define a certificate file specific for a given domain, use the global option \term{domain\_certfile}.
+ \titem{\{default\_host, undefined|HostName\}}
+ If the HTTP request received by ejabberd contains the HTTP header \term{Host}
+ with an ambiguous virtual host that doesn't match any one defined in ejabberd (see \ref{hostnames}),
+ then this configured HostName is set as the request Host.
+ The default value of this option is: \term{undefined}.
\titem{\{hosts, [Hostname, ...], [HostOption, ...]\}} \ind{options!hosts}
The external Jabber component that connects to this \term{ejabberd\_service}
can serve one or more hostnames.
request_tp,
request_headers = [],
end_of_request = false,
+ default_host,
trail = ""
}).
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).
[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},
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