aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPablo Polvorin <pablo.polvorin@process-one.net>2012-01-27 16:08:28 -0300
committerPablo Polvorin <pablo.polvorin@process-one.net>2012-01-27 16:08:28 -0300
commitfead37d1c5f26df901b3338655938410067e5926 (patch)
treea8dd82b30bc1e6e4890ef97a5924c94c49d8ccd1 /src
parentFixed ejabberd_http:get_line (diff)
Avoid multiple disco#info request for caps.
Only send it when we receive the presence from the user, if the user sends caps and we don't have it cached.
Diffstat (limited to 'src')
-rw-r--r--src/mod_caps.erl6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mod_caps.erl b/src/mod_caps.erl
index b98db6ac7..1f89b6cc3 100644
--- a/src/mod_caps.erl
+++ b/src/mod_caps.erl
@@ -168,7 +168,11 @@ user_receive_packet(_DebugFlag,
#jid{lserver = Server}, From, _To,
{xmlelement, "presence", Attrs, Els}) ->
Type = xml:get_attr_s("type", Attrs),
- if Type == ""; Type == "available" ->
+ IsRemote = not lists:member(From#jid.lserver, ?MYHOSTS),
+ %% Local users presence caps are already handled by user_send_packet.
+ %% Otherwise we could send multiple request when broadcasting presence
+ %% to every local subscriber.
+ if IsRemote and ((Type == "") or (Type == "available")) ->
case read_caps(Els) of
nothing ->
ok;