SIP协议 & Android Studio 快捷键

--------------------------------------------------Android Studio--------------------------------------------------

Ctrl+G 查询变量或者函数或者类在哪里被使用或被调用
Ctrl+H:查找功能,全局查找
double Shift:全局查找,这个查看和Ctrl+H稍稍有些不同,这个是全局文件查找,到文件名称层面。
Ctrl+O:快捷查找当前类中的函数,变量


Ctrl+Shift+R:快速定位到文件。
Ctrl+Shift+T:快速打开类


Ctrl+K:选中一个变量后,快速定位到下一个使用该变量的地方
Ctrl+Shift+K:选中变量后定位到上一个位置


Alt+↑:光标所在位置那行代码往上移动
Alt+↓:光标所在位置那行代码往下移动


Ctrl+D:删除光标所在位置那行代码
Alt+Enter:导入包
Alt+←:后退,定位到上个查看或者编辑的地方
Alt+→:往前定位,比如你定位到上个点后,想回去,就可以用这个快捷键


Ctrl+/:当行注释,反注释再按一次即可
Ctrl+Shift+/:模块注释,反注释再按一次即可,注意这边的”/“不能用小键盘的


F4:查看类继承关系
F5:单步调试进入函数内部。
F6:单步调试不进入函数内部。
F7:由函数内部返回调用处。
F8:执行到下一个断点,没断点则执行完成。


Ctrl+E:查看最近打开过的文件
Ctrl+Shift+E:查看最近编辑过的文件

-------------------------SI--------------------------------------------------
标记成黄色 Shift + F8
alt+,:上一个
alt+.:下一个
ctrl+/:全局搜
ctrl+f:文件中搜
F3:上一个
F4:下一个
ctrl+鼠标左键:进入
双击大括号外侧:全选
-------------------------Eclipse--------------------------------------------------
ctrl+shift+r:全局搜文件名
ctrl+o:在当前类中搜索方法名
alt+上方向:选中行向上移动
ctrl+e:切换选项卡
ctrl+m:让界面最大化
ctrl+Shift+K:文本编辑器查找上一个  
ctrl+K:文本编辑器查找下一个  
ctrl+alt+h:打开该方法在哪里被调用
ctrl+l:跳转到对应行
ctrl+shift+g:在工作空间中查找引用了光标所在标识符的位置


 

比较常用的Eclipse开发Android的快捷键:

 

自动补充import Package Ctrl+Shift+O,这里O代表Organize Import的意思;

 

格式化代码缩进 Ctrl+Shift+F,这里面我们可以记忆F为Format格式化的意思;

 

快速查找代码 Ctrl+F;

 

撤消到上一次 Ctrl+Z;

 

智能内容感知 Alt+/ ,该快捷键可以方便的匹配我们使用的类信息,/ 在键盘上和?是同一个按键;

 

调用运行Run As对话框可以使用 Ctrl+F11,如果为Debug调试方式可以直接使用 F11;

 

生成一个板块注释 Alt+Shift+J ,单行注释为 Ctrl+/;

 

在一个类中查找方法 Ctrl+O;

 

全局搜索方法或者类 Alt+Shift+R,Alt+Shift+T;

 

查看哪些类调用过这个方法 Alt+Shift+G;

 

显示一个方法或者类的描述 F2;

 

进入一个方法或者类 F3或者按住Ctrl再点击;

 

import相关类,同时若已经import的类,没有被用到,就删除 Ctrl+Shift+O;

 

删除选中的行 Ctrl+D;

 

移动选中的行 按住Alt并选择行+方向键;

 

回到上次编辑过的地方 Ctrl+Q;

 

向后到浏览过的地方 Alt+Left;

 

向前到浏览过的地方 Alt+Right;

 

向下查找选中的字符串 Ctrl+K;

-------------------------RCS项目相关--------------------------------------------------

客户端以 ACK 确认INVITE 请求的最终响应,也就是说INVITE必须对应一个ACK。同时INVITE和ACK都是同一个人发起和结束的。

一个最简单的presence过程如下:一个用户(称为watcher)订阅(SUBSCRIBE)他感兴趣的另一用户(presentity)的presence状态,presentity接受订阅请求。
以后presentity的状态发生变化之后他会发布(PUBLISH)自己的新状态,这个新状态会通知(NOTIFY)给watcher.

搜索消息信令(比如命令,控制等)只需要看sip和sdp协议即可,看具体的报文需要搜索msrp协议

