From fead37d1c5f26df901b3338655938410067e5926 Mon Sep 17 00:00:00 2001 From: Pablo Polvorin Date: Fri, 27 Jan 2012 16:08:28 -0300 Subject: [PATCH] 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. --- src/mod_caps.erl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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;