]> granicus.if.org Git - ejabberd/commitdiff
Fix PEP broadcasting issue on ODBC (EJAB-1680)
authorChristophe Romain <christophe.romain@process-one.net>
Tue, 6 May 2014 11:29:35 +0000 (13:29 +0200)
committerChristophe Romain <christophe.romain@process-one.net>
Tue, 6 May 2014 11:29:35 +0000 (13:29 +0200)
src/mod_pubsub_odbc.erl

index dad839fd3c405af1b0562d1070e69b849e379a4e..45c30a11baad177e5b55e31bb0bae02b42ff30c2 100644 (file)
@@ -4077,15 +4077,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
@@ -4096,8 +4088,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)])));
        _ ->
@@ -4162,6 +4154,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>