aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--src/mod_caps.erl23
2 files changed, 21 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d893eea3..6fddcda9a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-11 Christophe Romain <christophe.romain@process-one.net>
+
+ * src/mod_caps.erl: don't ask capabilities to MUC room participants
+ (EJAB-478)
+
2008-01-10 Christophe Romain <christophe.romain@process-one.net>
* src/mod_pubsub/nodetree_default: Force PEP parent node to be []
diff --git a/src/mod_caps.erl b/src/mod_caps.erl
index 1bec88817..1f89fbb84 100644
--- a/src/mod_caps.erl
+++ b/src/mod_caps.erl
@@ -64,20 +64,29 @@
%% <presence/> stanza) and returns an opaque value representing the
%% Entity Capabilities contained therein, or the atom nothing if no
%% capabilities are advertised.
-read_caps([{xmlelement, "c", Attrs, _Els} | Tail]) ->
+read_caps(Els) ->
+ read_caps(Els, nothing).
+read_caps([{xmlelement, "c", Attrs, _Els} | Tail], Result) ->
case xml:get_attr_s("xmlns", Attrs) of
?NS_CAPS ->
Node = xml:get_attr_s("node", Attrs),
Version = xml:get_attr_s("ver", Attrs),
Exts = string:tokens(xml:get_attr_s("ext", Attrs), " "),
- #caps{node = Node, version = Version, exts = Exts};
+ read_caps(Tail, #caps{node = Node, version = Version, exts = Exts});
_ ->
- read_caps(Tail)
+ read_caps(Tail, Result)
end;
-read_caps([_ | Tail]) ->
- read_caps(Tail);
-read_caps([]) ->
- nothing.
+read_caps([{xmlelement, "x", Attrs, _Els} | Tail], Result) ->
+ case xml:get_attr_s("xmlns", Attrs) of
+ ?NS_MUC_USER ->
+ nothing;
+ _ ->
+ read_caps(Tail, Result)
+ end;
+read_caps([_ | Tail], Result) ->
+ read_caps(Tail, Result);
+read_caps([], Result) ->
+ Result.
%% note_caps should be called to make the module request disco
%% information. Host is the host that asks, From is the full JID that