首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mod_multicast没有向接收者传递正确的地址节

mod_multicast没有向接收者传递正确的地址节
EN

Stack Overflow用户
提问于 2016-03-07 18:38:04
回答 1查看 66关注 0票数 0

多播服务并不是将所有“到”属性传递给地址节的所有收件人。

UserA向UserB和UserC发送数据包

代码语言:javascript
复制
<message type="chat" to="multicast.example.com" id="">
  <addresses xmlns="http://jabber.org/protocol/address">
    <address type="to" jid="UserB@example.com"/>
    <address type="to" jid="UserC@example.com"/>
  </addresses>
  <body>One</body>
  <active xmlns="http://jabber.org/protocol/chatstates"/>
</message>

然而,UserB接收

代码语言:javascript
复制
<message xmlns="jabber:client" from="UserA@example.com/iPhone" to="UserB@example.com" type="chat" id="">
  <addresses xmlns="http://jabber.org/protocol/address">
    <address type="to" jid="UserB@example.com"/>
  </addresses>
  <body>One</body>
  <active xmlns="http://jabber.org/protocol/chatstates"/>
</message>

而UserC接收

代码语言:javascript
复制
<message xmlns="jabber:client" from="UserA@example.com/iPhone" to="UserC@example.com" type="chat" id="">
  <addresses xmlns="http://jabber.org/protocol/address">
    <address type="to" jid="UserC@example.com"/>
  </addresses>
  <body>One</body>
  <active xmlns="http://jabber.org/protocol/chatstates"/>
</message>

因此,UserB和UserC在address节中相互缺少'to'属性。

我使用ejabberd 16.01,我使用https://docs.ejabberd.im/admin/guide/configuration/#modmulticast来配置

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-09 12:13:36

试试这个零钱。这很奇怪,因为这些台词很多年前就没变过了。也许这个bug在别的地方,而这只是一个解决办法:

代码语言:javascript
复制
--- a/src/mod_multicast.erl
+++ b/src/mod_multicast.erl
@@ -599,7 +599,7 @@ add_addresses(Delivereds, Groups) ->
 add_addresses2(_, [], Res, _, []) -> Res;
 add_addresses2(Delivereds, [Group | Groups], Res, Pa,
               [Pi | Pz]) ->
-    Addresses = lists:append([Delivereds] ++ Pa ++ Pz),
+    Addresses = lists:append([Delivereds] ++ Pa ++ [Pi] ++ Pz),
     Group2 = Group#group{addresses = Addresses},
     add_addresses2(Delivereds, Groups, [Group2 | Res],
                   [Pi | Pa], Pz).
@@ -655,7 +655,7 @@ route_packet_multicast(From, ToS, Packet, AAttrs, Dests,
 route_packet2(From, ToS, Dests, Packet, AAttrs,
              Addresses) ->
     #xmlel{name = T, attrs = A, children = C} = Packet,
-    C2 = case append_dests(Dests, Addresses) of
+    C2 = case Addresses of
           [] -> C;
           ACs ->
               [#xmlel{name = <<"addresses">>, attrs = AAttrs,
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35851353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档