如何处理SISO回发的消息:
当客户端向SISO发送请求后,不同的功能模块都会有个字定义的类来处理SISO回传的消息。
比如IM模块有SlickImHandler,ImageShare模块有SlickIshHandler,这些模块都有个init方法,
在Listener方法里面处理SISO回发的消息,也就是这个Lister被加入到SISO的监听器中,只有Register在RegisterManager中的registerListeners方法里添加mSlickStatusListener的。

所有功能的触发都使用Intent完成
FT和IM的触发在IMModel里面,其他的功能类似

Presence模块就是对个人资料进行管理的模块,Social Presence可以实现类似朋友圈的功能
XDM:XML Document Manager实现对XML文件的管理,直接对应上传下载单个人的增强型通讯录资料
EAB:增强型联系人
SISO:一般在RCS的FW模块中遇到Notify和Enable相关的函数名都是会往JNI下层NATIVE调用的
Bearer的意思是 承载, 可以理解成一个IP连接; Pdn是无线IP网络的接入点,使用手机流量的时候才会用到, 使用Wifi的时候不用
Personal Network Blacklists(PNB)
IMDN: Instant Message Disposition Notification("Delivered" message notification ,"Displayed" message notification)
-----其他-----
1.
安装和删除apk步骤,有时需要同时删除system/和system/priv-app目录下的apk
adb remount
adb shell su -c setenforce 0
adb push SecTelephonyProvider.apk /system/
adb push SecRcs_Blue.apk /system/priv-app
adb reboot
2.
ps网络:数据网络(volte电话,rcs短信)
cs网络:传统语音网络(比如传统的电话,短信)
3.

-----Configuration-----
1.
rcs注册前启动http和https下载配置文件并解析的log可以通过RCS_CONFIG这个tag查看
http的HttpAdapter这个tag
2.
globalsetting.xml: 主要配置协议相关的参数
imsprofile.xml: 主要配置网络和运营商相关的参数
服务器下载下来的xml:主要涉及业务方面的参数,比如支持哪些能力
3.
<application
    android:name="ImsFrameworkApp"
    android:persistent="true"/>
在application中发现persistent="true"这个标签就会在开机时自动调用"ImsFrameworkApp"这个类的onCreate()方法
4.
cookie是在RCS客户端向服务器发请求后,服务器回复给客户端的时候发送给客户端的,
每个客户只有唯一一个cookie用来标示当前客户,这样服务器在下次通信时就能根据cookie来识别同一个用户。
5.
log里直接过滤SIPMSG,可以得到所有sip协议相关的log,
dump里一般红色的为向外发的消息,蓝色的为接受的消息。如果整段消息中有报错但也有200OK,那只要有200OK的就表明成功。
6.
-----IM-----
IM中建立session的过程中有个状态机的机制,可以跟踪"Imsession:"这个tag来查看log信息
MO端改变状态为established state是在ACK发送出去后,MT端改变状态为established state是在接收到ACK后
IM机制的数据改变(session包含message和participant两个)是暂存到ImCache中,数据库DB和ImTranslation通过监听ImCache的改变来触发相关操作

-----GEOLocation-----
(GeoLocation启动流程:
app发来intent-->
GlsModel接受并发给Translation-->
GlsTranslation接受并分发intent-->
GlsModule接受到Translation发来的intent-->
在Iservice中regist plugin(plugin就是把GeoLocation封装成一个功能置于IM中)-->调用IMModel)

GeoLocation目前主要还是通过FT去实现的
GeoLocation PUSH:向对方推送自己的地理位置,当PUSH直接发送过去不需要对方allow
GeoLocation PULL:向对方索取对方的地理位置,当PULL时需要查询对方是否allow

 

-------------------------SDP协议--------------------------------------------------
Field Name
v= Protocol version number
o= Owner/creator and session identifier
s= Session name
i= Session information
c= Connection information
t= Timer session starts and stops
m= Media information
a= Media attributes
-------------------------SIP协议--------------------------------------------------
401 Unauthorized:无权,服务器要求对客户端进行认证
407 Proxy Authentication Required:要求代理权,服务器要求对客户端进行认证
488 Not Acceptable:服务器不支持该项功能;
202 OK:表示服务器不是消息的接收方,接受这个请求并尽力转发给MT,但是并不保证一定能到达目的地;

