summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2009-09-18 13:17:07 +0000
committerChristophe Romain <christophe.romain@process-one.net>2009-09-18 13:17:07 +0000
commit719aff1088c538886dbf91102d740eaddefb363d (patch)
tree6f30d5b711473b49f2503dba3d9883b4790d93b9 /src
parentremoved pretty printer from debug (diff)
Return terminal binding condition on max stanza size limit (thanks to Aleksey)
SVN Revision: 2600
Diffstat (limited to 'src')
-rw-r--r--src/web/ejabberd_http_bind.erl32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/web/ejabberd_http_bind.erl b/src/web/ejabberd_http_bind.erl
index a80c463a..550cef6d 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, "<body type='terminate' "
"condition='improper-addressing' "
"xmlns='" ++ ?NS_HTTP_BIND ++ "'/>"};
@@ -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, "<body type='terminate' "
+ "condition='undefined-condition' "
+ "xmlns='" ++ ?NS_HTTP_BIND ++ "'>Request Too Large</body>"}
+ 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} ->