PJSIP开发手册之事务(八)

2024-01-13 18:32
文章标签 开发 事务 手册 pjsip

本文主要是介绍PJSIP开发手册之事务(八),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第八章 Transaction

整体设计

介绍

PJSIP中的transation表示为pjsip_transaction结构,在<pjsip/sip_transaction.h>中。Transaction的生命周期通常有以下几步:

  • 通过pjsip_tsx_endpt_create_uac()/pjsip_tsx_create_uas()创建
  • 在初始化UAS之后,应用将需要调用pjsip_tsx_recv_msg()传入初始的请求消息,这样这个transaction的状态就从NULL变为TRYING。后续的重传请求将被这个事务终止。
  • 当应用想要使用这个Transaction发送请求或响应消息时,它将调用pjsip_tsx_send_msg()
  • 当有消息传给Transaction时(Endpoint传给的到来消息或TU传给的外出消息),或定时器超时,事务状态会自动改变,并且TU通过on_tsx_state()回调函数将被通知。
  • 如果Transaction的状态变为PJSIP_TSX_STATE_TERMINATED时,这个Transaction将被销毁。应用也可以调用pjsip_tsx_terminate()来强制终止这个Transaction。

定时器和重传

Transaction有两种类型的定时器:重传定时器和超时定时器。这两种定时器的值将被Transaction根据Transaction的类型(UAS或UAC),transport(可靠或不可靠),和请求方法(INVITE和non-INVITE)来设置。

应用只能在全局的基础上改变定时器的时间间隔(可能只有在编译的时候)。

一个Transaction处理包括到来和外出的重传。到来的重传会被Transaction安静地终止和忽略;Transaction不会发出任何通知。Transaction在需要时,会自动重传外出消息;同样也不发出任何通知。

INVITE最终响应和ACK请求

失败的INVITE请求

注意:Transaction严格遵循RFC3261来处理失败的INVITE请求。

客户端

这篇关于PJSIP开发手册之事务(八)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602403

相关文章

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3