转载自:
http://hi.baidu.com/nathan2007/blog/item/0b28a3540b63e11e3b293552.html
作者:nathan
以下分析基于客户端版本Fetion 2006 beta 2.1.0.0,协议版本是SIP-C 2.0。
一位朋友留言提到飞信的手机语聊,我这里也把两个飞信用户间手机语聊的通信过程贴出来,大家一起探讨。
以下文字中:红色的表示数据的传递方向,其中221.130.45.203:8080是Fetion用TCP直连方式连接的服务器地址和端口,也就是SIP Proxy Server的IP和Port,蓝色部分是完整的SIP-C消息,就是TCP包的包体部分。
以下的过程是用户A(飞信号:123456789,IP:Port=111.111.111.111:1111)向用户B(飞信号:987654321,IP:Port=222.222.222.222:2222)发起手机语聊,我们可以看到,整个过程仍基本是一个标准的SIP会话建立过程(就是没有Ringing)。
用户A这边:
STEP 1: 通过Proxy转发,发出INVITE到用户B
111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
I fetion.com.cn SIP-C/2.0
F: 1234567890
I: 11
Q: 1 I
T: sip:987654321@fetion.com.cn;p=xxxx
L: 180
v=0
o=-0 0 IN P4111.111.111.111:1111
s=VoiceChat
c=IN IP4 111.111.111.111:1111
t=0 0
a=user:sip:987654321@fetion.com.cn;p=xxxx
m=ivr 1111 sip sip:123456789@fetion.com.cn;p=yyyy
STEP 2:收到Proxy Server返回的“正在联络B..."
111.111.111.111:1111 <<<<<<<< 221.130.45.203:8080
SIP-C/2.0 100 Trying
Q: 1 I
T: sip:987654321@fetion.com.cn;p=xxxx
I: 11
STEP 3:收到Proxy Server转来的用户B的同意消息
111.111.111.111:1111 <<<<<<<< 221.130.45.203:8080
SIP-C/2.0 200 OK
Q: 1 I
T: sip:987654321@fetion.com.cn;p=xxxx
I: 11
STEP 4:回复用户B已收到其同意的消息 (ACK)
111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
A fetion.com.cn SIP-C/2.0
I: 11
Q: 1 A
T: sip:987654321@fetion.com.cn;p=xxxx
F: 123456789
STEP 5:要求Proxy Server开始接通过手机进行语聊,所以这里发出的是S,S=Service方法,用来请求服务器提供额外的服务,这个服务就是"StartVoiceChat"。
111.111.111.111:1111 >>>>>>>> 221.130.45.203:8080
S fetion.com.cn SIP-C/2.0
F: 123456789
I: 12
Q: 1 S
N: StartVoiceChat
L: 103
<args><voice-chat begin-date="2007-00-00 00:00:00.0000" /><users><user sid="987654321" /></users></args>
到这里就跟飞信客户端无关了,我猜测下面就是飞信服务器那边在通过7号信令接通两部手机,通过IVR给两部手机放音,然后捆绑话路,然后两部手机通过飞信的话路控制平台进行话音通话。
用户B那边呢?和用户A这边是一一对应的:
STEP 1: 用户B收到INVITE
222.222.222.222:2222 <<<<<<<< 221.130.45.203:8080
I 123456789 SIP-C/2.0
Q: 1 I
F: sip:987654321@fetion.com.cn;p=xxxx
I: -1
L: 178
v=0
o=-0 0 IN P4222.222.222.222:2222
s=VoiceChat
c=IN IP4 222.222.222.222:2222
t=0 0
a=user:sip:123456789@fetion.com.cn;p=yyyy
m=ivr 3418 sip sip:987654321@fetion.com.cn;p=xxxx
收到这个后,用户B的飞信会弹出窗口,问用户B是否接受用户A发起的手机语聊。这个消息的消息体中的a=,根据SDP,这里是<attribute>:<value>的形式。
STEP 2: 用户B发出同意消息:
222.222.222.222:2222 >>>>>>>> 221.130.45.203:8080
SIP-C/2.0 200 OK
I: -1
Q: 1 I
F: sip:987654321@fetion.com.cn;p=xxxx
L: 180
v=0
o=-0 0 IN P4222.222.222.222:2222
s=VoiceChat
c=IN IP4 222.222.222.222:2222
t=0 0
a=user:sip:987654321@fetion.com.cn;p=xxxx
m=ivr 1082 sip sip:123456789@fetion.com.cn;p=yyyy
STEP 3:收到用户A的ACK确认:
222.222.222.222:2222 <<<<<<<< 221.130.45.203:8080
A 123456789 SIP-C/2.0
Q: 1 A
F: sip:987654321@fetion.com.cn;p=xxxx
I: -1
到这里用户B手机也就响了。
其实,上面这整个过程体现的是真正的SIP过程,跟即时消息不同,SIP的出发点就是建立会话,至于会话的具体过程,如语音还是数据,用什么承载,是人对人还是人对机器,这都不是SIP协议所关心的事情,它最主要的任务只是建立会话。
分享到:
相关推荐
还是用回2006版,2008版的飞信程序太臃肿了,启动得慢。建议用回2006版的!!!
// 接收人手机号、飞信内容 3. 注意事项 (1) 保证你的程序是utf-8编码(或更改飞信类文件编码,但飞信内容必须为utf-8编码); (2) send()方法是有返回值的,可以通过分析文本判断是否发送成功。考虑到wap界面会...
mobile = cons.readLine("%s", "Mobile(手机号):"); if ((passwd = cons.readPassword("%s", "Password(密码,为了安全不回显):"))!= null) { pwd = new String(passwd); java.util.Arrays.fill...
// 接收人手机号、飞信内容 3. 其他 (1) 你的程序需要是utf-8编码的。 (2) send()方法是有返回值的,可以通过分析文本判断是否发送成功。考虑到wap界面会改动,所以没有在类里写死关于发送成功的判断。 (二)...
fetion_android-3.1.1-GEN-GENERIC-1.6-release-120113-tw.apk
nokia N81手班飞信飞信(英文名:Fetion)是中国移动提供的可同时在电脑和手机上使用,能实现消息、短信、语音等多种沟通方式的综合通信服务。 飞信可通过PC客户端、手机客户端或WAP方式登录,也可用普通短信方式与...
private static Fetion fetion = null; public static void main(String[] args) throws Exception{ String mobile = null; String pwd = null; if(args==null || args.length){ System.out.println(...
飞信(Fetion)不但可以免费从PC给手机发短信,而且不受任何限制,能够随时随地与好友开始语聊,并享受超低语聊资费。 现在就给大家实际演示一下如何用飞信发免费短信。 第一步:首先安装“飞信”
LibFetion是由邓东东主导开发的第三方飞信应用程序。该程序具有较强的跨平台性,在主流操作系统和手持设备上都有版本。 LibFetion由操作界面(GUI shell) + libfetion-core协议库两部分构成。 其中GUI shell的实现与...
//接收人手机号、飞信内容 $fetion->send('13500001111', 'Hello Fetion1!'); $fetion->send('13500002222', 'Hello Fetion2!'); $fetion->send('13500003333', 'Hello Fetion3!'); $fetion->send('13500004444', '...
使用方法: 1)进入Dos命令行 2)输入如下命令 sms -f ’您的手机号‘ -p ‘您的飞信密码’ -t ’目标手机号‘ -m ’你需要发送的消息‘ 其中您的手机号需要开通飞信服务,目标手机号需要是你的飞信好友。...
final Fetion fetion = new Fetion("phone","password"); fetion.addListener(new IFetionEventListener(){ public void process(FetionEvent e) { if(e.getFirstLine()!=null && e.getFirstLine...
移动公司通信软件 飞信 fetion_2008
飞信飞信飞信飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip
手机飞信 飞信这东西不错 免费发短信 很实在的一个软件
final Fetion fetion = new Fetion("phone","password"); fetion.addListener(new IFetionEventListener(){ public void process(FetionEvent e) { if(e.getFirstLine()!=null && e.getFirstLine().startsWith("M...
final Fetion fetion = new Fetion("phone","password"); fetion.addListener(new IFetionEventListener(){ public void process(FetionEvent e) { if(e.getFirstLine()!=null && e.getFirstLine().startsWith("M...
linux-fetion-1.3-1.fc13.i686.rpm
飞信手机语音通话,无论长途、本地均按照此标准收取费用,但不计入各地品牌优惠套餐之中。 5. 国际漫游状态下的中国移动用户,在使用飞信业务时,无论PC客户端、手机客户端、短信客户端都可以正常使用。相应产生...
Fetion API UTF-8 发布包.rar 大家可以为自己的网页添加一个新的功能,网页飞信!