sip中invite有关问题
发布时间:2011-07-03 07:15:53 文章来源:www.iduyao.cn 采编人员:星星草
sip中invite问题
小弟在做sip的项目,遇到问题啦,向另外一台机器发invite请求时,通过抓包发现对方收到了我的invite sip消息,而且返回了100(Trying) 还有101 Dialog Establishement两条sip消息,正常情况下应该还会返回个200(OK),但不知道为什么会没返回啊,大虾帮忙看看啊,用的是开源的eXosip协议栈
//初始化Invite请求
ret = eXosip_call_build_initial_invite(&message, theKernel.m_desAddr.c_str(), theKernel.m_srcAddr.c_str(), NULL, "This is a call for a conversation");
//组装XML信息
theDDCPAnalyse.CreateInviteRequest(strOut, "300", "D1 CIF", "H.264", "192.168.1.127 UDP 5050", "h3c-v3");
//
osip_message_set_body(message, strOut.c_str(), strOut.length());
osip_message_set_content_type(message, "Application/DDCP");
//发送
ret= eXosip_call_send_initial_invite (message);
------解决方案--------------------
你抓包看看发出去的请求对不对,如果对请求应答流程熟悉应该很容易发现问题,如果不熟悉就看一下下面的描述。
---------------------------------------------
INVITE
主叫方Tesla首先发起 INVITE 消息到被叫方Marconi。INVITE 消息包含会话类型和一些呼叫所必须的参数。会话类型可能是单纯的语音,也可能是网络会议所用的多媒体视频,还可能是游戏会话。下面是消息体范例,我们来详细分析各个字段的意义。
INVITE sip:marconi@radio.org SIP/2.0
<= 请求方法、请求地址(Request-URI)、SIP 版本号(目前都是 SIP/2.0)
<= 请求地址一般就是被叫方地址,跟 MSN 中好友 eMail 地址类似
Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bKfw19b
<=SIP 版本号(2.0)、传输类型(UDP)、呼叫地址、
<=branch是一随机码,它被看作传输标识
<=Via 字段中地址是消息发送方或代理转发方设备地址,一般由主机地址和端口号组成
<=传输类型可以为 UDP、TCP、TLS、SCTP
Max-Forwards: 70
<=最大跳跃数,就是经过 SIP 服务器的跳跃次数,主要是防止循环跳跃
<=每尽管一台代理服务器,该整数减一
To: G. Marconi <sip:Marconi@radio.org>
From: Nikola Tesla <sip:n.tesla@high-voltage.org>;tag=76341
<=表示请求消息的发送方和目标方
<=如果里面有用户名标签,地址要求用尖括号包起来
<=对于 INVITE 消息,可以在 From 字段中包含 tag,它也是个随机码
Call-ID: 123456789@lab.high-voltage.org
<=呼叫ID是由本地设备生成的,全局唯一值。每次呼叫该值唯一不变
<=对于用户代理发送 INVITE 消息,本地将生成 From tag 和 Call-ID 全局唯一码,被叫方代理则生成 To tag 全局唯一码。这三个随机码做为整个对话中对话标识(dialog indentifier)在通话双方使用。
CSeq: 1 INVITE
<=CSeq,又叫命令队列(Command Seqence),每发送一个新的请求,该数自动加1
* 以上几个字段是所有 SIP 消息体所必须的,其它头字段有些是可选的,有些在特定请求也是必须
Subject: About That Power Outage...
Contact: <sip:n.tesla@lab.high-voltage.org>
<=Contact 是 INVITE 消息所必须的,它用来路由到被叫设备地址,也称为用户代理(UA)
Content-Type: application/sdp
Content-Length: 158
<=最后两位附属字段说明消息体类型以及字段长度
v=0 <=SDP版本号,目前都是 0
o=Tesla 2890844526 2890844526 IN IP4 lab.high-voltage.org <=主叫源地址,类型等
s=Phone Call <=主题
c=IN IP4 100.101.102.103 <=连接
t=0 0 <= 时间戳
m=audio 49170 RTP/AVP 0 <=媒体
a=rtpmap:0 PCMU/8000 <=媒体属性
<=从上面 SDP 消息体我们可以得出下面信息
<=连接 IP 地址:100.101.102.103
<=媒体格式:audio
<=端口号:49170
<=媒体传输类型:RTP
<=媒体编码:PCM u Law
<=采样率:8000 Hz
180 Ringing
当被叫方接收到 INVITE 请求消息后,将回复 180 Ringing。顾名思义,就是发回铃音,提示主叫方电话已连接上了,正等待被叫应答。被叫方接收到 INVITE 消息后也会发生响铃或者其它有呼入提示,这由被叫方设定(我们可以把它想象成我们自己设定手机铃声)。对于 180 响应又被称为“消息及时响应”,它是一种用来测试被叫状态的一种响应。因此它所包含的信息不多,具体 180 响应消息如下:
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bKfw19b
;received=100.101.102.103 <=这里增加一个 received 参数,标识接收方 IP 地址
To: G. Marconi <sip:marconi@radio.org>;tag=a53e42 <=上已提到,To tag 做为被叫方标识
From: Nikola Tesla <sip:n.tesla@high-voltage.org>;tag=76341 <=要求很发送方 From tag 一致
Call-ID: 123456789@lab.high-voltage.org
CSeq: 1 INVITE
Contact: <sip:marconi@tower.radio.org>
Content-Length: 0
<=对于 180 Ringing 响应,基本上就是将 INVITE 的 Via、To、From、Call-ID 和 CSeq 内容复制过来,对于首行标出 SIP 版本号,响应代码(180)和动作原因(reason phrase)
<=注意这里 From 和 To 地址,因为它们用来指定呼叫方向,因此这里的 200 OK 响应并没有将地址对调,仍然保持原样。一点不同的是 To 头字段添加了由被叫方 Marconi 生成的 tag 标识
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
如果客户端的机子突然断了电,那服务端还能收到FD_CLOSE事件么?
如题.....
已查到解决方案(心跳包)
来人,结贴。。。
------解决方案...
-
IOCP使用上的一点看法讨论。
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线...
-
h264 与 RTP 的区别?
同样都是视频应用的协议,他们的关系或者在协议簇中的位置有什么区别?
------解决方案--------------------
H...
-
openmeetings错误 求解决
将doc文件上传时出现错误
错误代码:
Name: error
Value: 2011-6-4 12:54:14 com.artofsolving.jodconver...
-
为什么计算机网络中一定要有一个MAC层(MAC地址),既然MAC地址和IP地址是有一定的映射关系的,为什么不能只用其中一个地址通信就可以了,...
-
P2P软件有技术门槛吗?
讨论一下P2P软件的技术:
1.NAT穿越
2.UDP可靠传输
3.分块调度策略
...
http://hr.baidu.com/www/job/jobDe...
-
以TCP为写的服务器和客户端程序 无法通信
基于面向连接的TCP,写了一个服务器程序和一个客户端程序。服务器负责监听一个端口等待...
-
毕设啊,来不及了,谁做过 OFDMA动态资源分配算法 的 MATLAB仿真??
我们毕设的题目是“OFDMA动态资源分配算法的研究”,我在网上也荡了一...
-
关于UDP包传送的问题
最近在佛山移动做一个项目,这个项目已经过了初验,现在需要终验。但由于一个问题迟迟没有解决,不敢跟客户提终验...
-
udp通信数据接收转发
小弟最近在写流媒体转发服务器程序,从原始服务器发送过来的媒体包,需要1对多的转发给不同的client,在主程序中...