Sofia-SIP辅助文档十 - Sofia SIP用户代理库 - "nua" - 高层用户代理模块

Sofia-SIP辅助文档二十 - Sofia SIP用户代理库 - "http" - HTTP解析模块 http://sofia-sip.sourceforge.net/refdocs/http/index.html,翻译自官网的这张网页。 Module Meta Information The http module contains interface to the HTTP parser and the header and message objects. 阅读详情

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


模块元信息

nua模块是一个用户代理库,主要提供基本的SIP用户代理功能。它的功能包括呼叫管理,消息和事件获取。 

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

概述

The NUA API提供给高层应用开发人员一套透明并且完全控制的底层SIP协议引擎。NUA提供的呼叫语义基于nta模块内的事务语义。使用NUA可以创建各类不同的SIP用户代理,例如终端、网关或者MCU。

nua引擎对开发人员而言隐藏了很多底层的信令和媒体管理操作。在一种完全透明的方式下可以使用各类媒体接口。

应用程序和用户代理库内的协议引擎可以分处不同的线程内。协议引擎和应用程序使用事件进行通信,主要通过应用程序提供的回调函数。回调函数在应用程序线程上下文环境下被调用,会向其传递su_root_t对象。

NUA User下的Sofia概念

介绍

Sofia软件包基于一些特定基本的观点和概念。它们中的很多在Sofia工具库(su)内实现,并且针对最重要的操作功能和工具提供统一的接口。

下面这些章节包括创建一个基于NUA库的可工作应用程序的所有概念的描述。对应用程序开发人员而言SU库内以及Sofia软件包其他库内的工具接口都非常有用,但开发人员必须非常小心地使用它们,因为不正确地使用NUA库将会改变Sofia软件包的行为。请至su库查看更多的SU功能细节描述。

事件循环 - root对象

The NUA为事件驱动系统使用了反应器模式(也可以称为发布器模式或通知者模式)。Sofia在编程模型中采用了任务作为基本的执行单元。程序可以要求当一个特定的事件发生时,事件循环调用一个回调函数。事件可以是IO操作,计时器,或者其他任务发来的异步消息。

在应用程序中root对象是一个代表任务的句柄。同样,root对象还可以代表任务的主事件循环。通过root对象,任务代码可访问到它自身的上下文信息以及线程同步特性对象,例如等待对象、定时器和消息。

使用NUA功能的应用程序创建一个root对象,以及一个处理NUA事件的回调函数。可以用su_root_create()函数创建root对象,在nua_create()函数中注册回调函数。

root对象的类型是su_root_t。

请查看<sofia-sip/su_wait.h>和<su_root.c>两个源代码文件获得root对象的更多信息。

请查看nua_event_e章节获得更多的回调函数信息:http://sofia-sip.sourceforge.net/refdocs/nua/nua_8h.html#abca36033336ce16e538a279413d2ca51。

Magic

magic是可以绑定到任何对象的上下文指针术语。主事件循环负责调用回调函数,并且将这个指针传递给回调函数。Sofia栈维持这个上下文信息在通话和回调函数之间。应用程序可以使用上下文用来保存任何需要的信息。

内存处理

当为给定的任务分配很多内存块时,home-based内存管理非常有用。所有的内存分配均通过home内存,它维护着所有已分配内存的参考。当home内存被释放时,它将释放所有它参考的内存块。这将简化应用程序处理逻辑,因为应用程序不再需要保持监视每个已分配的内存块、不再需要再单独释放每块已分配的内存块。

使用NUA功能的应用程序可以使用su库提供的内存管理功能,但不使用这个功能也可以。

请参考<sofia-sip/su_alloc.h>文档以获得更多内存管理功能方面的信息。

Tags

Tagging是Sofia软件包中的一项将参数打包给函数的机制。它允许将具备不固定类型的可变个数参数传递给函数。对应用程序开发人员而言,tagging以宏的形式出现用来封装参数。展开tagging宏后将得到一个包含tag(说明参数的类型)和值(不透明数据的指针)的结构体。Sofia软件包内的各个层检查是否该由他们自身来处理这些参数还是应当传递给更低一层处理。

下面这些tag有着特殊的含义:

可向NUA函数提供tag值列表,但在参数列表的尾端必须如下图所示的参数:

tag_type_t   tag,
tag_value_t  value,
...);

参数列表中最后一个tag值必须是TAG_NULL()(或者TAG_END(),与TAG_NULL()一致)。

