SIP协议学习2-pjsip

一、    在windows下利用vc6.0编译pjsip源码

首先阅读文档readme.txt,查找在win32平台源码的编译方法。自己总结方法如下:

a.设置pjsua为当前活动工程

b.因为编译的时候提醒缺少config_site.h文件,所以在pjlib/include/pj/下新建一个空的config_site.h文件。

c. 提醒找不到IPHlpApi.h,因为microsoft已经不维护vc6.0所以缺少,下载最新的Platform SDKfor internet加入Tools -> Option ->Directories,Library files和include

d.编译出现unresolved external symbol _pj_get_sys_info错误,将pjlib\src\pj下的os_info.c加入pjlib工程

编译在pjsip-apps\bin下生成pjsua_vc6.exe。

1.     在Linux下编译pjsip源码

   $ ./configure

   $ make dep&& make clean && make

在/pjproject-2.1.0/pjsip-apps/bin下可以看到

pjsua-i686-pc-linux-gnu和pjsystest-i686-pc-linux-gnu

3    利用编译源码生成的app,模拟一次会话的建立,利用wireshark抓包分析sip协议。

Windows端ip;172.16.2.138

linux端ip;172.16.2.63

 

二、首先windows端运行pjsua_vc6.exe


先选择m,创建一个新的呼叫,然后输入sip:172.16.2.63(linux端地址)。然后终端打印如下信息,大致可分为三部分

 

 

1.起始行

   INVITE sip:172.162.63 SIP/2.0

   INVITE表示邀请用户参加一个会话,sip版本2.0

2.消息头字段

 

Via:SIP/2.0/UDP172.16.2.138:5060;rport;branch=z9hG4bKPj9d24f4650227482987e044d641050ef6

这里给出了请求经过的路径,应答请求将按照这个路径传送应答请求。分别是传输层协议、客户名和地址,及接收响应的端口号

Max-Forwards: 70

标明请求被转发的最大次数

From:<sip:172.16.2.138>;tag=50bc6da5f91d441fb8802d2692c9ac5e

请求发送者

To: sip:172.16.2.63

请求接收者

Contact:<sip:172.16.2.138:5060;ob>

一个用来直接访问发送者的url

Call-ID: fdc4d3c08c594ac499b184fbdbc35550

一个全局的唯一标志,用来唯一标志这个呼叫

CSeq: 2322 INVITE

用来标识发送不同请求

Allow: PRACK, INVITE, ACK, BYE, CANCEL,UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS

Supported: replaces, 100rel, timer,norefersub

Session-Expires: 1800

Min-SE: 90

以上标识服务器制定传送地址有关响应的附加信息

User-Agent: PJSUA v1.16.0win32-5.1/i386/msvc-12.0

发送请求代理相关信息

Content-Type: application/sdp

消息体类型

Content-Length:   450

消息体长度

3,标志消息结束的空行

4,SDP消息体(这是可选的,有些时候没有)

v=0 协议版本

o=- 3585476598 3585476598 IN IP4 172.16.2.138

   依次是会话见者的用户名,会话标识,版本,网络类型,地址

s=pjmedia

会话名称

c=IN IP4 172.16.2.138

连接数据

t=0 0

   起始时间和终止时间

a=X-nat:0

   会话/媒体属性:值

m=audio 4000 RTP/AVP 98 97 99 104 3 0 89 96

   媒体类型,端口,呼叫者希望收发的格式

接下来是看到的是响应消息,没有可选的消息体

SIP/2.0 100 Trying

100是状态码,Trying表示在连接

Via:SIP/2.0/UDP172.16.2.138:5060;rport=5060;received=172.16.2.138;branch=z9hG4bKPj9d24f4650227482987e044d641050ef6

Call-ID: fdc4d3c08c594ac499b184fbdbc35550

From:<sip:172.16.2.138>;tag=50bc6da5f91d441fb8802d2692c9ac5e

To: <sip:172.16.2.63>

CSeq: 2322 INVITE

Content-Length:  0

三、在linux端运行pjsua-i686-pc-linux-gnu即可看到一个连接请求

输入200,表示接受连接,可以看到成功连接的响应消息

SIP/2.0200 OK

Via:SIP/2.0/UDP172.16.2.138:5060;rport=5060;received=172.16.2.138;branch=z9hG4bKPj9d24f4650227482987e044d641050ef6

Call-ID:fdc4d3c08c594ac499b184fbdbc35550

From:<sip:172.16.2.138>;tag=50bc6da5f91d441fb8802d2692c9ac5e

To:<sip:172.16.2.63>;tag=ypVNCtNyGRBI9Ij4K9-Ig3Hf14zTkucm

CSeq:2322 INVITE

Contact:<sip:172.16.2.63:5060>

Allow:PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER,MESSAGE, OPTIONS

Supported:replaces, 100rel, timer, norefersub

Session-Expires:1800;refresher=uac

Require:timer

Content-Type:application/sdp