Contact:当前消息的联系人地址,也就是发送该条消息的人;
via:这条消息所有经历的路径;
CSeq:当前这条消息是针对哪条消息的,也就是说是回复给哪条的(CSeq: 4711 INVITE 表明当前消息是回复给INVITE的)
UA: user agent
UE: user equipment
MO: mobile origin
MT: mobile terminal
PDN: (Public Data Network) wifi和移动网络的统称
MCC: Mobile Country Code
MNC: Mobile Network Code


事务
SIP是一个客户/服务器协议。客户和服务器之间的操作从第1个请求至最终响应为止的所有消息构成一个SIP事务。
一个正常的呼叫一般包含三个事务。其中,呼叫启动包含两个操作请求:邀请(Invite)和证实(ACK),前者需要回送响应,后者只是证实已收到最终响应,不需要回送响应。呼叫终结包含一个操作请求:再见(Bye)。

SIP URL
寻址采用SIP URL(Uniform Resource Locators),即采用什么样的地址形式标识终端用户
“用户参数”,SIP URL的一个特定功能是允许主机类型为IP电话网关,此时,用户名可以为一般的电话号码。由于BNF语法表示无法区分电话号码和一般的用户名,因此,在域名后增加了“用户参数”字段。
该字段有两个可选值:IP和电话,当其设定为“电话”时,表示用户名为电话号码,对应的端系统为IP电话网关。
Sip; 55500200@127.0.0.1:5061; User=phone;
55500200为用户名,127.0.0.1为主机的IP地址,5061为主机端口号。用户参数为“电话”,表示用户名为电话号码。
Sip: alice@registrar.com; method=REGISTER;
Alice为用户名,registrar.com为主机域名。方法参数为“登记”。

SDP
SIP协议是IETF多媒体数据和控制体系结构的一部分,与其它协议相互合作,SDP(Session Description Protocol)用于描述多媒体会话。但是SIP协议的功能和实施并不依赖这些协议。



log更新

******************************Configuration*******************************
0.
ps网络:数据网络(volte电话,rcs短信)
cs网络:传统语音网络(比如传统的电话,短信)
1.
rcs注册前启动http和https下载配置文件并解析的log可以通过RCS_CONFIG这个tag查看
http的可以通过HttpAdapter这个tag查看
2.
globalsetting.xml: 主要配置协议相关的参数
imsprofile.xml: 主要配置网络和运营商相关的参数
服务器下载下来的xml:主要涉及业务方面的参数,比如支持哪些能力
3.
关于RCS服务开机自启动问题解释如下:
<application
    android:name="ImsFrameworkApp"
    android:persistent="true"/>
在application中发现persistent="true"这个标签就会在开机时自动调用"ImsFrameworkApp"这个类的onCreate()方法
4.
cookie是在RCS客户端向服务器发请求后,服务器回复给客户端的时候发送给客户端的,
每个客户只有唯一一个cookie用来标示当前客户,这样服务器在下次通信时就能根据cookie来识别同一个用户。
5.
IMSI:International Mobile Subscriber Identification Number)国际移动用户识别码是区别移动用户的标志
IMEI(International Mobile Equipment Identity)是移动设备国际身份码的缩写
IMSI是从SIM卡中获取的,IMEI是从手机设备中获取的


******************************FT********************************************
1.
FtMsrpMessage这个tag可以显示出现state所处的状态,FT的状态变化基本都是在这个类FtMsrpMessage,比如AttachingState-->AttachedState-->SendingState-->InProgressState
2.
在SlickImHandler中可以显示目前发送FT的进度数据
SlickImHandler: imftIndicationTransferProgress:
08-18 14:00:50.330  1405  1468 D SlickImHandler: imftIndicationTransferProgress: handleInstance ImsSvcIMAppConnHndl(4, 2) handleIM -1 handleFT 2 handleFile 0transferred 2621/52325
3.
FT在FtMsrpMessage类中使用状态转换机制
InitialState-->AttachingState-->AttachedState-->SendingState-->InProgressState-->CompletedState-->CancelingState-->CanceledState
SIP报文信息全部由Stack发出,FW这边不会发,例如下面的报文都是SLK(Slick)发出的,从m=message 8880 TCP/MSRP和a=file两句可以看出这个是FT,另外volte的m=audio,
10-17 17:46:16.950  1386  5242 D SLK     : INVITE sip:+14252745868@msg.pc.t-mobile.com;user=phone SIP/2.0
10-17 17:46:16.950  1386  5242 D SLK     : From: <sip:14254356420@msg.pc.t-mobile.com>;tag=790665955
10-17 17:46:16.950  1386  5242 D SLK     : To: <sip:+14252745868@msg.pc.t-mobile.com;user=phone>
10-17 17:46:16.950  1386  5242 D SLK     : CSeq: 1 INVITE
10-17 17:46:16.950  1386  5242 D SLK     : m=message 8880 TCP/MSRP *
10-17 17:46:16.950  1386  5242 D SLK     : a=path:msrp://[2607:fb90:d09:18bd:0:b:ee49:ea01]:8880/ug6bK7IQ;tcp
10-17 17:46:16.950  1386  5242 D SLK     : a=file-selector:name:"20141017_170430_resized_resized.jpg" type:image/jpeg size:1048561
10-17 17:46:16.950  1386  5242 D SLK     : a=file-transfer-id:pEtcHKxcQjbkETytM
10-17 17:46:16.950  1386  5242 D SLK     : a=file-disposition:attachment
10-17 17:46:16.950  1386  5242 D SLK     : a=sendonly


