25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-22 16:20:52 +01:00

Don't use binary:match to extract lines from binaries

This was added in R13B3, lets roll our own implementation to make sure it
works on older erlang versions.
This commit is contained in:
Paweł Chmielowski 2012-04-06 18:55:27 +02:00
parent 82468bff00
commit 2c228e6414

View File

@ -923,12 +923,22 @@ old_integer_to_hex(I) when I>=16 ->
% The following code is mostly taken from yaws_ssl.erl
extract_line(_, <<>>, _) ->
none;
extract_line(0, <<"\r", Rest/binary>>, Line) ->
extract_line(1, Rest, Line);
extract_line(0, <<A:8, Rest/binary>>, Line) ->
extract_line(0, Rest, <<Line/binary, A>>);
extract_line(1, <<"\n", Rest/binary>>, Line) ->
{Line, Rest};
extract_line(1, Data, Line) ->
extract_line(0, Data, <<Line/binary, "\r">>).
decode_packet(_, <<"\r\n", Rest/binary>>) ->
{ok, http_eoh, Rest};
decode_packet(Type, Data) ->
case binary:match(Data, <<"\r\n">>) of
{Start, _Len} ->
<<LineB:Start/binary, _:2/binary, Rest/binary>> = Data,
case extract_line(0, Data, <<>>) of
{LineB, Rest} ->
Line = binary_to_list(LineB),
Result = case Type of
http ->