summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2008-12-23 10:51:44 +0000
committerChristophe Romain <christophe.romain@process-one.net>2008-12-23 10:51:44 +0000
commit4d20367a0cd73bef3cf5f7aab953156885c38bde (patch)
treee5cc503cbb9b055a1f2c952b4b0ce5f4518fe1c2
parentImprove handling of PEP sent to external contacts (EJAB-825) (diff)
make caps store only required user_caps_default
SVN Revision: 1747
-rw-r--r--src/mod_caps.erl12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mod_caps.erl b/src/mod_caps.erl
index 408415bb..d39deb0f 100644
--- a/src/mod_caps.erl
+++ b/src/mod_caps.erl
@@ -234,11 +234,17 @@ handle_cast({note_caps, From,
#state{host = Host, disco_requests = Requests} = State) ->
%% XXX: this leads to race conditions where ejabberd will send
%% lots of caps disco requests.
- {_, _, R} = jlib:jid_tolower(From),
BJID = list_to_binary(jlib:jid_to_string(From)),
- BUID = list_to_binary(jlib:jid_to_string(jlib:jid_remove_resource(From))),
mnesia:dirty_write(#user_caps{jid = BJID, caps = Caps}),
- mnesia:dirty_write(#user_caps_default{uid = BUID, resource = R}),
+ case ejabberd_sm:get_user_resources(LUser, LServer) of
+ [] ->
+ ok;
+ _ ->
+ % only store default resource of external contacts
+ {_, _, R} = jlib:jid_tolower(From),
+ BUID = list_to_binary(jlib:jid_to_string(jlib:jid_remove_resource(From))),
+ mnesia:dirty_write(#user_caps_default{uid = BUID, resource = R}),
+ end,
SubNodes = [Version | Exts],
%% Now, find which of these are not already in the database.
Fun = fun() ->