aboutsummaryrefslogtreecommitdiff
path: root/src/web
diff options
context:
space:
mode:
Diffstat (limited to 'src/web')
-rw-r--r--src/web/ejabberd_http.erl52
1 files changed, 20 insertions, 32 deletions
diff --git a/src/web/ejabberd_http.erl b/src/web/ejabberd_http.erl
index bc8947cda..1543d55b3 100644
--- a/src/web/ejabberd_http.erl
+++ b/src/web/ejabberd_http.erl
@@ -192,38 +192,30 @@ receive_headers(State) ->
_ ->
case Data of
{ok, Binary} ->
- process_requests(State, binary_to_list(Binary));
+ {Request, Trail} = parse_request(
+ State,
+ State#state.trail ++ binary_to_list(Binary)),
+ State1 = State#state{trail = Trail},
+ NewState = lists:foldl(
+ fun(D, S) ->
+ case S#state.end_of_request of
+ true ->
+ S;
+ _ ->
+ process_header(S, D)
+ end
+ end, State1, Request),
+ case NewState#state.end_of_request of
+ true ->
+ ok;
+ _ ->
+ receive_headers(NewState)
+ end;
_ ->
ok
end
end.
-process_requests(State, Data) ->
- {Request, Trail} = parse_request(
- State,
- State#state.trail ++ Data),
- State1 = State#state{trail = Trail},
- NewState = lists:foldl(
- fun(D, S) ->
- case S#state.end_of_request of
- true ->
- S;
- _ ->
- process_header(S, D)
- end
- end, State1, Request),
- case State1#state.trail of
- [] ->
- case NewState#state.end_of_request of
- true ->
- ok;
- _ ->
- receive_headers(NewState)
- end;
- _ ->
- process_requests(State1, "")
- end.
-
process_header(State, Data) ->
SockMod = State#state.sockmod,
Socket = State#state.socket,
@@ -599,11 +591,7 @@ recv_data(_State, 0, Acc) ->
recv_data(State, Len, Acc) ->
case State#state.trail of
[] ->
- Len2 = case State#state.sockmod of
- gen_tcp -> Len;
- _ -> 0
- end,
- case (State#state.sockmod):recv(State#state.socket, Len2, 300000) of
+ case (State#state.sockmod):recv(State#state.socket, Len, 300000) of
{ok, Data} ->
recv_data(State, Len - size(Data), [Acc | [Data]]);
_ ->