4.
msg.sendToTarget();这里实际上可以理解为 context.msg.sendToTarget();
这里的msg会发回也创建它的地方去处理,也即obtainMessage(EVENT_FILE_COMPLETE)的地方,一般都会在processMessage里面去处理相应的case,


5.


******************************IM*********************************************
0.
IM创建会话并发送信息的过程如下:
ImTranslation->ImModule->ImSession(initial->established)->ImsServiceStub->SlickImHandler->RcsIM->Stack(MSRP SEND)
ImTranslation接受到从app传过来的intent交给ImModule去处理;
ImSession负责创建session,并让状态机从initial转换到established状态;
ImsServiceStub相当于代理负责ImSession到ImService之间的数据交互;
SlickImHandler处理与SISO交互的的参数,并发送给RcsIM这个JNI类去向SISO传递,所以判断bug是SISO还是FW的错误可以看SlickImHandler这个类;
1.
IM中建立session的过程中有个状态机的机制,可以跟踪"Imsession:"这个tag来查看log信息
2.
MO端改变状态为established state是在ACK发送出去后,MT端改变状态为established state是在接收到ACK后
The state of ImSession:
INITIAL
    A new created IMSession object is always set to INITIAL state.
STARTING
    Start to send the outgoing session request. The stack will send INVITE.
STATED
    Request is completed and wait for session established. 
ESTABLISHED
    Session is established after the three-way handshake (INVITE, final response to INVITE, ACK).
CLOSING
    Start to close the session. The stack is sending BYE.
CLOSED
    Chat session is closed by local or remote. The transaction of SIP BYE and its responses should have been terminated.
3.
IM机制的数据改变(session包含message和participant两个)是暂存到ImCache中,数据库DB和ImTranslation通过监听ImCache的改变来触发相关操作 
4.
所有功能的触发都使用Intent完成
FT和IM的触发在IMModel里面,其他的功能类似
5.
如何处理SISO回发的消息:
当客户端向SISO发送请求后,不同的功能模块都会有个字定义的类来处理SISO回传的消息。
比如IM模块有SlickImHandler,ImageShare模块有SlickIshHandler,这些模块都有个init方法,
在Listener方法里面处理SISO回发的消息,也就是这个Lister被加入到SISO的监听器中,只有Register在RegisterManager中的registerListeners方法里添加mSlickStatusListener的。
IMModel继承了Handler,可以直接在handleMessage()方法中处理接收到的intent。
6.
Imdn <delivery-notification>
IMDN: Instant Message Disposition Notification
"Delivered" message notification
"Displayed" message notification
Delivery notification request for every message, user can enable or disable the display notifications.
IsComposing indications
This allows a user in a chat conversation to see when another user is typing a new message/reaction.
******************************Presence******************************
1.
Presence模块就是对个人资料进行管理的模块,Social Presence可以实现类似朋友圈的功能
2.
一个最简单的presence过程如下:一个用户(称为watcher)订阅(SUBSCRIBE)他感兴趣的另一用户(presentity)的presence状态,presentity接受订阅请求。
以后presentity的状态发生变化之后他会发布(PUBLISH)自己的新状态,这个新状态会通知(NOTIFY)给watcher.
3.
XDM:XML Document Manager实现对XML文件的管理,直接对应上传下载单个人的增强型通讯录资料
EAB:增强型联系人
SISO:一般在RCS的FW模块中遇到Notify和Enable相关的函数名都是会往JNI下层NATIVE调用的
Bearer:的意思是 承载, 可以理解成一个IP连接; 
Pdn:是无线IP网络的接入点,使用手机流量的时候才会用到, 使用Wifi的时候不用
Personal Network Blacklists(PNB)
IMDN: Instant Message Disposition Notification("Delivered" message notification ,"Displayed" message notification)




