belle-sip源码分析

belle-sip源码分析
一、

源码下载:
http://www.linphone.org/technical-corner/belle-sip/downloads
这里写图片描述

安装
sudo apt-get install bctoolbox
sudo apt-get install libantlr3c-dev

请求消息
消息含义
INVITE 发起会话请求,邀请用户加入一个会话,会话描述含于消息体中。对于两方呼叫来说,主叫方在会话描述中指示其能够接受的媒体类型及其参数。被叫方必需在成功响应消息的消息体中指明其希望接受哪些媒体,还可以指示其行将发送的媒体。
如果收到的是关于参加会议的邀请,被叫方可以根据Call-ID或者会话描述中的标识确定用户已经加入该会议,并返回成功响应消息。
ACK 证实已收到对于INVITE请求的最终响应。该消息仅和INVITE消息配套使用。
BYE 结束会话
CANCEL 取消尚未完成的请求,对于已完成的请求(即已收到最终响应的请求)则没有影响
REGISTER 注册
OPTIONS 查询服务器的能力

SIP请求命令的格式,由起始行消息头消息体组成。通过换行符区分消息头中的每一条参数行。
这里写图片描述

SIP请求消息编码的示例:

INVITE sip:66500002@191.169.1.110 SIP/2.0
From: <sip:44510000@191.169.1.116>;tag=1ccb6df3
To: <sip:66500002@191.169.1.110>
CSeq: 1 INVITE
Call-ID: 20973e49f7c52937fc6be224f9e52543@sx3000
Via: SIP/2.0/UDP 191.169.1.116:5061;branch=z9hG4bkbc427dad6
Contact: <sip:44510000@191.169.1.116:5061>
Supported: 100rel,100rel
Max-Forwards:70
Allow:INVITE,ACK,CANCEL,OPTIONS,BYE,REGISTER,PRACK,INFO,UPDATE,SUBSCRIBE,
NOTIFY,MESSAGE,REFER
Content-Length:230
Content-Type: application/sdp

v: 0
o: HuaweiSoftX3000 1073741831 1073741831 IN IP4 191.169.1.116
s: Sip Call
c: IN IP4 191.169.1.95
t: 0 0
m: audio 30000 RTP/AVP 8 0 4 18
a: rtpmap:8 PCMA/8000
a: rtpmap 0 PCMU/8000
a: rtpmap 4 G723/8000
a: rtpmap 18 G729/8000

