Sofia-SIP辅助文档十三 - Sofia SIP用户代理库 - "nta" - SIP事务模块

SIP 模块 - mod_sofia <br />SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解。<br />在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思。是这样的,Sofia-SIP 是由诺基亚公司开发的 SIP 协议栈,它以开源的许可证 LGPL 发布,为了避免重复发明轮子,FreeSWITCH 便直接使用了它。<br />在 FreeSWITCH 中,实现一些互联协议接口的模块称为 Endpoint。FreeSWITH 支持很多的 Endpoint, 如 SIP、H232等。 阅读详情

http://sofia-sip.sourceforge.net/refdocs/nta/index.html,翻译自官网的这张网页。


模块元信息

Sofia SIP Transaction API (nta)提供针对SIP事务、传输和消息处理的简单接口。nta接口计划是网络和用户元素(need translate again)。nta的公开接口在<sofia-sip/nta.h>头文件中定义,tag参数在<sofia-sip/nta_tag.h>头文件中定义。

联系人:
Pekka Pessi < Pekka.Pessi@nokia-email.address.hidden>
状态:
Sofia SIP Core library
许可:
LGPL

NTA Objects

NTA处理很多类对象:agent (nta_agent_t),call legs (nta_leg_t),客户端外呼请求(nta_outgoing_t),呼入的服务端请求(nta_incoming_t)。

NTA使用SIP消息对象msg_t和sip_t来处理消息,分别在<sofia-sip/msg.h>和<sofia-sip/sip.h>头文件中定义。SIP头都在<sofia-sip/sip.h>头文件中定义。

创建NTA代理

大部分的SIP实体,用户代理或网关,都由SIP服务器和SIP客户端协同工作组成。NTA提供nta_agent_t对象提供SIP服务器和客户端的简单接口。

调用nta_agent_create()函数将创建一个nta_agent_t对象。对象监听着传入的连接,接收消息,解析它们,并且将它们传递给应用程序。它还负责解析域名以及发送消息。

代理需要su_root_t对象来调度它自身的执行。root对象被用来等待网络事件,调度定时器函数,异步传递消息。root对象可通过su_root_create()函数创建。root对象可以有它自己的线程,或者它的主循环过程由其他应用程序线程通过调用su_root_run()函数来执行。主循环过程可以通过调用su_root_break()函数结束它。

一个简单的代理可以像如下这样来创建:

  registrar->reg_root = su_root_create(NULL);

  if (registrar->reg_root) {
    registrar->reg_agent = nta_agent_create(registrar->reg_root,
                                            (url_string_t*)argv[1],
                                            NULL,
                                            NULL,
                                            NULL);

    if (registrar->reg_agent) {
      su_root_run(registrar->reg_root);
      nta_agent_destroy(registrar->reg_agent);
    }

    su_root_destroy(registrar->reg_root);
  }

SIP服务器动作

SIP服务器会响应客户端发起的事务。SIP服务器可在两种模式下运作:无状态和有状态。这一节描述一个有状态的SIP服务器如何使用NTA。

NTA腿

一条腿用来表示有状态的事务处理。腿缺省这么被创建:

 default_leg = nta_leg_tcreate(agent, process_requests, context,
                               URLTAG_URL(url),
                               NTATAG_NO_DIALOG(1),
                               TAG_END());

url参数用来指定哪个URLs匹配这条腿。如果给出了url,只有那些requestURI匹配这个参数的请求才会被这条腿处理。nta_leg_tcreate() 函数也是一个tag参数函数,接收tagged参数列表。

正常的腿可被用来匹配已经存在的会话、通话或事务上下文的呼入请求,或提供有着连续头的呼出请求。当一个通话的腿被创建,From和To头会被提供给它,其他的头也可选择性地提供给它,例如Call-ID、Route或CSeq。