******************************GEOLocation******************************
1.GeoLocation启动流程:
app发来intent-->
GlsModel接受并发给Translation-->
GlsTranslation接受并分发intent-->
GlsModule接受到Translation发来的intent-->
在Iservice中regist plugin(plugin就是把GeoLocation封装成一个功能置于IM中)-->调用IMModel
2.GeoLocation目前主要还是通过FT去实现的
GeoLocation PUSH:向对方推送自己的地理位置,当PUSH直接发送过去不需要对方allow
GeoLocation PULL:向对方索取对方的地理位置,当PULL时需要查询对方是否allow




--------------------------------------------------------------------------------------------------SIP协议----------------------------------------------------------------------------------------------
0. 
log里直接过滤SIPMSG,可以得到所有sip协议相关的log,
dump里一般红色的为向外发的消息,蓝色的为接受的消息。如果整段消息中有报错但也有200OK,那只要有200OK的就表明成功。
Tx 表示当前报文是发送出去的, Rx 表示当前报文是收到的回复。
SIP协议是IETF多媒体数据和控制体系结构的一部分,与其它协议相互合作,SDP(Session Description Protocol)用于描述多媒体会话。但是SIP协议的功能和实施并不依赖这些协议。
搜索消息信令(比如命令,控制等)只需要看sip和sdp协议即可,看具体的报文需要搜索msrp协议
1.
错误代码
401 Unauthorized:无权,服务器要求对客户端进行认证
407 Proxy Authentication Required:要求代理权,服务器要求对客户端进行认证
488 Not Acceptable:服务器不支持该项功能;
202 OK:表示服务器不是消息的接收方,接受这个请求并尽力转发给MT,但是并不保证一定能到达目的地;
2.缩写
Contact:当前消息的联系人地址,也就是发送该条消息的人;
via:这条消息所有经历的路径;
CSeq:当前这条消息是针对哪条消息的,也就是说是回复给哪条的(CSeq: 4711 INVITE 表明当前消息是回复给INVITE的)
UA: user agent
UE: user equipment
MO: mobile origin
MT: mobile terminal
PDN: (Public Data Network) wifi和移动网络的统称
MCC: Mobile Country Code
MNC: Mobile Network Code
3.事务
SIP是一个客户/服务器协议。客户和服务器之间的操作从第1个请求至最终响应为止的所有消息构成一个SIP事务。
一个正常的呼叫一般包含三个事务。其中,呼叫启动包含两个操作请求:邀请(Invite)和证实(ACK),前者需要回送响应,后者只是证实已收到最终响应,不需要回送响应。呼叫终结包含一个操作请求:再见(Bye)。
4.
SIP URL
寻址采用SIP URL(Uniform Resource Locators),即采用什么样的地址形式标识终端用户
“用户参数”,SIP URL的一个特定功能是允许主机类型为IP电话网关,此时,用户名可以为一般的电话号码。由于BNF语法表示无法区分电话号码和一般的用户名,因此,在域名后增加了“用户参数”字段。
该字段有两个可选值:IP和电话,当其设定为“电话”时,表示用户名为电话号码,对应的端系统为IP电话网关。
Sip; 55500200@127.0.0.1:5061; User=phone;
55500200为用户名,127.0.0.1为主机的IP地址,5061为主机端口号。用户参数为“电话”,表示用户名为电话号码。
Sip: alice@registrar.com; method=REGISTER;
Alice为用户名,registrar.com为主机域名。方法参数为“登记”。
5.
客户端以 ACK 确认INVITE 请求的最终响应,也就是说INVITE必须对应一个ACK。同时INVITE和ACK都是同一个人发起和结束的。
6.
能力发现的时候,先发option请求,然后看返回的sip 200 OK里面的参数来确定是否有能力,
如果没有返回对于option的sip 200 OK,那么就说明没有能力。




-------------------------SDP协议--------------------------------------------------
Field Name
v= Protocol version number 
o= Owner/creator and session identifier 
s= Session name 
i= Session information 
c= Connection information 
t= Timer session starts and stops 
m= Media information 
a= Media attributes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值