Content-Length:   274

 

v=0

o=-3585447798 3585447799 INIP4 172.16.2.63

s=pjmedia

b=AS:84

t=00

a=X-nat:0

m=audio40000 RTP/AVP 98 96

c=INIP4 172.16.2.63

b=TIAS:64000

a=rtcp:40001 IN IP4 172.16.2.63

a=sendrecv

a=rtpmap:98speex/16000

a=rtpmap:96telephone-event/8000

a=fmtp:960-15

接下来可以看到接收端发给请求端的ACK确认消息,其实中的to,from,call-id,cseq字段从上面invite请求复制而来。

ACKsip:172.16.2.63:5060 SIP/2.0

Via:SIP/2.0/UDP172.16.2.138:5060;rport;branch=z9hG4bKPj1fb3c29b50914f4db87a8bd92ce0921f

Max-Forwards:70

From:<sip:172.16.2.138>;tag=50bc6da5f91d441fb8802d2692c9ac5e

To:sip:172.16.2.63;tag=ypVNCtNyGRBI9Ij4K9-Ig3Hf14zTkucm

Call-ID:fdc4d3c08c594ac499b184fbdbc35550

CSeq:2322 ACK

Content-Length:  0

四、解除连接

在接收端输入h,表示发送一个BYE给连接端

BYEsip:172.16.2.138:5060;ob SIP/2.0

Via:SIP/2.0/UDP172.16.2.63:5060;rport;branch=z9hG4bKPjYBk6NnV2mwIut0wJaHNxU7S6h3eq42IJ

Max-Forwards:70

From:<sip:172.16.2.63>;tag=ypVNCtNyGRBI9Ij4K9-Ig3Hf14zTkucm

To:<sip:172.16.2.138>;tag=50bc6da5f91d441fb8802d2692c9ac5e

Call-ID:fdc4d3c08c594ac499b184fbdbc35550

CSeq:18290 BYE

User-Agent:PJSUA v2.1 Linux-2.6.35.22/i686/glibc-2.12

Content-Length:  0

接受到BYE端后会发送一个接受到BYE确认消息200过来

SIP/2.0200 OK

Via:SIP/2.0/UDP172.16.2.63:5060;rport=5060;received=172.16.2.63;branch=z9hG4bKPjYBk6NnV2mwIut0wJaHNxU7S6h3eq42IJ

Call-ID:fdc4d3c08c594ac499b184fbdbc35550

From:<sip:172.16.2.63>;tag=ypVNCtNyGRBI9Ij4K9-Ig3Hf14zTkucm

To:<sip:172.16.2.138>;tag=50bc6da5f91d441fb8802d2692c9ac5e

CSeq:18290 BYE

Content-Length:  0

用wireshark对这次会话可以抓取到6次


这六次依次是

      1.客户端向服务器端发送消息INVITE消息,

2.服务器段同意呼叫,发送100,状态码表示请求已收到,正在处理中。

3.  发送200表示请求已经完成。

4.  客户端向服务器端发送ACK,证实已经收到。

5.客户端突然不想参加此次会话,向服务器发送BYE。

6.  结束确认200。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于C#的AE+IDL二次桌面端程序开发

目录 一、内容 1.2 实训内容 1.2.1 IDL综合开发 1.2.2 基于AO/AE的GIS二次开发 1.2.3 COM_IDL_connect组件开发 三、 实训软硬件环境 四、实训内容及成果 4.1 平台总体描述 4.1.1 系统简介 4.1.2 系统功能 4.2 基础模块 4.2.1…

PJSIP学习笔记——从simple_pjsua.c示例程序了解PJSUA-LIB的基本使用流程

要了解pjsip的使用&#xff0c;simple_pjsua.c是一个很好的例子&#xff0c;虽然代码只有短短的172行&#xff0c;却展示了pjsua-lib层的完整使用流程、注册流程和基本呼叫流程。 下面是学习过程中整理的simple_pjsua.c中的main函数主要流程&#xff1a; 先来看看pjsip-apps/s…

arcgis字段计算器--随机数

代码 def a():number arcgis.rand(Integer 0 25)return number 结果

tomcat webapps目录文件都能删吗_详细测试实现Tomcat根域名访问的场景,看这篇文章就够了...

写在前面的话首先吐槽一下&#xff0c;我发现国内的博客大多是垃圾&#xff0c;完全没有人测试代码&#xff0c;就在那瞎扯淡&#xff0c;如果你看到别的地方说的跟我的文章说的不一样&#xff0c;请以我这篇为准&#xff0c;因为我每个场景都经过N次测试&#xff0c;确保没有问…

SIP初步

1、什么是SIP SIP&#xff08;会话发起协议&#xff09;属于IP应用层协议&#xff0c;用于在IP网上为用户提供会话应用。会话&#xff08;Session&#xff09;指两方或多方用户之间的语音、视频、及其他媒体形式的通信&#xff0c;具体可能是IP电话、会议、即时消息等等。 SIP…

