From cfeb6f9c2b38b97f139b5cbc27fdd32d91e27c26 Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Thu, 10 Apr 2008 14:08:35 +0000 Subject: [PATCH] pubsub identity and database update bugfix SVN Revision: 1284 --- ChangeLog | 8 +++- src/mod_pubsub/mod_pubsub.erl | 64 ++++++++++++++++------------- src/mod_pubsub/nodetree_default.erl | 1 + 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6a888207e..a85c79b63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,12 @@ +2008-04-10 Christophe Romain + + * src/mod_pubsub/mod_pubsub.erl: fix identity and database update + bugfix + * src/mod_pubsub/nodetree_default.erl: Likewise + 2008-04-10 Mickael Remond - *src/ejabberd_c2s.erl: Uniform default value for empty privacy + * src/ejabberd_c2s.erl: Uniform default value for empty privacy list. Fixes (EJAB-603). 2008-04-08 Badlop diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 5b7fb2718..288582c0b 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -230,7 +230,7 @@ init_nodes(Host, ServerHost, ServedHosts) -> lists:foreach( fun(H) -> create_node(Host, ServerHost, ["home", H], service_jid(Host), ?STDNODE) - end, [ServerHost | ServedHosts]), + end, lists:usort([ServerHost | ServedHosts])), ok. update_database(Host) -> @@ -304,7 +304,7 @@ update_database(Host) -> identity(Host) -> Identity = case lists:member(?PEPNODE, plugins(Host)) of true -> [{"category", "pubsub"}, {"type", "pep"}]; - false -> [{"category", "pubsub"}] + false -> [{"category", "pubsub"}, {"type", "service"}] end, {xmlelement, "identity", Identity, []}. @@ -2266,38 +2266,44 @@ broadcast_by_caps({LUser, LServer, LResource}, Node, _Type, Stanza) -> [R|_] -> R; [] -> - ?ERROR_MSG("~p@~p is offline; can't deliver ~p to contacts", [LUser, LServer, Stanza]), "" end; _ -> LResource end, - case ejabberd_sm:get_session_pid(LUser, LServer, SenderResource) of - C2SPid when is_pid(C2SPid) -> - %% set the from address on the notification to the bare JID of the account owner - %% Also, add "replyto" if entity has presence subscription to the account owner - %% See XEP-0163 1.1 section 4.3.1 - Sender = jlib:make_jid(LUser, LServer, ""), - %%ReplyTo = jlib:make_jid(LUser, LServer, SenderResource), % This has to be used - case catch ejabberd_c2s:get_subscribed_and_online(C2SPid) of - ContactsWithCaps when is_list(ContactsWithCaps) -> - ?DEBUG("found contacts with caps: ~p", [ContactsWithCaps]), - lists:foreach( - fun({JID, Caps}) -> - case is_caps_notify(LServer, Node, Caps) of - true -> - To = jlib:make_jid(JID), - ejabberd_router ! {route, Sender, To, Stanza}; - false -> - ok - end - end, ContactsWithCaps); - _ -> - ok - end, - ok; - _ -> - ok + case SenderResource of + "" -> + ?DEBUG("~p@~p is offline; can't deliver ~p to contacts", [LUser, LServer, Stanza]), + ok; + _ -> + case ejabberd_sm:get_session_pid(LUser, LServer, SenderResource) of + C2SPid when is_pid(C2SPid) -> + %% set the from address on the notification to the bare JID of the account owner + %% Also, add "replyto" if entity has presence subscription to the account owner + %% See XEP-0163 1.1 section 4.3.1 + Sender = jlib:make_jid(LUser, LServer, ""), + %%ReplyTo = jlib:make_jid(LUser, LServer, SenderResource), % This has to be used + case catch ejabberd_c2s:get_subscribed_and_online(C2SPid) of + ContactsWithCaps when is_list(ContactsWithCaps) -> + ?DEBUG("found contacts with caps: ~p", [ContactsWithCaps]), + lists:foreach( + fun({JID, Caps}) -> + case is_caps_notify(LServer, Node, Caps) of + true -> + To = jlib:make_jid(JID), + ejabberd_router ! {route, Sender, To, Stanza}; + false -> + ok + end + end, ContactsWithCaps); + _ -> + ok + end, + ok; + _ -> + ?DEBUG("~p@~p has no session; can't deliver ~p to contacts", [LUser, LServer, Stanza]), + ok + end end; broadcast_by_caps(_, _, _, _) -> ok. diff --git a/src/mod_pubsub/nodetree_default.erl b/src/mod_pubsub/nodetree_default.erl index 3d98dd07c..732e72b3f 100644 --- a/src/mod_pubsub/nodetree_default.erl +++ b/src/mod_pubsub/nodetree_default.erl @@ -74,6 +74,7 @@ init(_Host, _ServerHost, _Opts) -> {index, [type,parentid]}]), NodesFields = record_info(fields, pubsub_node), case mnesia:table_info(pubsub_node, attributes) of + [host_node, host_parent, info] -> ok; % old schema, updated later by pubsub NodesFields -> ok; _ -> mnesia:transform_table(pubsub_node, ignore, NodesFields) end,