exosip2协议栈原理分析以及总结

合集下载

exoSip开发者手册

exoSip开发者手册

exoSip开发者手册exoSip 开发者手册1 扩展的eXosip协议栈1.1 如何初始化libeXosip2当使用eXosip时,你的首要任务是初始化eXosip上下文和libosip库(语法分析器和状态机)。

这是在使用libeXosip2之前一定要完成的。

includeint i;TRACE_INITIALIZE (6, stdout);i=eXosip_init();if (i!=0)return -1;//在特定的socket上监听i = eXosip_listen_addr (IPPROTO_UDP, NULL, port, AF_INET,0);if (i!=0){eXosip_quit();fprintf (stderr, "could not initialize transport layer\n");return -1;}…初始化之后就可以发送消息或者等待eXosip事件的到来…在前面的代码中,您学习了如何:初始化osip trace(用- DENABLE_TRACE编译此代码)初始化eXosip(和osip)堆栈为信号打开一个套接字(只有UDP要初始eXosip2)现在你要处理eXosip事件。

下面是一些来获得eXosip_event从在eXosip2堆栈的代码。

eXosip_event_t *je;for (;;){je = eXosip_event_wait (0, 50);eXosip_lock();eXosip_automatic_action ();eXosip_unlock();if (je == NULL)break;if (je->type == EXOSIP_CALL_NEW){........}else if (je->type == EXOSIP_CALL_ACK){........}else if (je->type == EXOSIP_CALL_ANSWERED) {........}else .............eXosip_event_free(je);你将为每个SIP消息的发送收到一个事件,每个事件包含。

libexosip tls用法

libexosip tls用法

libexosip是一个开源的SIP协议栈,用于构建基于SIP协议的通信应用程序。

其中,libexosip提供了对TLS(Transport Layer Security)安全传输协议的支持,可以保障SIP信令的安全传输。

本文将介绍libexosip中TLS的使用方法,包括TLS的配置和使用步骤。

一、TLS的配置1.1、安装OpenSSL在使用libexosip进行TLS通信之前,首先需要安装OpenSSL库。

OpenSSL是一个强大的安全套接字层密码库,提供了数据加密、数据完整性验证和身份验证等功能。

在Linux系统上,可以通过包管理工具直接安装OpenSSL库:```shell$ sudo apt-get install libssl-dev```在Windows系统上,可以通过从OpenSSL全球信息湾下载相应的安装包,并按照提示进行安装。

1.2、配置libexosip在使用libexosip进行TLS通信之前,需要在编译libexosip时启用TLS支持。

可以通过在configure脚本中添加--enable-tls选项来启用TLS支持:```shell$ ./configure --enable-tls$ make$ make install```通过以上操作,就可以在libexosip中启用TLS支持了。

二、TLS的使用步骤2.1、加载证书在使用libexosip进行TLS通信时,需要加载服务器端的证书和私钥。

证书用于验证服务器的身份,私钥则用于对通信进行加密。

在libexosip中,可以通过以下代码加载证书和私钥:```cosip_tls_ctx_t *tls_ctx;tls_ctx = osip_tls_ctx_new (osip, "path_to_certificate","path_to_private_key");```其中,osip是osip库的句柄,"path_to_certificate"是服务器端证书的路径,"path_to_private_key"是服务器端私钥的路径。

SIP 协议学习总结

SIP 协议学习总结

SIP 协议学习1初识SIP1.1 SIP定义Session Initiation Protocol会话初始协议是基于文本的信令协议。

是一个在IP网络上进行多媒体通信的应用层控制协议。

用来创建、修改和终结一个或多个参与者参加的会话进程。

SIP协议可用于发起会话,也可用于邀请成员加入已经用其他方式建立的会话。

SIP基于文本编解码。

采用事务机制,每一个请求出发Server的操作方法,请求和响应构成一个事务。

事务间彼此独立。

SIP独立于底层传输协议。

SIP协议承载在IP网,传输层协议可用TCP或UDP,推荐首选UDP。

SIP支持5方面功能:1.用户定位:确定通信所用的端系统位置2.用户能力交换:确定所用的媒体类型和媒体参数3.用户可用性判定:确定被叫方是否空闲和是否愿意加入通信4.呼叫建立:邀请和提示被叫,在主被叫之间传递呼叫参数5.呼叫处理:包括呼叫终结和呼叫转移等1.2 SIP特点1.一个正在发展和不断研究中的协议。

2.简练、开放、兼容和可扩展等原则。

3.充分注意到因特网开放而复杂的网络环境下的安全问题。

4.充分考虑了对PSTN的各种业务,包括IN(Intelligent Network智能网)业务和ISDN业务(Integrated Services Digital Network综合业务数字网)的支持。

2SIP协议2.1 SIP协议结构1.最底层的是它的语法和编码层。

编码方式是采用扩展的Backus-Naur Form grammar(BNF范式)。

2.第二层是传输层。

定义了一个客户端如何发送请求和接收应答,以及一个服务器如何接收请求和发送应答。

所有的SIP要素都包含一个通讯层。

3.第三层是事务层。

事务层处理应用服务层的重发,匹配请求的应答,以及应用服务层的超时。

任何一个用户代理客户端(user agent client UAC)完成的事情都是由一组事务构成的。

有状态的代理服务器包含一个事务层;无状态的代理服务器不包含事务层。

SIP协议相关资料(doc 9页)

SIP协议相关资料(doc 9页)

SIP协议相关资料(doc 9页)Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。

eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。

一、介绍Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。

但缺点也很明显,首先就是可用性差,没有很好的api封装,使得上层应用在调用协议栈时很破碎;其次,只做到了transaction 层次的协议过程解析,缺少call、session、1、Sip协议的语法分析:主要是osipparser2部分,目前支持RFC3261和RFC3265定义的sip协议消息,包括INVITE、ACK、OPTIONS、CANCEL、BYE、SUBSCRIBE、NOTIFY、MESSAGE、REFER和INFO。

不支持RFC3262定义的PRACK。

遵循RFC3264关于SDP的offer/answer模式。

带有SDP的语法分析。

支持MD5加解密算法。

支持Authorization、www_authenticate和proxy_authenticate。

2、Sip协议的过程分析:主要是osip2部分,基于RFC3261、RFC3264和RFC3265的sip协议描述过程,围绕transaction 这一层来实现sip的解析。

Transaction是指一个发送方和接收方的交互过程,由请求和应答组成。

请求分为Invite类型和Non-Invite类型。

应答分为响应型的应答和确认型的应答。

响应型的应答是指这个应答仅代表对方收到请求。

请求经过处理后都必须返回确认型的应答。

响应型的应答有1xx,确认型的应答包括2xx、3xx、4xx、5xx和6xx。

一个transaction由一个请求和一个或多个响应型应答、一个确认型应答组成。

基于eXosip协议栈的SIP电话的研究与实现

基于eXosip协议栈的SIP电话的研究与实现

控 制 系统 在 V OI P系 统 实 现 、 多媒体通 信系统 、 无 线 语 音 通 信 领 域 应 用 更 加 广 泛 ,且 大 多 数 系 统 均 采 用 S I P协 议 作 为 其 信 令 控 制协议 , 因此 , S I P协 议 栈 的 选 择 和 应 用 就 显 得 尤 为 重 要 。 e X o s i p 2是一 个 源 码公 开 的 、使 用 标 准 C 编 写 的 免 费 协 议
e xp er i me n t i s d on e, an d go t t h e des i r ed r e su l t s
Ke y wor ds : Sl P, oSI P, eX os i p Pr o t o co l S t a ck , Sl P ph on e
1 4
基于 e X o s i p协 议 栈 的 S I P电 话 的 研 究 与 实 现
基于 e X o s i p协议栈的 S I P电话的研究与实现
Re s e a r c h a n d I mp l e me n t a t i o n o f SI P P h o n e Ba s e d o n e X o s i p P r o t o c o l S t a c k
S I P终 端 的 大 部 分 功 能 , 且 结构 简 单 小巧 、 灵活性强 、 可 扩展 性 强 , 更加 的 智 能化 。 简单 介 绍 了 o S I P协 议 栈 及 e X o s i p协议 栈
的基 本 内容 , 并 在 此 基 础 上 详 细 介 绍 了嵌 入 式 S I P 电话 的 硬 件 及 软 件 设 计 过 程 , 并 进 行 试 验 得 到 了预 期 的 效 果 。

SIP协议原理及应用

SIP协议原理及应用
SIP的组网很灵活,可根据情况定制。在网络服务器的分工方面:位于网络核心的服务器,处理大量请求,负责重定向等工作,是无状态的,它个别地处理每个消息,而不必跟踪纪录一个会话的全过程;网络边缘的服务器,处理局部有限数量的用户呼叫,是有状态的,负责对每个会话进行管理和计费,需要跟踪一个会话的全过程。这样的协调工作,既保证了对用户和会话的可管理性,又使网络核心负担大大减轻,实现可伸缩性,基本可以接入无限量用户。SIP网络具有很强的重路由选择能力,具有很好的弹性和健壮性。
Sip:alice@10.1.2.3
Sip:alice@;method=REGISTER
一.4
描述会话信息的协议,包括会话的地址、时间、媒体和建立等信息
一.4.1
会话名和目的
会话激活的时间段
构成会话的媒体
接收这些媒体所需的信息(地址、端口、格式)
会话所用的带宽信息(任选)
会话负责人的联系信息(任选)
二.1.1
SIP协议是一个Client/Sever协议。SIP端系统包括用户代理客户机(UAC)和用户代理服务器(UAS),其中UAC的功能是向UAS发起SIP请求消息,UAS的功能是对UAC发来的SIP请求返回相应的应答。在SS(SoftSwitch)中,可以把控制中心SoftSwitch看成一个SIP端系统。
Application Server:运行和管理增值业务的平台,与SoftSwitch用SIP进行通信。
Media Server:提供媒体和语音资源的平台,同时与Media Gateway进行RTP流的传输。
使用SIP作为SoftSwitch和Application Server之间的接口,可以实现呼叫控制的所有功能。同时SIP已被SoftSwitch接受为通用的接口标准,从而可以实现SoftSwitch之间的互连。

libexosip tls用法 -回复

libexosip tls用法 -回复

libexosip tls用法-回复如何使用libexosip进行TLS连接?libexosip是一个开源的SIP协议栈,用于构建基于SIP的通信应用程序。

在实际的通信过程中,有时候需要通过TLS(Transport Layer Security)进行加密和认证,以确保通信的安全性。

本文将详细介绍如何使用libexosip实现TLS连接。

# 步骤1:准备工作首先,我们需要安装libosip2和libexosip2这两个库。

这两个库是libexosip的依赖库,我们可以从官方网站上下载并按照指导进行安装。

# 步骤2:生成证书为了使用TLS进行通信,我们需要为服务器和客户端生成证书。

可以使用openssl命令来生成证书,以下是生成证书的示例命令:openssl req -x509 -nodes -newkey rsa:2048 -keyout server.key -out server.crt -days 365这个命令将生成一个自签名的证书,有效期为365天。

生成的密钥和证书文件用于配置服务器。

# 步骤3:配置服务器在服务器端,我们需要进行一些配置,以便支持TLS连接。

例如,我们需要指定服务器使用的端口号、证书和密钥文件等。

以下是一个简单的配置示例:cpp#include <eXosip2/eXosip.h>int main() {exosip_init();osip_init();创建一个eXosip contextosip_exosip_t *ctx = eXosip_malloc();设置协议栈使用的IP地址和端口号eXosip_listen_addr(ctx, IPPROTO_TCP, NULL, 5061, AF_INET, 0);eXosip_listen_addr(ctx, IPPROTO_UDP, NULL, 5060, AF_INET, 0);加载证书和密钥eXosip_set_option(ctx, EXOSIP_TLS_SERVER_CERT_FILE, "server.crt");eXosip_set_option(ctx, EXOSIP_TLS_SERVER_PRIV_FILE, "server.key");启用TLS连接eXosip_set_option(ctx, EXOSIP_TLS_ENABLE, 1);主循环while (1) {eXosip_event_t *je = NULL;int ret = eXosip_event_wait(ctx, 0, 100);if (ret < 0) {break;}eXosip_lock(ctx);do {je = eXosip_event_get(ctx);处理事件} while (je != NULL);eXosip_unlock(ctx);}eXosip_quit(ctx);return 0;}在上面的示例中,我们使用了eXosip_listen_addr()函数来指定协议栈监听的地址和端口号,并使用eXosip_set_option()函数加载证书和密钥文件。

sip协议原理分析及总结

sip协议原理分析及总结

sip协议原理分析及总结SIP协议学习总结1、SIP协议定义SIP(Session Initiation Protocol,即初始会话协议)是IETF提出的基于⽂本编码的IP电话/多媒体会议协议。

⽤于建⽴、修改并终⽌多媒体会话。

SIP 协议可⽤于发起会话,也可以⽤于邀请成员加⼊已经⽤其它⽅式建⽴的会话。

多媒体会话可以是点到点的话⾳通信或视频通信,也可以是多点参与的话⾳或视频会议等。

SIP协议透明地⽀持名字映射和重定向服务,便于实现ISDN,智能⽹以及个⼈移动业务。

SIP协议可以⽤多点控制单元(MCU)或全互连的⽅式代替组播发起多⽅呼叫。

与PSTN 相连的IP电话⽹关也可以⽤SIP协议来建⽴普通电话⽤户之间的呼叫。

SIP协议在IETF多媒体数据及控制体系协议栈结构的位置H.323SIP RTSP RSVP RTCPH.263 etc.RTP TCP UDPIPPPP Sonet AAL3/4AAL5ATM EthernetPPPV.34SIP协议⽀持多媒体通信的五个⽅⾯:◆⽤户定位:确定⽤于通信的终端系统;◆⽤户能⼒:确定通信媒体和媒体的使⽤参数;◆⽤户有效性:确定被叫加⼊通信的意愿;◆会话建⽴:建⽴主叫和被叫的呼叫参数;◆会话管理:包括呼叫转移和呼叫终⽌;SIP协议的结构SIP是⼀个分层的协议,也就是说SIP协议由⼀组相当⽆关的处理层次组成,这些层次之间只有松散的关系。

SIP最底层的是它的语法和编码层。

编码⽅式是采⽤扩展的Backus-Naur Form grammar (BNF范式)。

第⼆层是传输层。

它定义了⼀个客户端发送请求和接收应答的⽅式,以及⼀个服务器接收请求和发送应答的⽅式。

所有的SIP要素都包含⼀个通讯层。

第三层是事务层。

事务是SIP的基本组成部分。

⼀个事务是UAC向UAS发送的⼀个请求以及UAS向UAC发送的⼀系列应答。

事务层处理应⽤服务层的重发,匹配请求的应答,以及应⽤服务层的超时。

exosip2 交叉编译

exosip2 交叉编译

exosip2 交叉编译
exosip2 是一个基于SIP 协议的开源库,用于实现SIP 客户端和服务器端应用程序的开发。

交叉编译(Cross-compilation)是指在一种平台上生成另一种平台的可执行代码,比如在一台操作系统上生成另一种操作系统的可执行文件。

针对exosip2 进行交叉编译的步骤可能会因为环境和目标平台而有所不同,以下是一般情况下的基本步骤:
步骤概述:
准备交叉编译工具链:首先要获取针对目标平台的交叉编译工具链,这包括交叉编译器、交叉编译时所需的库和头文件等。

配置exosip2:在交叉编译环境中,使用配置工具或手动配置,设置exosip2 库的构建选项和参数,指定交叉编译工具链。

生成Makefile 或构建脚本:针对所配置的交叉编译环境,生成适用于交叉编译的Makefile 或构建脚本。

执行编译:运行Makefile 或构建脚本,执行编译过程。

这将使用交叉编译工具链生成适用于目标平台的可执行文件或库。

注意事项:
交叉编译工具链:确保选择正确的交叉编译工具链,与目标平台的架构和操作系统间相匹配。

配置选项:在配置exosip2 时,需要确保设置了正确的交叉编译工具链路径和其他必要的选项。

环境依赖:确保交叉编译环境中已经安装了目标平台所需的库和依赖项。

这些步骤只是一个大致的指导,具体的步骤和命令可能会因为具体环境和目标平台而有所不同。

在进行交叉编译前,最好查阅exosip2的官方文档或相关的交叉编译指南,以获得更详细和准确的步骤。

SIP原理分析与详解

SIP原理分析与详解
精品课件
7.被叫无应答流程一
精品课件
8.被叫无应答流程二
精品课件
9.遇忙呼叫前转
精品课件
10.无应答呼叫前转流程
精品课件
SIP与H.323的比较
• 体系结构的比较 • 复杂性的比较 • 可靠性及服务质量的比较 • 对视频和语音的编码格式的支持 • 会议规模 • 各自优点
精品课件
体系结构的比较
精品课件
SIP协议支持多媒体通信的五个方面 • 用户定位 • 用户能力 • 用户可达性 • 呼叫建立 • 呼叫处理
精品课件
SIP 是基于客户/服务器的体系结构, 网 络组件基本分为用户代理(User Agent) 和网络服务器(Network Server)。
(1) SIP 的用户代理 SIP 的用户代理是 SIP 系统中的终端用 户,根据它们在会话中扮演的角色又可分 为用户代理客户机(UAC,User Agent Client)和用户代理服务器(UAS,User Agent Server),前者发起呼叫请求,后者 响应呼叫请求。
• SIP则不具备处理中间实体故障的能力
精品课件
服务质量
• 在H.323中,网守提供一组丰富的控制和管 理功能,包括地址翻译、接纳控制、带宽 控制和地域管理。
• SIP自身不支持管理和控制功能,而是依赖 于别的协议。
精品课件
对视频和语音的编码格式的支持
• 目前存在的编码格式有数百种之多,SIP支持任何 编码格式,不同应用实现也可以根据符串名字识 别编码格式并从IANA得到有关信息。
精品课件
h.323优点
• H.323是一个整套的协议栈用来在IP和包交换网络 中传输标准的电话语音服务。
• 除了在设计时独立于其它标准,H.323的基本功能 里也包括很多电话的辅助功能,例如会议和呼叫 转移。这种实现的优点是,它给希望开发高级特 性和服务的开发者留下了很明确的接口,这样就 保证了高度的兼容性。

【协议分析】SIP协议分析总结

【协议分析】SIP协议分析总结

【协议分析】SIP协议分析总结SIP消息由3部分组成,分别为启动行,消息头,消息体,每行后都由回车换行符号CRLF或由CR、LF其中之一组成。

消息头后填充空行CRLF。

格式如下:generic-message = start-line(Request-Line /Status-Line)*message-headerCRLF[ message-body ]1、请求行请求行包括3部分,方法,请求URI,SIP版本,结束符号可以为CRLF、CR、LF,空格可以被忽略,请求行格式如下SP为single space.Request-Line = Method SP Request-URI SP SIP-Version CRLF例子:INVITE sip:555@192.168.83.165 SIP/2.0方法:RFC3261规格中共定义了6种方法,REGISTER、INVITE、ACK、CANCEL、BYE、OPTIONS.REGISTER:注册联系人信息到代理服务器。

OPTIONS:查询服务器的能力,支持哪些选项。

请求URI:正在发送请求并被处理的用户信息或服务,不能包含空格不能包含在&lt;&gt;之内。

SIP版本:SIP版本是大小写敏感的,必须为大写,但实际使用中如果小写也没什么差异。

2、响应响应行包括3部分,SIP版本,状态码,过程阶段,结束符号可以为CRLF、CR、LF,空格可以被忽略,格式如下:Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF例子:SIP/2.0 100 Trying状态码给机器翻译使用,Reason-Phrase给用户查看使用,状态码范围如下,第一个数字为类别代表,共3个数字。

1xx: Provisional -- request received, continuing to process therequest; 2xx: Success -- the action was successfully received, understood,and accepted; 3xx: Redirection -- further action needs to be taken in order tocomplete the request; 4xx: Client Error -- the request contains bad syntax or cannot befulfilled at this server; 5xx: Server Error -- the server failed to fulfill an apparentlyvalid request; 6xx: Global Failure -- therequest cannot be fulfilled at anyserver.3、头域格式(Header Field Format)field-name: field-value实例:Via: SIP/2.0/UDP192.168.83.166:59888;branch=z9hG4bK-d87543-fe184d2 d9922c37b-1--d87543-;rport冒号左域可以有空格举例如下:Subject: lunchSubject : lunchSubject :lunchSubject: lunch头域值可以为多行,在每行前面至少有一个空格或Tab,下面两张表达是相等的。

SIP协议对比,栈结构,逻辑实体,消息等

SIP协议对比,栈结构,逻辑实体,消息等

ContentsSIP协议 (2)SIP与其他协议对比 (2)SIP基本功能 (2)SIP协议栈结构 (3)SIP基本网络模型,会话过程以及逻辑实体 (5)SIP的网络模型与会话过程: (5)SIP逻辑实体 (5)用户代理(UA)即用户终端 (5)网络服务器: (5)SIP消息 (7)地址URL和命名规则 (7)SIP的消息模式 (7)SIP的消息类型 (8)请求消息 (8)响应消息 (8)SIP消息组成 (9)起始行 (10)请求(request)消息的开始行 (10)响应(Response)消息的开始行 (11)主要消息头字段 (13)消息体字段 (14)SIP典型流程介绍 (15)SIP应用实例 (16)SIP协议SIP与其他协议对比目前主流的信令协议主要有SIP,No.7以及H323,其中其对比关系如下SIP:是Internet工程任务组IETF(Internet Engineering Task Force)提出的基于IP网络的应用层会话(参与者之间的数据交换包括语音,视频,文本等多种类型)控制协议.用于建立、修改和终止多媒体会话.SIP很大程度上借鉴了其他Internet协议,比如Http,同时SIP也采用了基于文本的编码方式(其他协议可能采取帧结构的方式,但SIP处在应用层,完全可以使用文本方式),另外SIP独立于底层协议,一般使用UDP无连接协议,所以SIP采用自己的应用层可靠性机制来保证消息的可靠传输. 由于SIP完全可以通过软件实现,随着软交换技术的发展SIP将会成为主流通信协议.No.7:传统的电路层面的TDM 7号信令.H.323: 是有国际电信联盟ITU提出的一个标准协议栈,它主要用于多媒体会议系统.H.323为协议的主题框架,H.263为视频解码协议,H.723.1为音频解码协议,H.245为系统控制协议.SIP基本功能•用户定位:存储和查询终端用户的位置,用于通讯,其中由于SIP完全使用IP网络实现,不像No.7存在物理电路的概念,因此SIP所说的终端用户的位置其实是指广域网的IP地址范围.即IP电话(用户)所处的广域网IP.•用户有效性:检查一个用户是否愿意参与会话•用户能力:检查媒体和媒体参数•建立会话:在呼叫方和被叫方建立会话参数。

exosip2 原理

exosip2 原理

exosip2 原理exosip2是一种用于实现SIP(会话初始协议)的开源库,它提供了一系列的API函数,使开发者能够轻松地构建基于SIP的应用程序。

本文将详细介绍exosip2的原理及其在通信领域的应用。

exosip2库是基于osip(开源SIP协议栈)库开发的,它提供了更高级别的抽象和功能,可以简化SIP应用程序的开发过程。

exosip2库的核心原理是对SIP协议进行封装和解析,以便于应用程序进行SIP消息的发送和接收。

exosip2库的主要功能包括SIP会话的建立、终止和管理,SIP消息的发送和接收,以及SIP协议的解析和处理。

它提供了一组API函数,使开发者可以方便地创建SIP会话、发送SIP消息,并处理收到的SIP消息。

exosip2库的使用流程一般分为以下几个步骤:1. 初始化:首先需要调用exosip_init函数进行库的初始化,该函数将建立与SIP服务器的连接并初始化相关资源。

2. 注册:通过调用exosip_register函数,可以向SIP服务器注册用户,以便接收来自其他用户的呼叫请求。

3. 呼叫:通过调用exosip_call函数,可以向其他用户发起呼叫请求。

在呼叫请求中需要指定被叫方的SIP地址。

4. 接听:当收到其他用户的呼叫请求时,exosip2库将自动触发一个事件,应用程序可以通过注册相应的回调函数来处理此事件。

在呼叫请求事件中,应用程序可以选择接听呼叫或拒绝呼叫。

5. 通话:一旦呼叫被接听,应用程序可以通过exosip_call_ack函数发送一个ACK消息,表示通话已建立。

在通话过程中,应用程序可以通过exosip_call_send_request函数发送音频数据,并通过exosip_call_recv_request函数接收对方发送的音频数据。

6. 结束:通话结束后,需要调用exosip_call_end函数来终止通话并释放相关资源。

exosip2库的使用可以帮助开发者快速构建基于SIP的应用程序,例如VoIP(网络电话)、实时视频通话、即时消息等。

exosip

exosip

exosip概述exosip 是一个开源的基于 C 语言编写的 SIP 协议栈。

它提供了一种轻量级的方式来实现 SIP 协议的客户端和服务器端功能。

exosip 的设计目标是简单易用、高性能、高可靠性。

特性1.轻量级:exosip 采用模块化设计,只包含了实现SIP 协议所必需的功能。

它的核心代码库非常小,运行内存占用也很低。

2.易用性:exosip 提供了清晰简洁的 API,使开发者可以快速理解和使用该库。

它提供了一套完整的函数接口,用于创建和发送 SIP 请求、处理 SIP 响应、建立和管理 SIP 会话。

3.高性能:exosip 使用了各种优化技术,包括多线程、异步 IO、事件驱动等,以实现高性能的 SIP 协议处理。

它能够高效地处理大量的 SIP 请求和响应。

4.高可靠性:exosip 实现了完整的 SIP 协议规范,对异常情况进行了处理,确保了系统的稳定性和可靠性。

它还提供了灵活的错误处理机制,方便开发者进行故障排查和问题定位。

安装和使用安装exosip 可以通过源代码编译安装,也可以通过包管理器进行安装。

下面是使用包管理器在 Ubuntu 操作系统上安装exosip 的示例:sudo apt-get install libeXosip2-dev使用使用 exosip 构建一个 SIP 客户端或服务器非常简单。

以下是一个基本的示例代码,演示了如何使用 exosip 创建一个注册请求,并处理注册响应:```c #include <eXosip2/eXosip.h>int main() { eXosip_t ctx; // exosip 上下文对象osip_message_t reg; // 注册请求对象 int ret;/* 初始化 exosip */ret = eXosip_init(ctx);if (ret != 0) { printf(\。

oSIP协议栈(及eXoSIP、Ortp等)使用入门

oSIP协议栈(及eXoSIP、Ortp等)使用入门

一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本,看到网上的许多帮助说明手册都过于陈旧,且很多文档内容有点误人子弟的嫌疑~~Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下的使用作出描述。

虽然oSIP的开发人员也说明了,oSIP只使用了标准C开发库,但许多人在Windows下使用oSIP时,第一步就被卡住了,得不到oSIP的LIB库和DLL库,也就没有办法将oSIP使用到自己的程序中去,所以第一步,我们将学习如何得到oSIP的静态和动态链接库,以便我们自己的程序能够使用它们来成功编译和执行我们的程序。

第一阶段:------------------------------------------------------先创建新工程,网上许多文档都介绍创建一个Win32动态链接库工程,我们这里也一样,创建一个空白的工程保存。

同样,将oSIP2版本3.0.1 src目录下的Osipparser2目录下的所有文件都拷到我们刚创建的工程的根目录下,在VC6上操作:Project-AddToProject-Files将所有的源程序和头文件都加入到工程内,保存工程。

这时,我们可以尝试编译一下工程,你会得到许多错误提示信息,其内容无非是找不到osipparser2/xxxxx.h头文件之类。

处理:在Linux下,我们一般是将头文件,lib库都拷到/usr/inclue;/usr/lib之类的目录下,c源程序里直接写#include <xxx.h>时,能直接去找到它们,在VC里,同样的,最简单的方法就是将oSIP2源码包中的Include目录下的 osipparser2目录直接拷到我们的Windows下默认包含目录即可,这个目录在VC6的Tool-Options-Directories里设置,(当然,如果你知道这一步,也可以不用拷贝文件,直接在这里把oSIP源码包所在目录加进来就可以了),默认如果装在C盘,目录则为 C:/Program Files/Microsoft Visual Studio/VC98/Include。

exosip2开发过程中应该注意的几个问题

exosip2开发过程中应该注意的几个问题

exosip2开发过程中应该注意的几个问题在exosip2开发过程中,开发人员需要注意以下几个问题:
1. 版本兼容性:确保使用的exosip2版本与其他依赖库、操作系统和相关组件的版本兼容。

如果版本不一致可能会导致编译错误、功能失效或运行时崩溃。

2. API文档研究:仔细研究exosip2的API文档,了解可用的函数和参数以及其用途。

确保对库的各个功能和特性有全面的了解,以避免不必要的错误和bug。

3. 内存管理:exosip2是一个C语言库,因此在开发过程中需要特别注意内存管理。

正确地分配和释放内存是非常重要的,否则可能会导致内存泄漏或野指针的问题。

4. 错误处理:在使用exosip2时,开发人员需要对可能出现的错误做出适当的处理。

无效的输入、连接失败、发送消息失败等情况都应该被捕获和处理,以提高程序的稳定性和可靠性。

5. 并发性:对于多线程环境下的开发,要确保exosip2的并发性。

在多个线程同时使用exosip2库时,需要使用适当的同步机制来保护共享资源,避免竞态条件和数据冲突。

6. 测试和调试:在开发过程中,定期进行测试和调试是必要的。

编写适当的单元测试用例,利用调试工具和日志来发现和修复潜在的问题,确保exosip2库的正确性和稳定性。

总之,在进行exosip2开发时,开发人员应该仔细研究API文档,注意版本兼容性,小心处理内存管理和错误处理,确保并发性,并进行充分的测试和调试。

这些注意事项将有助于顺利完成exosip2的开发工作。

SIP协议栈

SIP协议栈

SIP协议栈SIP(Session Initiation Protocol)是一种用于建立、修改和终止多媒体会话的通信协议。

它使用文本格式进行通信,并在互联网上运行。

SIP协议栈是指用于实现SIP协议的软件组件的集合,下面将介绍SIP协议栈的组成和工作原理。

SIP协议栈由多个层次组成,包括传输层、协议层和应用层。

传输层负责将SIP消息从一个节点传输到另一个节点。

常用的传输层协议包括UDP(User Datagram Protocol)和TCP (Transmission Control Protocol)。

协议层负责解析和处理SIP消息,例如建立会话、修改会话参数等。

应用层负责与用户交互,并根据需要生成SIP消息。

SIP协议栈的工作原理如下:当一个节点想要建立会话时,它将发送一个INVITE消息到目标节点。

目标节点收到INVITE消息后,将返回一个100 Trying消息表示正在处理请求。

然后,如果目标节点可以接受会话,它将返回一个180 Ringing消息表示正在响铃,并开始为该会话分配资源。

之后,目标节点将返回一个200 OK消息表示会话建立成功。

发送节点收到200 OK消息后,将发送一个ACK消息确认会话建立成功。

如果发送节点需要修改会话参数,它可以发送一个UPDATE消息到目标节点。

目标节点收到UPDATE消息后,将根据需要修改会话参数,并返回一个200 OK消息确认修改成功。

如果发送节点想要终止会话,它可以发送一个BYE消息到目标节点。

目标节点收到BYE消息后,将返回一个200 OK消息表示会话终止成功。

SIP协议栈还支持其他功能,例如身份验证、位置服务和消息转发。

身份验证功能可以确保会话只能由合法用户建立和修改。

位置服务功能可以根据用户的位置信息将会话路由到合适的节点。

消息转发功能可以将SIP消息转发到其他网络中的节点。

总之,SIP协议栈是一种用于建立、修改和终止多媒体会话的通信协议。

exosip2协议栈原理分析以及总结-图文

exosip2协议栈原理分析以及总结-图文

exosip2协议栈原理分析以及总结-图文exosip2协议栈学习总结1、exosip2协议栈介绍eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。

使用 sip 协议建立多媒体会话是一个复杂的过程,exosip 库开发的目的在于隐藏这种复杂性。

正如它的名称所表示的,eXosip2 - the eXtended osip Library,它扩展了osip 库,实现了一个简单的高层API。

通过使用exosip,我们可以避免直接使用osip 带来的困难。

需要注意,exosip 并不是对osip 的简单封装包裹,而是扩展。

Osip 专注于sip 消息的解析,事务状态机的实现,而exosip 则基于osip 实现了call、options、register、publish 等更倾向于功能性的接口。

当然,这些实现都是依赖于底层osip 库已有的功能的。

2、exosip的模块构成2.1 底层连接管理extl.c、extl_udp.c、extl_tcp.c、extl_dtls.c、extl_tls.c 是与网络连接有关的文件。

实现了连接的建立,数据的接收以及发送等相关的接口。

其中,extl_udp.c 为使用UDP 连接的实现,extl_tcp.c 为使用TCP 连接的实现。

Extl_dtls.c 以及extl_tls.c 都是使用安全socket 连接的实现。

2.2 内部功能模块实现 Jauth.c、jcall.c、jdialog.c、jevents.c、jnotify.c、jpublish.c、jreg.c、jrequest.c、jresponse.c、jsubscribe.c 等文件实现了内部对一些模块的管理,这些模块正如其文件名所表示的,jauth.c主要是认证,jcall.c 则是通话等等。

2.3 上层API 封装实现Excall_api.c、exinsubsription_api.c、exmessag_api.c、exoptions_api.c、expublish_api.c、exrefer_api.c、exregister_api.c、exsubsribtion_api.c 这几个以api 为后缀的文件,实现各个子模块的管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

exosip2协议栈学习总结1、exosip2协议栈介绍eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。

使用 sip 协议建立多媒体会话是一个复杂的过程,exosip 库开发的目的在于隐藏这种复杂性。

正如它的名称所表示的,eXosip2 - the eXtended osip Library,它扩展了osip 库,实现了一个简单的高层API。

通过使用exosip,我们可以避免直接使用osip 带来的困难。

需要注意,exosip 并不是对osip 的简单封装包裹,而是扩展。

Osip 专注于sip 消息的解析,事务状态机的实现,而exosip 则基于osip 实现了call、options、register、publish 等更倾向于功能性的接口。

当然,这些实现都是依赖于底层osip 库已有的功能的。

2、exosip的模块构成2.1 底层连接管理extl.c、extl_udp.c、extl_tcp.c、extl_dtls.c、extl_tls.c 是与网络连接有关的文件。

实现了连接的建立,数据的接收以及发送等相关的接口。

其中,extl_udp.c 为使用UDP 连接的实现,extl_tcp.c 为使用TCP 连接的实现。

Extl_dtls.c 以及extl_tls.c 都是使用安全socket 连接的实现。

2.2 内部功能模块实现Jauth.c、jcall.c、jdialog.c、jevents.c、jnotify.c、jpublish.c、jreg.c、jrequest.c、jresponse.c、jsubscribe.c 等文件实现了内部对一些模块的管理,这些模块正如其文件名所表示的,jauth.c主要是认证,jcall.c 则是通话等等。

2.3 上层API 封装实现Excall_api.c、exinsubsription_api.c、exmessag_api.c、exoptions_api.c、expublish_api.c、exrefer_api.c、exregister_api.c、exsubsribtion_api.c 这几个以api 为后缀的文件,实现各个子模块的管理。

应用程序可以调用这里提供的接口,方便的构造或者发送sip 消息。

2.4 其他Inet_ntop.c 实现ip 地址的点分十进制与十六进制表示之间的转换。

Jcallback.c 实现一堆回调函数,这些回调函数就是用来注册到osip 库的。

我们使用exosip 库,就是避免直接使用osip 库,因为一些工作exosip 已经帮我们做了,所以这样一来,可以简化上层的实现。

Udp.c 文件主要用来对通过UDP 连接接收到的消息进行分类处理。

Exutilis.c 文件实现一些杂项的函数。

有ip 地址到字符串之间的转换,域名的解析等一些辅助的功能函数。

Exconf.c 文件实现了exosip 的初始化相关的接口,包括后台任务的实现。

实际上是“configuration api”的实现。

Exosip.c 文件实现了与exconf.c 文件相似的功能。

比如管道的使用,exosip 上事务的创建和查找,register 和subscribe 的更新,认证信息的处理等。

3、exosip关键数据结构及其说明3.1 eXtl_protocoleXtl_protocol 是为实现网络通信专门定义的一个数据结构,包括了变量和方法两部分。

其中,变量包括了建立网络连接过程中使用的ip 地址、端口等;方法部分封装了网络socket编程常用的系统调用接口。

代码中定义了四个该数据结构体的全局变量:eXtl_udp、eXtl_tcp、eXtl_tls 以及eXtl_dtls。

分别针对使用UDP、TCP 以及安全加密连接进行了实现。

3.2 eXosip_call_tExosip_call_t 定义了call 相关的信息,包括call 的id,call的dialogs,call 上incoming的事务和outgoing 的事务。

另外,还包括了前向和后向指针,所以,所有的call 可以通过该结构体串接起来。

3.3 eXosip_dialog_texosip_dialog_t 包含了dialog 相关的信息。

3.4 eXosip_reg_t用来管理Register模块3.5 eXosip_subscribe_t用来管理subscribe模块3.6 eXosip_pub_t用来管理publish模块3.7 eXosip_notify_t用来管理notify模块3.8 jinfo_t这个结构体关联了dialog、call、subscribe以及notify几个结构体3.9 eXosip_event_t与 event 有关的结构体。

这个结构体主要用来在应用层和exosip 之间通信。

Exosip 在处理事务的过程中,如果需要将结果反馈给上层应用,则会生成如上结构类型的事件,并将其放到exosip 的事件队列中。

应用层会不断循环从事件队列中读取事件,然后进行应用层的处理。

3.10 eXosip_texosip_t 是exosip 中最重要的结构体之一。

从图可以看出,这个结构体比较大,其中包含了exosip 中用到的各个子模块的结构。

比如call、reg、pub 等等。

代码中定义了一个该结构类型的全局变量,通过该全局变量,就可以对exosip 前的状态进行掌控(许多相关的信息要么包含在该结构上,要么可以通过该结构找到)。

Extl 是eXtl_protocol 类型的指针,保存了网络接口类。

J_osip 保存了osip 初始化时返回的osip 结构体。

J_transactions 一般是等待释放的事务。

在事务经过osip 处理完后,不再需要时,exosip会将其放在j_transactions 上,等待释放。

4、exosip的初始化Exosip 的初始化有两部分组成,这主要是从使用exosip 的角度看。

4.1 对exosip 全局结构体变量的配置这步通过调用接口eXosip_init 完成。

主要完成工作如下:4.1.1 初始化条件变量和互斥信号量。

4.1.2 调用osip_init 初始化osip 库,并将生成osip 结构体给exosip,同时也让osip 的application_contexgt 指针指向exosip,也就是二者相互指向。

4.1.3 调用eXosip_set_callbacks 设置osip 的回调函数,所以回调函数都是exosip 自己实现。

4.1.4 调用jpipe 创建通信用的pipe,之前已经说了,对于windows 平台,是通过socket 接口模拟实现的。

4.1.5 初始化其上的事务和事件队列。

主要,这不同于osip 的事务和事件队列。

4.1.6 调用extl 指向的结构体的init 函数指针,初始化网络接口。

4.2在socket 接口上进行监听这步通过调用eXosip_listen_addr 接口完成。

主要完成工作如下:4.2.1 将eXosip 全局变量的eXtl 指针指向eXtl_udp 全局变量。

4.2.2 根据参数,配置extl_protocol 和exosip 上有关ip 端口地址等信息。

另外,调用extl_udp的tl_open 函数指针,完成在本机指定的端口上监听连接的工作。

需要注意的是,虽然是监听,但是使用的UDP 来建立连接的,所以消息的recv 和发送在同一个socket 上完成。

在osip中设置的out_socket 并不会起作用。

4.2.3 调用osip_thread_create 创建exosip 后台任务,用于驱动osip 的状态机。

(在osip 中,在发送sip 消息部分,提到将9 个函数放到一个线程中执行,exosip 就是这样做的)下面展示了初始化的示例代码:include <eXosip2/eXosip.h>int i;TRACE_INITIALIZE (6, stdout);i=eXosip_init();if (i!=0)return -1;i = eXosip_listen_addr (IPPROTO_UDP, NULL, port, AF_INET, 0);if (i!=0){eXosip_quit();fprintf (stderr, "could not initialize transport layer\n");return -1;}... then you have to send messages and wait for eXosip events...这样,在初始化完成后,我们基本上完成了对内存中所用数据结构的配置,同时启动了一个后台任务负责osip 状态机的驱动。

5、数据收发整体框架5.1 接收过程在初始化过程中我们创建了一个后台任务,现在可以看看这个后台任务都做了哪些操作。

任务的执行函数为_eXosip_thread,在该接口中,循环不断的调用eXosip_execute。

在每一次的eXosip_execute 执行中,完成如下的工作:a. 首先计算出底层osip 离当前时间最近的超时时间。

也就是查看底层所有的超时事件,找出其中的最小值,然后将其与当前时间做差,结果就是最小的超时间隔了。

这步是通过调用接口osip_timers_gettimeout 完成的。

主要检查osip 全局结构体上的ict、ist、nict、nist 以及ixt 上所有事务的事件的超时时间。

如果ict 事务队列上没有事件,则说明没有有效的数据交互存在,返回值为默认的一年,实际上就是让后面的接收接口死等。

如果有事务队列上的事件的超时时间小于当前值,则说明已经超时了,需要马上处理,此时将超时时间清为零,并返回。

b. 调用eXosip_read_message 接口从底层接收消息并处理。

如果返回-2,则任务退出。

c. 执行osip 的状态机。

具体为执行osip_timers_ict(ist|nict|nist)_execute 和osip_ict (ist|nict|nist)_execute 这几个函数。

最后还检查释放已经终结的call、registrations 以及publications。

d.如果keep_alive 设置了,则调用_eXosip_keep_alive 检查发送keep_alive 消息。

这样,当远端的终端代理发送sip 消息过来时,会被之前创建的监听端口捕获(sip 协议默认的端口为5060)。

在调用eXosip_read_message 接口时会将其接收上来。

相关文档
最新文档