今天,来谈一下pjsip 模块框架(module framework)。弄清楚这个概念,就可以轻松地分析pjsip的sip消息的分发处理。

概念:

PJSIP模块框架的概念非常重要,负责在各组件之间分发sip消息。

对于接收或发送的sip消息,pjsip_endpoint根据优先级由高到低,依次分发消息到各module进行处理。

优先级的说明:

优先级的数值越小,

对应module的on_rx_request() 和 on_rx_response(),即接收消息时,优先级越高,

on_tx_request()和 on_tx_response(),即发送消息时,优先级越低;

反之,

对应module的on_rx_request() 和 on_rx_response(),即接收消息时,优先级越低,

on_tx_request()和 on_tx_response(),即发送消息时,优先级越高。

modules:

“mod-msg-print” 在pjsua_create()的pjsip_tpmgr_create()中注册。

pjsua_init()函数对其他的module进行注册。

如果需要进行新增自定义的module,可以在pjsua_init()函数中进行注册。

接下来,我将分析UAC端sip的几个基本方法,register、invite、ack、cancel、bye的处理流程。

pjsip代码分析(1)——modules框架相关推荐

  1. Pixhawk代码分析-源码框架

    源码框架 pixhawk代码框架: pixhawk代码框架基础分析: 阅读下面内容时请结合源码阅读,便于理解. The basic structure of ArduPilot is broken u ...

  2. Java 线程池框架核心代码分析

    转载自 Java 线程池框架核心代码分析 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executo ...

  3. beego 例子_beego框架代码分析

    前言 也许beego框架在国内应该是众多PHPer转go的首选,因为beego的MVC.ORM.完善的中文文档让PHPer们得心应手,毫无疑问我也是.这种感觉就像当年入门PHP时使用ThinkPHP一 ...

  4. 05-SA8155 QNX I2C框架及代码分析

    1. 描述 本文主要描述QNX I2C Drvier的相关内容,并以SA8155处理器为例讲解. I2C 是经常用到的一种总线协议,它只占用两个IO口资源,分别是SCL时钟信号线与SDA数据线, 两根 ...

  5. [7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析

    在上个章节<[6]深入浅出工作开源框架Camunda: 如何远程Debug camunda-webapp的源代码>笔者解释了如何进行Camunda的远程Debug,这个章节笔者给大家分享如 ...

  6. clang-tidy——静态代码分析框架

    clang-tidy--静态代码分析框架 clang-tidy介绍 clang-tidy是一个基于clang的静态代码分析框架,支持C++/C/Objective-C. 它是一个功能更强大的lint工 ...

  7. fcitx输入法代码分析总结

    fcitx输入法代码分析总结 fcitx处理输入的方式 fcitx的组织结构 fcitx的启动流程 im加载 用代码生成代码 继承 输入法开发接口 区位输入法详细分析 附注 fcitx处理输入的方式 ...

  8. 反汇编代码分析--函数调用

    C++反汇编代码分析--函数调用 代码如下: #include "stdlib.h" int sum(int a,int b,int m,int n) {   return a+b ...

  9. <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)

    2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...

  10. 【鸿蒙OS开发入门】06 - 启动流程代码分析之KernelOS:之启动Linux-4.19 Kernel内核 启动init进程

    [鸿蒙OS开发入门]06 - 启动流程代码分析之KernelOS:之启动Linux-4.19 Kernel内核 一.head.S 启动start_kernel() 1.1 start_kernel() ...

最新文章

  1. 谈谈《潜伏在办公室》对管理层的影响
  2. noip2018——题解总结
  3. Go 结构体的值传递和地址传递
  4. C语言学习之输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。
  5. MySQL存储过程及触发器
  6. Elasticsearch SQL插件
  7. 【高德地图】------- JavaScript实现高德地图经纬度获取地址位置
  8. 虚拟机里CDlinux 里的水滴 minidwep-gtk
  9. Android精仿淘宝/QQ空间标题栏渐变效果
  10. docker装LibreELEC_Linux和macOS系统安装LibreELEC的方法
  11. 单细胞分析实录(16): 非负矩阵分解(NMF)检测细胞异质性
  12. 案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。...
  13. 实时数据库和关系数据库的区别
  14. AD16常见问题(刚入门)
  15. Python画爱心——一颗会跳动的爱心~
  16. 天池比赛——新闻文本分类比赛(零基础入门NLP)
  17. docker push latest 和 保存历史版本
  18. 机械制造作业考研题目答案分享——工件的定位
  19. 傅老师课堂:最大子序列
  20. Labview 运行myrio发生冲突:拒绝访问:该终端配置的语言无法兼容主机LabVIEW语言。对于实时终端,可通过MAX修改终端的语言环境,确保终端语言与主机语言一致。

热门文章

  1. 【玩转Ubuntu】02. Ubuntu上搭建Android开发环境
  2. php中include包含文件路径查找过程
  3. C#两种创建快捷方式的方法
  4. 解读《输赢》:输赢在哪里?
  5. CentOS7下安装配置Tomcat环境
  6. linux笔记8.0
  7. amaze ui使用简介
  8. 我为什么要使用Webpack?
  9. LabVIEW--为控件添加说明信息
  10. 修改android的avd路径方法