Kamailio 的 uuid_kill

embedded/2024/10/21 11:34:30/

Kamailio 是否有类似 FreeSWITCH 的 uuid_kill 命令

试了试,发现还真的有

如果正在振铃,那么 tm.cancel 可以结束呼叫,参考链接:

https://kamailio.org/docs/modules/5.5.x/modules/tm.html#tm.rpc.cancel

如果已经应答,那么 dlg.terminate_dlg 可以结束呼叫,参考链接:

https://kamailio.org/docs/modules/5.5.x/modules/dialog.html#dlg.r.terminate_dlg

以官方的配置文件 https://github.com/kamailio/kamailio/blob/master/etc/kamailio.cfg 为基础,增加  dialog 模块

测试步骤如下:

1)192.168.1.131 上启动 kamailio

2)1000(ip 是 192.168.1.132)注册到 kamailio

3)1001(ip 是 192.168.1.120)注册到 kamailio

4)1000 呼叫 1001,振铃

5)kamcmd tm.list

{
        cell: 0x7f7756ef3000
        tindex: 37537
        tlabel: 494791369
        method: INVITE
        from: From: <sip:1000@192.168.1.131>;tag=N4y7FrQy60Bva

        to: To: <sip:1001@192.168.1.131>

        callid: Call-ID: 0264de75-e7d3-123a-cb9d-08002722ff3e

        cseq: CSeq: 46086918
        uas_request: yes
        tflags: 65
        outgoings: 1
        ref_count: 1
        lifetime: 22968048
}
kamcmd dlg.list

{
        h_entry: 289
        h_id: 50
        ref: 1
        call-id: 0264de75-e7d3-123a-cb9d-08002722ff3e
        from_uri: sip:1000@192.168.1.131
        to_uri: sip:1001@192.168.1.131
        state: 2
        start_ts: 0
        init_ts: 1641281418
        end_ts: 0
        timeout: 0
        lifetime: 43200
        dflags: 512
        sflags: 0
        iflags: 0
        caller: {
                tag: N4y7FrQy60Bva
                contact: sip:gw+kam@192.168.1.132:5080;transport=udp;gw=kam
                cseq: 46086918
                route_set:
                socket: udp:192.168.1.131:5060
        }
        callee: {
                tag: <null string>
                contact: <null string>
                cseq: <null string>
                route_set: <null string>
                socket: <null string>

        }
        profiles: {
        }
        variables: {
        }
}
6)如果运行下面这个命令(tm.cancel callid cseq)

kamcmd tm.cancel 0264de75-e7d3-123a-cb9d-08002722ff3e s:46086918  # 这里要加 s:,否则rpc 会认为是一个整数

那么 kamailio 向 uac 回 487,向 uas 发 cancel

7)如果 uas 正常应答

kamcmd tm.list 什么都不显示,现在没有了 Transaction

kamcmd dlg.list

{
        h_entry: 289
        h_id: 50
        ref: 2
        call-id: 0264de75-e7d3-123a-cb9d-08002722ff3e
        from_uri: sip:1000@192.168.1.131
        to_uri: sip:1001@192.168.1.131
        state: 4
        start_ts: 1641281434
        init_ts: 1641281418
        end_ts: 0
        timeout: 1641324634
        lifetime: 43200
        dflags: 515
        sflags: 0
        iflags: 0
        caller: {
                tag: N4y7FrQy60Bva
                contact: sip:gw+kam@192.168.1.132:5080;transport=udp;gw=kam
                cseq: 46086918
                route_set:
                socket: udp:192.168.1.131:5060
        }
        callee: {
                tag: 8a7b336a
                contact: sip:1001@192.168.1.120:8320;rinstance=64005a538988814c
                cseq: 0
                route_set:
                socket: udp:192.168.1.131:5060
        }
        profiles: {
        }
        variables: {
        }
}
dlg 的 state 发生了改变,而且 callee 里面有内容了

8) 运行下面命令

kamcmd dlg.terminate_dlg 0264de75-e7d3-123a-cb9d-08002722ff3e N4y7FrQy60Bva 8a7b336a #Callid, from tag, to tag

kamailio 同时向 uac 和 uas 发 bye 消息


http://www.ppmy.cn/embedded/15686.html

相关文章

从裸纤到OTN,聊聊网络传输那点事儿

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 在这个信息爆炸的时代&#xff0c;数据的流动就像一场没有终点的接力赛&#xff0c;而网络技术就是这场赛事中…

熵的基本概念

熵的基本概念 熵用来表示随机变量的不确定性&#xff0c;当所有可能事件的概率都相等时&#xff08;即均匀分布&#xff09;&#xff0c;熵达到最大值。 熵与机器学习中的应用 在机器学习&#xff0c;尤其是分类任务中&#xff0c;模型常常会输出一个概率分布&#xff0c;表示…

Youtube DNN

目录 1. 挑战 2. 系统整体结构 3.召回 4. 排序 5. 训练和测试样本的处理 1. 挑战 &#xff08;1&#xff09;规模。很多现有的推荐算法在小规模上效果好&#xff0c;但Youtobe规模很大。 &#xff08;2&#xff09;新颖度。Youtobe语料库是动态的&#xff0c;每秒都会有…

Unity进阶之ScriptableObject

目录 ScriptableObject 概述ScriptableObject数据文件的创建数据文件的使用非持久数据让其真正意义上的持久ScriptableObject的应用配置数据复用数据数据带来的多态行为单例模式化的获取数据 ScriptableObject 概述 ScriptableObject是什么 ScriptableObject是Unity提供的一个…

SpringBoot的 jar 可以直接运行 怎么解释

前述 在传统的Java应用程序开发和部署场景中&#xff0c;开发者往往需要经历一系列复杂的步骤才能将应用成功部署到生产环境。例如&#xff0c;对于基于Servlet规范的Java Web应用&#xff0c;开发完成后通常会被打包成WAR格式&#xff0c;然后部署到像Apache Tomcat、Jetty这…

使用Docker搭建Redis主从集群

文章目录 ☃️前言☃️搭建❄️❄️架构❄️❄️实例说明❄️❄️搭建第一个服务器上的两个实例❄️❄️搭建第二个服务器上的一个实例 ☃️开启主从❄️❄️改配置❄️❄️重启从节点 ☃️验证 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 …

【C++】抽象类 与 C++

基础 C中没有抽象类的概念C中通过纯虚函数实现抽象类纯虚函数只是定义原型的成员函数一个类中存在纯虚函数就成为了抽象类 纯虚函数语法 class Shape {public:virtual double area() 0;// 0 用于告诉编译器当前是声明纯虚函数&#xff0c;因此不需要定义函数体 };抽象类与纯虚…

MongoDB聚合运算符:$setEquals

MongoDB聚合运算符&#xff1a;$setEquals 文章目录 MongoDB聚合运算符&#xff1a;$setEquals语法使用举例 $setEquals聚合运算符用于比较两个或多个数组&#xff0c;如果它们有相同的不重复的元素&#xff0c;则返回true&#xff0c;否则返回false。 语法 { $setEquals: [ &…