文章目录
eXosip时序图

eXosip 是 OSIP 的 “上层封装”,eXosip 管 “业务交互”:你直接调用 eXosip_call_invite()、eXosip_register() 等 API,不用关心 OSIP 底层事务。
OSIP 管 “协议细节”:定时器、事务(Transaction)、消息解析等逻辑,eXosip 内部通过 OSIP 库实现。比如 eXosip_execute 里的 osip_timers_*_execute,就是 OSIP 的核心逻辑。
eXosip主要流程

1. 配置基础参数
操作:设置 exosip 包容量、网关 IP(v4/v6)、UA 标识等(对应 设置 exosip 中的几个常量…)。
作用:
给 SIP 协议栈 “定规矩”:比如包容量决定能处理多大的 SIP 消息(避免溢出)。
user_agent 是客户端标识(服务端靠它识别你的设备 / 程序,类似 HTTP 的 User-Agent)
2. 激活 eXosip 状态
操作:eXosip_stop = 0(标记为 “允许运行” 状态)。
作用:
- 相当于给 eXosip “开机”,让后续流程(定时器、消息处理)能正常执行。
- 如果设为 1,eXosip 会进入 “停止待销毁” 状态,拒绝处理新逻辑。
3. 初始化进程间通信
操作:用 pipe 初始化多线程通信的信号 / 信号线程(对应 初始化多线程使用的信号和信号线程通信方式 pipe)
作用:定时器线程触发事件后,通过 pipe 通知业务线程处理。
4. 绑定 OSIP 核心库
操作:初始化 exosip 中的 osip(对应 初始化 exosip 中的 osip,用于管理 osip lib 库)
作用:
eXosip 是 OSIP 的 “上层封装”,这一步把两者绑定,让 eXosip 能调用 OSIP 的核心功能(事务管理、协议解析等)。
简单说:OSIP 是 “发动机”,eXosip 是 “方向盘 + 仪表盘”,这步就是把发动机装到车上。
5.注册回调函数
操作:初始化 osip 的 callback 函数(对应 初始化 osip 的 callback 回调函数)。
作用:让 OSIP 事件能 “通知” 到你的业务代码:比如收到 INVITE 时,触发你写的 on_invite_received 函数。
常见回调:呼叫事件、注册事件、消息收发事件(业务逻辑和协议栈解耦的关键)
6.初始化传输层
操作:配置 4 种传输方式(UDP/TCP/TLS/WS 等,对应 初始化传输层的 4 种不同的传输方式)。
作用:决定 SIP 消息怎么发:比如 UDP 适合低延迟(但不可靠),TCP 适合可靠传输(但稍慢)。
eXosip_execute 流程拆解

把大流程拆成 「消息监听 → 定时器 / 事务处理 → 资源清理 → 保活」 四个核心阶段,梳理每个环节的作用:
- 消息监听阶段:eXosip_read_message
- 定时器与事务处理阶段(OSIP 核心逻辑)
- 资源释放清理阶段
- UDP 保活(可选):_eXosip_keep_alive
1. 消息监听阶段:eXosip_read_message
作用:线程持续监听 “是否有新消息到达客户端”,是整个流程的 “入口触发器”。
特殊点:
接收消息是 “被动监听”,但发送消息由管理程序主动调用接口触发(比如业务层调用 eXosip_message_send 这类接口)。
收到消息后,可能触发:
新建 call、transaction(事务)
生成 transaction 事件、exosip 事件(最终上报给管理程序处理)。
事件定义:所有事件类型在 exosip.h 的 eXosip_event_type 枚举里,业务层根据枚举做不同逻辑(比如 EXOSIP_CALL_INVITE 处理呼叫邀请)。
2.定时器与事务处理阶段(OSIP 核心逻辑)
消息预处理后(或无新消息时),进入 OSIP 事务定时器 + 事件执行 环节,分两步:

- osip_timers_*_execute:遍历 4 类事务链表(_ict/_nict/_ist/_nist)的定时器,超时则生成新定时器事件,丢进事务的事件队列。
- osip_*_execute:遍历事务链表,执行队列里的事件(比如消息后半段处理、状态变更)。
- 资源释放清理阶段
处理完事务后,开始 “收尾工作”,释放已结束的 call、registration、publication:

registration/publication 释放时,不会直接销毁事务,而是把事务从自身结构中移除,丢到 exosip 全局的 j_transaction 链表。
真正的事务销毁在 eXosip_release_terminated_calls 里统一处理(延迟释放,保证流程完整性)
UDP 保活(可选)
触发条件:如果传输层用 UDP,必须调用它!
作用:给 registration 发心跳报文,维持 UDP 端口活性(防止系统因超时空闲关闭端口,导致后续消息收不到)
eXosip_read_message 处理流程
流程总览:
传层读消息 → 解析 + 回调 → 事务 / 请求判断 → 分类型处理(INVITE

最低0.47元/天 解锁文章
3793

被折叠的 条评论
为什么被折叠?