每个tag有两个版本:
NUTAG_<tagname> 
它接受一个值参数
NUTAG_<tagname>_REF 
它接受一个引用参数。后者与tl_gets()函数一块使用可以获取tag列表内的tag值。

对SIP头来说,还有额外的tag版本:
SIPTAG_<tagname>_STR 
这个tag版本接受C-语言类型的字符串作为参数。相应无_STR后缀版本接受解析过的结构体作为参数。

下面是一个包含tag值的NUA函数调用示例:

nua_unregister(op->op_handle,
               TAG_IF(use_registrar, NUTAG_REGISTRAR(registrar)),
               SIPTAG_CONTACT_STR("*"),
               SIPTAG_EXPIRES_STR("0"),
               TAG_NULL());

使用NUA功能的应用程序必须使用tag机制向函数传递参数。请参考nua_invite()函数的说明获得更多如何通过tag机制生成SIP消息的内容:http://sofia-sip.sourceforge.net/refdocs/nua/nua_8h.html#a8162fd7f0f1c693f2d49bb18f36acf52。

请参考<sofia-sip/su_tag.h>源代码文件获得更多tag方面的信息,和Sofia软件包内各个模块内针对本模块特定的tag信息。

调试和日志

Sofia软件包具备可配置的调试和日志功能,基于头文件中定义的功能。调试和日志细节(例如输出内容等级以及输出文件名)可通过环境变量、配置文件中的指令以及源代码文件中的编译指令决定。

指令和环境变量包括:

  • SOFIA_DEBUG 缺省调试等级(0..9)
  • NUA_DEBUG NUA调试等级(0..9)
  • NTA_DEBUG 事务引擎调试等级(0..9)
  • TPORT_DEBUG 传输事件调试等级(0..9)
  • TPORT_LOG 如果设置了,打印所有传输层使用的解析过的SIP消息
  • TPORT_DUMP 保存传输层中所有未解析消息的转储文件名

预定义的调试输出等级:

  • 0 非常严重的错误
  • 1 严重错误,子系统层次最简化进度消息
  • 2 非严重错误
  • 3 告警,进度消息
  • 5 信令协议动作(呼入包...)
  • 7 媒体协议动作(呼入包...)
  • 9 进入/退出函数,极细致的进度消息

使用NUA功能的应用程序也可以使用Sofia软件包提供的调试和日志服务。但不使用调试和日志服务也可以。

请查看<sofia-sip/su_log.h>头文件获得更多的调试和日志功能。

NUA概念

NUA Stack对象

Stack对象表示一个SIP stack和媒体引擎实例。它包括stack根对象的引用,用户代理特殊配置,以及SIP事务引擎的引用。

nua_create()函数用来创建一个NUA stack对象,nua_destroy() 函数删除它。nua_shutdown()函数优雅地释放nua引擎维护着的活动状态的会话。

NUA stack对象的类型是nua_t。

NUA Operation Handle操作句柄

Operation handle表示一个抽象的SIP call/会话。它包括SIP对话和媒体会话的信息,call的状态机,高层SDP offer-answer协议,注册,订阅,发布,和简单的SIP事务。Operation handle也可以包含NUA创建的SIP消息中使用的tags列表。

一个operation handle由应用程序通过函数nua_handle()显示创建用来发送消息,或由栈在收到INVITE或MESSAGE消息后创建。应用程序通过调用nua_handle_destroy()函数删除它。

指示或响应事件与某一个特定的operation handle相关。

NUA operation handle的类型是nua_handle_t。

栈线程和消息传递

栈线程与应用程序线程是分开的,它提供了实时的协议栈操作以便应用程序线程可以做其它事情。

栈线程和应用程序线程之间的通信是异步方式的。大部分的NUA API将引起一条发给栈线程处理的消息,同样当栈线程发生了一些事它将向应用程序线程发送一条消息。提供给应用程序线程的消息将通过回调函数发送,回调函数是在应用程序调用su_root_run()或su_root_step()函数时提供的。

SIP消息和头操作

使用SIPTAG_ tags操作SIP消息。每个SIP tag有三个版本:

  • SIPTAG_<tagname>()接受解析过后的值作为参数。
  • SIPTAG_<tagname>_STR()接受未解析的字串作为参数。
  • SIPTAG_<tagname>_REF()接受一个引用作为参数,与tl_gets()函数一道使用从tag列表内取出tag值。
  • SIPTAG_<tagname>__STR_REF()接受一个引用作为参数,