第一行:请求起始行。INVITE请求消息。请求URI,即被邀用户的当前地址为“sip:66500002@191.169.1.110”。SIP版本号为2.0。
第二行:From字段。指明请求发起方的地址为“sip:44510000@191.169.1.116”。标记为“1ccb6df3”,用于共享同一SIP地址的不同用户用相同的Call-ID发起呼叫邀请时,对用户进行区分
第三行:To字段。指明请求接收方的地址为“sip:66500002@191.169.1.110”。
从From和To字段,我们可以看出:
IP地址为191.169.1.116的SoftX3000控制下的终端44510000拨打IP地址为191.169.1.110的SoftX3000控制下的66500002终端。终端类型可以为SIP、H.323、IAD/AG下挂的ESL等。
第四行:Cseq字段。用于将INVITE请求和其触发的响应、对应的ACK、CANCEL请求相关联。
第五行:Call-ID字段。该字段唯一标识一个特定的邀请,全局唯一。Call-ID为“20973e49f7c52937fc6be224f9e52543@sx3000”,sx3000为发起呼叫的SoftX3000的域名,20973e49f7c52937fc6be224f9e52543为本地标识。
第六行:Via字段。该字段用于指示该请求历经的路径。“SIP/2.0/UDP”表示发送的协议,协议名为“SIP”,协议版本为2.0,传输层为UDP;“191.169.1.116:5061”表示发送方SoftX3000 IP地址为191.169.1.116,端口号为5061;“branch=z9hG4bkbc427dad6”为分支参数,SoftX3000并行分发请求时标记各个分支。
第七行:Contact字段。指示其后的请求(如BYE请求)可以直接发往sip:44510000@191.169.1.116:5061,而不必借助Via字段。
第八行:100rel扩展,该字段为100类响应消息的可靠传输提供了相应的机制。
第九行:Max-Forwards字段。表示该请求到达其目的地址所允许经过的中转站的最大值为70。
第十行:Allow字段。给出IP地址为191.169.1.116的SoftX3000支持的请求消息类型 列表。
第十一~十二行:Content-Length字段,表示消息长度为230个字节。
第十三行:Content-Type字段,表示消息中携带的消息体是单消息体且为SDP。
第十四行:空行,表示下面为SDP会话描述。
第十五行:SDP协议版本号,目前为0版本。
第十六行:会话拥有者/创建者和会话标识,用于给出会话的发起者(其用户名和用户主机地址)以及会话标识和会话版本号。“HuaweiSoftX3000”为用户名,用户名是用户在发起主机上的登录名,如果主机不支持用户标识的概念,该字段标记为“-”。第一个“1073741831”为会话标识,会话标识为一数字串,使得多元组(用户名、会话标识、网络类型、地址类型、地址)构成会话的全球唯一的标识符。第二个“1073741831”为版本号,指该会话公告的版本。供代理服务器检测同一会话的若干个公告哪一个是最新的公告。其基本要求是会话数据修改后,其版本号应递增。“IN”指网络类型,为文本串形式,目前规定的“IN”为Internet。“IP4”指地址类型,为文本串形式,目前已定义的有“IP4”和“IP6”两种。“191.169.1.116”为创建会话的主机的IP地址。对于IP4地址类型,可以是域名全称或点分十进制IP4地址表示形式。对于IP6地址类型,可以是域名全称或压缩文本IP6地址表示形式。
第十七行:会话名。每个会话描述必需有一个且只有一个会话名。
第十八行:连接数据。网络类型和地址类型目前的定义值仅限于IN和IP4。“191.169.1.95”为SoftX3000(IP地址:191.169.1.116)控制下的终端的IP地址(终端类型为SIP、H.323电话或IAD/AG下挂的ESL电话)。
第十九行:时间描述,给出会话激活的时间区段,允许会话周期性发生。 “0”表示起始时间。该字段的格式为t:<起始时间><终止时间>。其中起始时间和终止时间值为NTP(Network Time Protocol)时间值的十进制表示,单位为秒。
第二十行:媒体级描述,该部分给出只适用于该媒体流的信息。“audio”表示媒体类型为音频。目前定义的媒体类型有5种:音频、视频、应用、数据和控制。“30000”指明媒体流发往的传送层端口,即终端的UDP端口号(终端类型为SIP、H.323电话或IAD/AG下挂的ESL电话)。“RTP/AVP”为传送层协议,其值和“c”行中的地址类型有关,对于IP4来说,大多数媒体业务流都在RTP/UDP上传送,已定义如下两类协议:RTP/AVP,音频/视频应用文档,在UDP上传送;Udp,UDP协议。“8 0 4 18”对于音频和视频来说,就是RTP音频/视频应用文档中定义的媒体静荷类型。表示会话中所有这些格式都可能被用到,但第一个格式是会话的缺省格式。
该行总体表示,缺省A律PCM编码单信道音频信号,其在RTP音频/视频应用文档中的静态静荷类型号为8 ,该信号发往UDP端口30000。
第二十一~二十四行:rtpmap属性行,指明从RTP静荷类型至编码的映射关系。该行的格式为:a: rtpmap:<静荷类型><编码名>/<时钟速率>[/<编码参数>]。其中,<编码参数>指的就是音频信道数,对于视频信号尚无编码参数。

