]> granicus.if.org Git - ejabberd/commitdiff
Fix PEP broadcasting issue (EJAB-1680)
authorChristophe Romain <christophe.romain@process-one.net>
Tue, 6 May 2014 10:37:44 +0000 (12:37 +0200)
committerChristophe Romain <christophe.romain@process-one.net>
Tue, 6 May 2014 10:37:44 +0000 (12:37 +0200)
src/mod_pubsub.erl

index 515f2279066da429aa8ef820f488658039bddf52..168169a95190fbbdd84d6258c68bc7f27991036c 100644 (file)
@@ -4442,15 +4442,7 @@ broadcast_stanza(Host, _Node, _NodeId, _Type, NodeOptions, SubsByDepth, NotifyTy
 broadcast_stanza({LUser, LServer, LResource}, Publisher, Node, NodeId, Type, NodeOptions, SubsByDepth, NotifyType, BaseStanza, SHIM) ->
     broadcast_stanza({LUser, LServer, LResource}, Node, NodeId, Type, NodeOptions, SubsByDepth, NotifyType, BaseStanza, SHIM),
     %% Handles implicit presence subscriptions
-    SenderResource = case LResource of
-       [] -> 
-           case user_resources(LUser, LServer) of
-               [Resource|_] -> Resource;
-               _ -> <<>>
-           end;
-       _ ->
-           LResource
-    end,
+    SenderResource = user_resource(LUser, LServer, LResource),
     case ejabberd_sm:get_session_pid(LUser, LServer, SenderResource) of
        C2SPid when is_pid(C2SPid) ->
            Stanza = case get_option(NodeOptions, notification_type, headline) of
@@ -4461,8 +4453,8 @@ broadcast_stanza({LUser, LServer, LResource}, Publisher, Node, NodeId, Type, Nod
            %% Also, add "replyto" if entity has presence subscription to the account owner
            %% See XEP-0163 1.1 section 4.3.1
            ejabberd_c2s:broadcast(C2SPid,
-               {pep_message, binary_to_list(Node)++"+notify"},
-               _Sender = jlib:make_jid(LUser, LServer, ""),
+               {pep_message, <<((Node))/binary, "+notify">>},
+               _Sender = jlib:make_jid(LUser, LServer, <<"">>),
                _StanzaToSend = add_extended_headers(Stanza,
                    _ReplyTo = extended_headers([jlib:jid_to_string(Publisher)])));
        _ ->
@@ -4527,6 +4519,13 @@ subscribed_nodes_by_jid(NotifyType, SubsByDepth) ->
 user_resources(User, Server) ->
     ejabberd_sm:get_user_resources(User, Server).
 
+user_resource(User, Server, <<>>) ->
+    case user_resources(User, Server) of
+       [R | _] -> R;
+       _ -> <<>>
+    end;
+user_resource(_, _, Resource) -> Resource.
+
 %%%%%%% Configuration handling
 
 %%<p>There are several reasons why the default node configuration options request might fail:</p>