一个新的腿像这样被创建:

 call_leg = nta_leg_tcreate(agent,
                            process_call_requests, call_context,
                            
FreeSwitch(九):SIP模块 一、基本概念 (1)Sofia-sip:FreeSwitch使用了比较成熟的开源的SIP协议栈。 (2)EndPoint:互联协议接口模块。如SIP、H232. (3)mod_Sofia:实现了SIP中的注册服务器、重定向服务器、媒体服务器等各种功能。他的定位是一个B2BUA,不能实现代理服务器。 (4)SIP profile:在mod_sofia中,SIPprofile相当于SIPUA,通过不同的配置参数配置一个UA的行为。每个SIP profile可以监听不同的IP地址和端口。 (5)GetW 阅读详情

相关推荐

sofia sip协议栈

sofia-sip协议栈,可用于开发ip电话,比较轻巧,支持多系统。

金仓数据库KCM认证考试介绍【2025年4月更新】

金仓数据库认证资深专家KCM认证考试介绍

qq709869231的博客 3226

INFFUS 2025 | DDBFusion:基于双重分解和贝塞尔曲线的统一图像分解与融合框架

现有的图像融合算法大多集中于网络架构和损失函数的设计,采用统一的特征提取策略,却忽略了冗余信息和有效信息的划分。然而,对于互补信息而言,统一的特征提取器可能并不适用。因此,本文提出了一种基于贝塞尔曲线图像增强和分层分解的统一图像融合算法,并构建了一个自监督学习任务来学习有意义的信息。其中,贝塞尔曲线旨在模拟不同的图像特征,并构建特殊的自监督学习样本,因此作者的方法不需要特定任务的数据,并且可以在公共自然图像数据集上轻松进行训练。同时,作者的双重分解自监督训练方法可以为模型赋予冗余信息过滤能力。

小白学视觉 306

2.3 MMU Notifier(上):KVM 催生的页表变化通知

探讨了MMU Notifier机制的作用及其在虚拟化等场景中的应用。当CPU页表发生变更(如munmap、页面迁移等操作)时,需要通知拥有"第二套页表"的子系统(如KVM的EPT/NPT、IOMMU、GPU等)失效其映射。MMU Notifier通过订阅-通知机制实现这一功能,核心数据结构包括mmu_notifier订阅对象和回调接口mmu_notifier_ops。当CPU页表修改时,通过mmu_notifier_range描述变更范围,调用订阅者的回调函数进行同步,确保外部MMU与CPU页表一致性。

图形/计算GPU的驱动与虚拟化技术分享园地 1025

HSM 网络安全 信息安全

HSM HSM信息安全功能 汽车电子网络安全中HSM 的应用场景 选择适合汽车电子网络安全的 HSM 符合汽车安全标准和法规要求的HSM HSM 在汽车电子网络安全中的可靠性和安全性 评估汽车电子网络的安全性 汽车 HSM(Hardware Security Module)模块开发 汽车 HSM(Hardware Security Module)模块测试

天赐好车的博客 1235

OpenClaw人人养虾:接入Matrix

Matrix 是一个开放的去中心化通讯协议(Decentralized Communication Protocol),任何人都可以搭建自己的 Homeserver(家服务器)并与全球 Matrix 网络互联。OpenClaw 通过 Matrix Client-Server API 实现接入。

王国平的博客 526

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

路~可以走过 3682

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5681

实例详解C++程序的五大内存分区

本文详细讲述C++程序在运行时的5大内存分区。 下面使用日常开发中的编程实例,详细介绍一下这5个分区,以便大家能更深刻的理解这5大内存分区。 1、栈内存区 栈内存区是我们用的最多的分区,只要有函数的地方都会使用到这个分区。栈分区是用来存放函数参数及函数局部变量值的内存区,是由编译器在编译时自动分配和释放的。 函数中的参数与函数中的局部变量占用的内存是代码执行到函数(进入函数)是分配的,在............

dvlinker的技术专栏 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Sofia-SIP辅助文档十二 - Sofia SIP用户代理库 - "iptsec" - 认证模块
下一篇: Sofia-SIP辅助文档十四 - Sofia SIP用户代理库 - "tport" - 传输模块
Neohan
博客等级 码龄26年 33粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值