【问题标题】:Freeswitch ESL client: application doesn't receive events from bLegFreeswitch ESL 客户端:应用程序未收到来自 bLeg 的事件
【发布时间】:2017-06-30 14:39:29
【问题描述】:

我们有 Freeswitch 使用 ESL(异步完全)和 Java 客户端应用程序。 当呼入呼叫到达时,应用程序通过 filter Channel-Call-UUID aLegUuid 进行过滤,并且此呼入通常桥接到 bLeg(带有 park_after_bridge 的桥接命令)。 所以我们在同一个 Netty Channel Handler 中接收来自两条腿的事件。

据我所知,在同一个 Netty Channel Handler 中,我们可以接收来自不同分支的事件:https://freeswitch.org/confluence/display/FREESWITCH/mod_event_socket

 filter plain all 
 filter plain CUSTOM conference::maintenance 
 filter Unique-ID $participantB 
 filter Unique-ID $participantA 
 filter Unique-ID $participantC 

有一种情况,bLeg 通过按 DTMF,将(transer XML 默认)aLeg 转移到“fifo with MOH”,然后 bLeg 拨打另一个号码。 bLeg 在此时停放 (park_after_bridge)。

在解除 aLeg 和 bLeg 的桥接之前,我们应用另一个过滤器来监听来自 A 和 B 的事件过滤 Unique-ID aLeg过滤 Unique-ID bLeg 但我们从B 偶尔。有些测试很好,有些则不行。

Insted,如果我们创建一个到 FS 的入站连接并应用相同的过滤器,我们会在桥接之前和之后接收来自 A、B 的事件。

那么,为什么在桥被破坏后,我们在主 Netty 通道处理程序 中没有收到来自 B 的事件,即使应用了过滤器? Netty 频道 是如何与来自 A 的事件绑定的?

提前感谢您的帮助

【问题讨论】:

    标签: java netty freeswitch


    【解决方案1】:

    在其 HipChat 上的 Freeswitch 会话之后,Mike Jerris 指出 piece of code 解释了为什么它没有按我预期的那样工作:

    if (send && switch_test_flag(l, LFLAG_MYEVENTS)) {
            char *uuid = switch_event_get_header(event, "unique-id");
            if (!uuid || (l->session && strcmp(uuid, switch_core_session_get_uuid(l->session)))) {
                send = 0;
            }
        }
    

    您只会看到在出站套接字连接上调用套接字应用程序的调用段的事件

    也感谢“Matthew Vale (@Mafoo)”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-16
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2020-10-15
      • 1970-01-01
      • 2017-09-24
      相关资源
      最近更新 更多