diff options
author | Pablo Polvorin <pablo.polvorin@process-one.net> | 2012-01-27 16:08:28 -0300 |
---|---|---|
committer | Pablo Polvorin <pablo.polvorin@process-one.net> | 2012-01-27 16:08:28 -0300 |
commit | fead37d1c5f26df901b3338655938410067e5926 (patch) | |
tree | a8dd82b30bc1e6e4890ef97a5924c94c49d8ccd1 /src | |
parent | Fixed 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.erl | 6 |
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; |