Osip源代码框架11--eXosip工作流程简介

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 流程拆解

在这里插入图片描述
把大流程拆成 「消息监听 → 定时器 / 事务处理 → 资源清理 → 保活」 四个核心阶段,梳理每个环节的作用:

  1. 消息监听阶段:eXosip_read_message
  2. 定时器与事务处理阶段(OSIP 核心逻辑)
  3. 资源释放清理阶段
  4. 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:遍历事务链表,执行队列里的事件(比如消息后半段处理、状态变更)。
  1. 资源释放清理阶段
    处理完事务后,开始 “收尾工作”,释放已结束的 call、registration、publication:
    在这里插入图片描述
    registration/publication 释放时,不会直接销毁事务,而是把事务从自身结构中移除,丢到 exosip 全局的 j_transaction 链表。
    真正的事务销毁在 eXosip_release_terminated_calls 里统一处理(延迟释放,保证流程完整性)
UDP 保活(可选)

触发条件:如果传输层用 UDP,必须调用它!
作用:给 registration 发心跳报文,维持 UDP 端口活性(防止系统因超时空闲关闭端口,导致后续消息收不到)

eXosip_read_message 处理流程

流程总览:
传层读消息 → 解析 + 回调 → 事务 / 请求判断 → 分类型处理(INVITE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八月的雨季997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值