PJSIP开发手册之消息发送(七)

2024-01-13 18:32

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

第七章 发送消息

发送和接收消息是SIP应用的核心操作。每个模块里的on_rx_request()和on_rx_response()回调函数来处理接收到来的消息。

这章将介绍基本的发送外出消息的方法,例如,不使用transaction或dialog。

下一章Transaction介绍关于如何有状态地处理请求(到来请求和出去请求)。

发送消息概述

创建消息

PJSIP提供了多种API来创建请求和响应消息。下面是几种创建消息的方法:

  • 对于响应消息,最简单的方法是调用pjsip_endpt_create_response()函数
  • 对于请求消息,你可以使用pjsip_endpt_create_request(),pjsip_endpt_create_request_from_hdr(),pjsip_endpt_create_ack()或pjsip_endpt_create_cancel ()函数
  • 代理服务器可以根据到来的要转发的消息,来创建请求和响应,通过调用pjsip_endpt_create_request_fwd()和pjsip_endpt_create_response_fwd()函数
  •  或者你可以创建请求或响应,通过pjsip_endpt_create_tdata()创建传输缓存,pjsip_msg_create()来创建消息,pjsip_msg_add_hdr()或pjsip_msg_insert_first_hdr()来插入头部域,设置消息体,等等。
  • 高层的模块可以提供更多的方式去创建消息(如dialog层)。

所有的消息创建API(除了底层的pjsip_endpt_create_tdata())将设置传输缓存(pjsip_tx_data)的引用计数器为1,这意味着应用(或栈)在某个时刻必须减小引用计数器去销毁传输缓存。

所有的消息发送API将减小传输缓存(pjsip_tx_data)的引用计数器。这意味着如果应用没有对传输缓存的引用计数器做其他处理,这个缓存将在发送后销毁。

发送消息

调用pjsip_endpt_acquire_transport()和pjsip_transport_send()函数是最基本的发送消息的方式。但是,在这种工作方式下,你需要知道目的地址(即sockaddr,不仅仅是主机名)。因为从得到消息和精确的socket地址有一些步骤要做(例如,决定使用哪个地址

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



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

相关文章

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

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

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

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

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

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

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

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点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

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen