25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-26 17:38:45 +01:00

SSL sockets don't compute length of data (EJABS-1460)

This commit is contained in:
Christophe Romain 2011-03-15 13:53:38 +01:00
parent dcb068c7ad
commit 5ad1d08b89

View File

@ -189,30 +189,38 @@ receive_headers(State) ->
_ -> _ ->
case Data of case Data of
{ok, Binary} -> {ok, Binary} ->
{Request, Trail} = parse_request( process_requests(State, binary_to_list(Binary));
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 ok
end end
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) -> process_header(State, Data) ->
SockMod = State#state.sockmod, SockMod = State#state.sockmod,
Socket = State#state.socket, Socket = State#state.socket,
@ -571,7 +579,11 @@ recv_data(_State, 0, Acc) ->
recv_data(State, Len, Acc) -> recv_data(State, Len, Acc) ->
case State#state.trail of case State#state.trail of
[] -> [] ->
case (State#state.sockmod):recv(State#state.socket, Len, 300000) of Len2 = case State#state.sockmod of
gen_tcp -> Len;
_ -> 0
end,
case (State#state.sockmod):recv(State#state.socket, Len2, 300000) of
{ok, Data} -> {ok, Data} ->
recv_data(State, Len - size(Data), [Acc | Data]); recv_data(State, Len - size(Data), [Acc | Data]);
_ -> _ ->