From 719aff1088c538886dbf91102d740eaddefb363d Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Fri, 18 Sep 2009 13:17:07 +0000 Subject: [PATCH] Return terminal binding condition on max stanza size limit (thanks to Aleksey) SVN Revision: 2600 --- src/web/ejabberd_http_bind.erl | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/web/ejabberd_http_bind.erl b/src/web/ejabberd_http_bind.erl index a80c463a7..550cef6d4 100644 --- a/src/web/ejabberd_http_bind.erl +++ b/src/web/ejabberd_http_bind.erl @@ -177,7 +177,7 @@ process_request(Data, IP) -> {ok, {"", Rid, Attrs, Payload}} -> case xml:get_attr_s("to",Attrs) of "" -> - ?INFO_MSG("Session not created (Improper addressing).~nAttributes: ~p", [Attrs]), + ?ERROR_MSG("Session not created (Improper addressing)", []), {200, ?HEADER, ""}; @@ -213,8 +213,16 @@ process_request(Data, IP) -> end, handle_http_put(Sid, Rid, Attrs, Payload2, PayloadSize, StreamStart, IP); - {error, size_limit} -> - {413, ?HEADER, "Request Too Large"}; + {size_limit, Sid} -> + case mnesia:dirty_read({http_bind, Sid}) of + [] -> + {404, ?HEADER, ""}; + [#http_bind{pid = FsmRef}] -> + gen_fsm:sync_send_all_state_event(FsmRef, {stop, close}), + {200, ?HEADER, "Request Too Large"} + end; _ -> ?DEBUG("Received bad request: ~p", [Data]), {400, ?HEADER, ""} @@ -393,10 +401,10 @@ handle_sync_event(#http_put{rid = Rid}, ?DEBUG("Shaper timer for RID ~p: ~p", [Rid, Reply]), {reply, Reply, StateName, StateData}; -handle_sync_event(#http_put{rid = _Rid, attrs = _Attrs, +handle_sync_event(#http_put{rid = Rid, attrs = Attrs, payload_size = PayloadSize, - hold = _Hold} = Request, - _From, StateName, StateData) -> + hold = Hold} = Request, + From, StateName, StateData) -> ?DEBUG("New request: ~p",[Request]), %% Updating trafic shaper {NewShaperState, NewShaperTimer} = @@ -1073,10 +1081,7 @@ send_outpacket(#http_bind{pid = FsmRef}, OutPacket) -> end end. -parse_request(_Data, PayloadSize, MaxStanzaSize) - when PayloadSize > MaxStanzaSize -> - {error, size_limit}; -parse_request(Data, _PayloadSize, _MaxStanzaSize) -> +parse_request(Data, PayloadSize, MaxStanzaSize) -> ?DEBUG("--- incoming data --- ~n~s~n --- END --- ", [Data]), %% MR: I do not think it works if put put several elements in the %% same body: @@ -1103,7 +1108,12 @@ parse_request(Data, _PayloadSize, _MaxStanzaSize) -> end end, Els), Sid = xml:get_attr_s("sid",Attrs), - {ok, {Sid, Rid, Attrs, FixedEls}} + if + PayloadSize =< MaxStanzaSize -> + {ok, {Sid, Rid, Attrs, FixedEls}}; + true -> + {size_limit, Sid} + end end end; {xmlelement, _Name, _Attrs, _Els} ->