diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mod_pubsub/mod_pubsub.erl | 64 | ||||
| -rw-r--r-- | src/mod_pubsub/nodetree_default.erl | 1 | 
2 files changed, 36 insertions, 29 deletions
| diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 43bd7d9ac..134629c27 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -232,7 +232,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) -> @@ -306,7 +306,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, []}. @@ -2280,38 +2280,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 0a36e3362..6dec6c5e4 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, | 
