aboutsummaryrefslogtreecommitdiff
path: root/src/web/ejabberd_http.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/ejabberd_http.erl')
-rw-r--r--src/web/ejabberd_http.erl28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/web/ejabberd_http.erl b/src/web/ejabberd_http.erl
index 7569e11a9..1192791ad 100644
--- a/src/web/ejabberd_http.erl
+++ b/src/web/ejabberd_http.erl
@@ -32,6 +32,9 @@
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" "
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n").
+-define(HTML_DOCTYPE,
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">").
+
start(SockData, Opts) ->
supervisor:start_child(ejabberd_http_sup, [SockData, Opts]).
@@ -54,7 +57,9 @@ send_text(State, Text) ->
receive_headers(State) ->
- Data = (State#state.sockmod):recv(State#state.socket, 0, 300000),
+ SockMod = State#state.sockmod,
+ Socket = State#state.socket,
+ Data = SockMod:recv(Socket, 0, 300000),
?DEBUG("recv: ~p~n", [Data]),
case Data of
{ok, {http_request, Method, Path, _Version}} ->
@@ -78,7 +83,13 @@ receive_headers(State) ->
element(2, State#state.request_path)]),
Out = process_request(State),
send_text(State, Out),
- ok;
+ case SockMod of
+ gen_tcp ->
+ inet:setopts(Socket, [{packet, http}]);
+ ssl ->
+ ssl:setopts(Socket, [{packet, http}])
+ end,
+ receive_headers(#state{sockmod = SockMod, socket = Socket});
{error, _Reason} ->
ok;
_ ->
@@ -216,7 +227,14 @@ recv_data(State, Len, Acc) ->
make_xhtml_output(Status, Headers, XHTML) ->
- Data = list_to_binary([?XHTML_DOCTYPE, xml:element_to_string(XHTML)]),
+ Data = case lists:member(html, Headers) of
+ true ->
+ list_to_binary([?HTML_DOCTYPE,
+ xml:element_to_string(XHTML)]);
+ _ ->
+ list_to_binary([?XHTML_DOCTYPE,
+ xml:element_to_string(XHTML)])
+ end,
Headers1 = case lists:keysearch("Content-Type", 1, Headers) of
{value, _} ->
[{"Content-Length", integer_to_list(size(Data))} |
@@ -227,7 +245,9 @@ make_xhtml_output(Status, Headers, XHTML) ->
Headers]
end,
H = lists:map(fun({Attr, Val}) ->
- [Attr, ": ", Val, "\r\n"]
+ [Attr, ": ", Val, "\r\n"];
+ (_) ->
+ []
end, Headers1),
SL = ["HTTP/1.1 ", integer_to_list(Status), " ",
code_to_phrase(Status), "\r\n"],