这里写图片描述
响应消息
序号 状态码 消息功能
1xx 信息响应(呼叫进展响应) 表示已经接收到请求消息,正在对其进行处理
100 试呼叫
180 振铃
181 呼叫正在前转
182 排队
2xx 成功响应 表示请求已经被成功接受、处理
200 OK
3xx 重定向响应 表示需要采取进一步动作,以完成该请求
300 多重选择
301 永久迁移
302 临时迁移
303 见其它
305 使用代理
380 代换服务
4xx 客户出错 表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理
400 错误请求
401 无权
402 要求付款
403 禁止
404 没有发现
405 不允许的方法
406 不接受
407 要求代理权
408 请求超时
410 消失
413 请求实体太大
414 请求URI太大
415 不支持的媒体类型
416 不支持的URI方案
420 分机无人接听
421 要求转机
423 间隔太短
480 暂时无人接听
481 呼叫腿/事务不存在
482 相环探测
483 跳频太高
484 地址不完整
485 不清楚
486 线路忙
487 终止请求
488 此处不接受
491 代处理请求
493 难以辨认
5xx 服务器出错 表示SIP服务器故障不能完成对正确消息的处理
500 内部服务器错误
501 没实现的
502 无效网关
503 不提供此服务
504 服务器超时
505 SIP版本不支持
513 消息太长
6xx 全局故障 表示请求不能在任何SIP服务器上实现
600 全忙
603 拒绝
604 都不存在
606 不接受

# Belle-sip

## Overview

Belle-sip is a SIP (RFC3261) implementation written in C, with an object oriented API.
Please check "NEWS" file for an overview of current features.
Copyright 2012-2014, Belledonne Communications SARL <contact@belledonne-communications.com>, all rights reserved.

Belle-sip is distributed to everyone under the GNU GPLv2 (see COPYING file for details).
Incorporating belle-sip within a closed source project is not possible under the GPL.
Commercial licensing can be purchased for that purpose from [Belledonne Communications](http://www.belledonne-communications.com).

## Build prerequisite

* [Java SE](http://www.oracle.com/technetwork/java/javase/downloads/index.html) on openJDK
 This is required to generate a C sourcefile from SIP grammar using [antlr3](http://www.antlr3.org/) generator.

### Dependencies

* libtool
* intltool
* pkg-config
* libantlr3c-3.2 or 3.4
* antlr3-3.4
* bctoolbox (see below)
* C++ compiler (for instance g++ or clang++)
* (optional) CUnit

#### Under Debian/Ubuntu

        apt-get install libtool intltool pkg-config libantlr3c-dev antlr3 g++ make
        #and for optional dependencies
        apt-get install libcunit1-dev libpolarssl-dev

#### Under MacOS X using HomeBrew

        brew install intltool libtool pkg-config automake libantlr3.4c homebrew/versions/antlr3
        ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize

#### Under Windows using mingw and Visual Studio

 The procedure is tested for Visual Studio Express 2012.

 * Compile and install libantlr3c, CUnit with ./configure && make && make install
 * get antlr3 from linphone's git server (see above). This version contains up to date visual studio project and solution files.
 * get CUnit from linphone's git server (see above). This version contains up to date visual studio project and solution files.
 * put belle-sip next to antlr3 and to cunit (in the same directory).
 * open belle-sip/build/windows/belle-sip-tester/belle-sip-tester.sln or belle-sip/build/windows/belle-sip/belle-sip.sln
 * Build the solution (antlr3 and cunit are built automatically)

#### Building bctoolbox

bctoolbox build system is Cmake only, but provides pkg-config file for integration with autotools.
git://git.linphone.org/bctoolbox.git 


#### Known issues

 1. Antlr3 on windows
  On windows you have to edit /usr/local/include/antl3defs.h replace:

         #include <winsock.h>
  with:

        #include <winsock2.h>
  Or get the source code from linphone's git (linphone branch):

        git clone -b linphone git://git.linphone.org/antlr3.git
        git clone -b linphone git://git.linphone.org/cunit.git







这里写图片描述

这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值