execl按数值分类

LOOKUP(A1,{0,60,75,85},{"不合格","合格","良好","优秀"}) 参考文献 如何把excel中的数字转成优良中差等级_百度知道

synchronized原理_synchronized 底层原理与内存屏障

点击?蓝色“ 深入原理”&#xff0c;关注并“设为星标”技术干货&#xff0c;第一时间推送锁概述我们知道线程安全问题的产生前提是多个线程并发访问共享变量、共享资源(以下统称为共享数据)。于是&#xff0c;我们很容易想到保障线程安全的方法将多个线程对共享数据的并发访问…

python处理ncdc气象数据并利用arcgis可视化

作者已经处理好的数据如下 中国2020年均气温数据点加栅格.zip-讲义文档类资源-CSDN下载 数据格式如下 所有文件 对2020年文件进行查看(共有412个站点数据) 打开其中一个进行查看共有12列数据

动态分区分配的“首次适应算法_动态图划分复制算法:Leopard

数据管理和系统实现课程上要分享的论文&#xff1a;《LEOPARD: Lightweight Edge-Oriented Partitioning and Replication for Dynamic Graphs》背景目前分析处理图数据已经成为一项重要的任务&#xff0c;例如&#xff0c;研究互联网结构&#xff0c;分析社会关系&#xff0c;…

微软工程院院长:1万多应聘者挑不出100人

微软工程院院长&#xff1a;1万多应聘者挑不出100人“过去两三个月&#xff0c;我最主要的精力都花在了雇人上。遗憾的是&#xff0c;1万多名应聘者中&#xff0c;居然招不到足够合适的人。”今天&#xff0c;在北京中关村希格玛大厦微软亚洲工程院总部&#xff0c;新任院长张宏…

广义典型相关分析_重复测量数据分析及结果详解(之二)——广义估计方程

上一篇文章主要介绍了重复测量方差分析的基本思想是什么、它能做什么、怎么做、结果怎么解释&#xff0c;这几个问题。最后同时指出重复测量方差分析还是有一定局限&#xff0c;起码不够灵活。所以本文在上一篇文章基础上继续介绍医学重复测量数据中第二种常用方法&#xff1a;…

机器学习复制粘贴笔记要点

逻辑回归对特征的规模很敏感。重新调整数据使每个特征的均值为 0 和方差为 1 通常被认为是好的做法 zip() 函数用于将可迭代的对象作为参数&#xff0c;将对象中对应的元素打包成一个个元组&#xff0c;然后返回由这些元组组成的列表。 如果各个迭代器的元素个数不一致&#x…

YUV422格式信号格式(以备学习之用)

YUV信号有很多种&#xff0c;一般YUV420和YUV422用的比较多&#xff0c; YUV422格式&#xff0c;又分为很多小类&#xff0c;按照U、V的排列可以有YUYV,YVYU,UYVY,VYUY四种&#xff0c;其中&#xff0c;YUYVY一般又称作yuv2格式。 而这四种YUV422格式&#xff0c;每种又可以分为…

excel怎么添加diy工具箱_这些Excel插件让你的Excel更好用!

Excel基本功不扎实临时学习也没时间这时候比起各种操作技巧Excel插件更实际更能切实提高你的效率今天就给大家推荐几款插件&#xff01;方方格子说起Excel插件&#xff0c;就不能不提到它。方方格子支持Excel2007到2016各版本&#xff0c;而且对于WPS版本&#xff0c;也有专门的…

Arcgis自下而上从左到右进行编号

添加字段xmin和ymax !shape.extent.Xmin! !shape.extent.Ymax! 计算结果 对处理好的矢量按这个两个字段进行排序 排序结果后的objectid即可做为斜坡单元编号&#xff08;如果项目中对编号有其他要求&#xff0c;请继续往下查看&#xff0c;如果没有的话&#xff0c;就不用往下…

Linux之V4L2基础编程

1. 定义 V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。 2. 工作流程&#xff1a; 打开设备&#xff0d;> 检查和设置设备属性&#xff0d;> 设置帧格式&#xff0d;> 设置一种输入输出方法&#xff08;缓冲 区管理&#xff09;&…

ArcGIS如何在一个矢量上用不同颜色进行标注

在图层属性--标注里 选择“定义要素类并且为每个类加不同的标注” 点击添加 在类里面就会选择红色&#xff0c;此处作者添加了红色和黑色两个类 注意选择类是&#xff0c;查看是否标注次类 点击SQL查询&#xff0c;不同类进行不同的SQL查询

基于web的工作流设计器(多比图形控件)

多比图形控件是一款基于Web的矢量图形控件&#xff0c; 类似于网页上的Visio控件&#xff0c;是目前国内外最佳的基于web的工作流设计器、工作流流程监视器解决方案。 可广泛应用于包括&#xff1a;电力、军工、煤炭、化工、科研、能源等各种监控软件、基于web的工作流设计器&a…