`

飞信分析之六:Fetion手机语聊的SIP-C交互过程

阅读更多

转载自:

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正式版:Fetion2006_2.3.0210

    还是用回2006版,2008版的飞信程序太臃肿了,启动得慢。建议用回2006版的!!!

    PHP飞信发送类(PHPFetion)1.2.0

    // 接收人手机号、飞信内容 3. 注意事项 (1) 保证你的程序是utf-8编码(或更改飞信类文件编码,但飞信内容必须为utf-8编码); (2) send()方法是有返回值的,可以通过分析文本判断是否发送成功。考虑到wap界面会...

    fetion-java-api(飞信的java api eclipse项目)

    mobile = cons.readLine("%s", "Mobile(手机号):"); if ((passwd = cons.readPassword("%s", "Password(密码,为了安全不回显):"))!= null) { pwd = new String(passwd); java.util.Arrays.fill...

    PHP飞信(PHPFetion)发送类v1.2

    // 接收人手机号、飞信内容 3. 其他 (1) 你的程序需要是utf-8编码的。 (2) send()方法是有返回值的,可以通过分析文本判断是否发送成功。考虑到wap界面会改动,所以没有在类里写死关于发送成功的判断。 (二)...

    fetion_android-3.1.1-GEN-GENERIC-1.6

    fetion_android-3.1.1-GEN-GENERIC-1.6-release-120113-tw.apk

    Fetion_NN81_SYMBIAN200

    nokia N81手班飞信飞信(英文名:Fetion)是中国移动提供的可同时在电脑和手机上使用,能实现消息、短信、语音等多种沟通方式的综合通信服务。 飞信可通过PC客户端、手机客户端或WAP方式登录,也可用普通短信方式与...

    java飞信接口,FetionApi(无license限制,附可运行例子,简单文档说明,eclipse项目)

    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) 教程之基础使用教程

    飞信(Fetion)不但可以免费从PC给手机发短信,而且不受任何限制,能够随时随地与好友开始语聊,并享受超低语聊资费。  现在就给大家实际演示一下如何用飞信发免费短信。  第一步:首先安装“飞信”

    linux-fetion_0.9.2-ubuntu_8.04_i386.deb

    LibFetion是由邓东东主导开发的第三方飞信应用程序。该程序具有较强的跨平台性,在主流操作系统和手持设备上都有版本。 LibFetion由操作界面(GUI shell) + libfetion-core协议库两部分构成。 其中GUI shell的实现与...

    模拟登录WAP飞信发送短信phpfetion v1.5.0.rar

    //接收人手机号、飞信内容 $fetion-&gt;send('13500001111', 'Hello Fetion1!'); $fetion-&gt;send('13500002222', 'Hello Fetion2!'); $fetion-&gt;send('13500003333', 'Hello Fetion3!'); $fetion-&gt;send('13500004444', '...

    fetion_win32:命令行下使用的飞信

    使用方法: 1)进入Dos命令行 2)输入如下命令 sms -f ’您的手机号‘ -p ‘您的飞信密码’ -t ’目标手机号‘ -m ’你需要发送的消息‘ 其中您的手机号需要开通飞信服务,目标手机号需要是你的飞信好友。...

    飞信接口java Fetion Api java

    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

    飞信Fetion 2008.zip

    飞信飞信飞信飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip飞信Fetion 2008.zip

    手机飞信Fetion_350_web.jar

    手机飞信 飞信这东西不错 免费发短信 很实在的一个软件

    fetion-java-api(with doc and example no license limit)eclipse项目,可运行

    final Fetion fetion = new Fetion("phone","password"); fetion.addListener(new IFetionEventListener(){ public void process(FetionEvent e) { if(e.getFirstLine()!=null && e.getFirstLine().startsWith("M...

    java飞信接口,FetionApi(无license限制,附可运行代码例子)

    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

    linux-fetion-1.3-1.fc13.i686.rpm

    QQ飞信(Fetion2008 3.1)

    飞信手机语音通话,无论长途、本地均按照此标准收取费用,但不计入各地品牌优惠套餐之中。 5. 国际漫游状态下的中国移动用户,在使用飞信业务时,无论PC客户端、手机客户端、短信客户端都可以正常使用。相应产生...

    Fetion API UTF-8 发布包

    Fetion API UTF-8 发布包.rar 大家可以为自己的网页添加一个新的功能,网页飞信!

Global site tag (gtag.js) - Google Analytics