基于Sofia-SIP与JavaScript的实时通信系统设计与实现 简介:Sofia-SIP是一个用C语言编写的开源SIP用户代理库,广泛用于构建VoIP和实时多媒体通信应用。它支持完整的SIP协议功能,具备高性能、模块化和标准兼容等特点,适用于开发SIP客户端、服务器和网关。结合JavaScript前端技术,可通过WebSocket等机制实现与Sofia-SIP的实时交互,构建动态Web通信界面。本项目涵盖SIP会话控制、身份验证、传输协议支持及JavaScript在WebRTC、VoIP等场景中的集成应用,帮助开发者掌握现代实时通信系统的完整架构与实战开发。 阅读详情

相关推荐

深入解析freeSwitch SIP模块架构与实战应用

摘要认证作为SIP中最常用的认证方式,其设计初衷是在不依赖TLS的前提下防止密码在网络中以明文形式传输。其核心思想是利用哈希函数对共享密钥进行变换,生成不可逆的响应值。认证过程依赖以下参数:username: 用户名realm: 认证域,由服务器指定password: 明文密码(仅存于客户端)method: 请求方法(如REGISTER)uri: 请求的目标URInonce: 服务器生成的一次性随机数qop: 质询保护级别(如”auth”)

weixin_31641077的博客 1581

sofia-sip-1.13.7.tar.gz

源码文件

logisim实验——通过2个半加器实现1-bit全加器,通过4个一位全加器构成4-bit加法器(详解)

一、由异或门和与门所构成的半加器: 二、由两个半加器构成的1-bit全加器: ..

zep 1万+

期权专题9:雪球期权(一)(BSM+蒙特卡罗定价)

python;雪球定价;蒙特卡罗

mhmh123789的博客 8100

海思Hi3516CV610开发实战:在Ubuntu 22.04上从零构建嵌入式Linux开发环境

本文详细介绍了在Ubuntu 22.04上为海思Hi3516CV610开发板搭建嵌入式Linux开发环境的完整流程。从虚拟机配置、系统安装到基础环境设置,提供了实用技巧和常见问题解决方案,帮助开发者高效构建适用于智能视觉处理的开发环境。

weixin_29197699的博客 508

U8采购入库单CO接口开发实战:加载、新增与删除操作详解

本文详细解析了用友U8采购入库单CO接口的开发实战,重点介绍了加载、新增与删除三大核心操作的实现方法。通过C#代码示例和实际项目经验,帮助开发者高效处理采购入库单,提升企业供应链管理效率。文章还涵盖了环境配置、异常处理、性能优化等关键技巧,适合U8二次开发人员参考。

weixin_33462927的博客 372

SIwave:在 SIwave 中释放计算频率扫描的强大功能

AEDT 的电路工具允许注入正确的电压和电流。要使用电路工具,SIwave 必须首先使用 PI 求解器求解结构的 S 参数。

jkh920184196的博客 1474

RexUniNLU零样本通用自然语言理解:nlp_deberta_rex-uninlu_chinese-base模型实战解析

本文深入解析了RexUniNLU零样本通用自然语言理解模型(nlp_deberta_rex-uninlu_chinese-base)的实战应用。通过详细的环境配置、模型加载及实战案例,展示了该模型在零样本场景下的强大能力,如实体识别和复杂关系抽取,显著提升NLP任务效率。

weixin_29088655的博客 250

PCB Layout工程师核心能力与实战进阶指南

PCB Layout是电子硬件从原理图到物理实现的关键环节,本质是将电路逻辑转化为受电磁场、热力学与制造工艺约束的三维空间结构。其设计质量直接决定信号完整性(SI)、电源完整性(PI)和电磁兼容性(EMC)等核心性能指标。随着高速接口(如PCIe Gen5、USB3.2)、高密度封装(BGA微间距、HDI)及车规/工业级可靠性要求提升,Layout已从‘连线’演进为多目标协同优化的系统工程。掌握Altium Designer等EDA工具、理解叠层设计与DFM规则、具备SI/PI仿真意识,并能贯通芯片Data

weixin_42589700的博客 86

18、探索隐私工程技术的前沿:从理论到实践

本文深入探讨了隐私工程技术的核心概念、关键技术及其应用场景,分析了加密技术、访问控制和用户界面设计等在隐私保护中的作用,并结合数据库保护、物联网设备等实际场景进行阐述。同时,文章还讨论了隐私工程技术面临的挑战与未来发展趋势,提出了数据最小化原则、差分隐私、隐私增强技术等优化策略以及隐私设计、隐私影响评估等最佳实践,最后展望了新兴技术对隐私保护的影响及法规推动下的发展方向。

weixin_35307279的博客 372

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值