- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]Resiprocate协议栈分析
协议栈的层次
SIP 为应用层(Application-Layer)的协议,所以不需要改变操作系统便可以支持。SIP
已经获得3GPP (Third GenerationPartnership Project)、3GPP2 (Third Generation
Partnership ProjectNumber 2)等机构认证,成为未来第三代行动通讯 (3G) 的标准。
下面是SIP 的分层图示,IETF 坚持分层,不同模块功能相对独立,各层之间松散耦合。
事务用户层(Transaction User)
事务层(Transaction )
传输层(Transport)
语法与编码层(Syntax and Encoding)
1
关于Resiprocate 设计
首先祭出这面大旗,”类是对概念的描述,面向接口编程;封装变化的概念。”这
不是我讲的,是大师们的口水。
Resiprocate 中大部分类就是对RFC3261 各种SIP 元素、组件的封装,并且也体现了
RFC 协议设计的层次。
在面向对象的设计中我们首先就要厘清问题域的所在;SIP Stack 的设计就是要充分
考虑完整展现RFC定义的各种元素和概念以及让这些独立而又关联的元素互动起来成为
一个活的系统。
可以这样来考虑,比如我们知道RFC 定义了一个SIP MESSAGE 的概念;下面是从
RFC 文档拷贝的内容:
SIP 消息 = 起始行
*消息头部
CRLF(空行)
[消息体]
因此SIP Message 这个概念元素还包括了更多的元素和概念;SIP Message 中我们能抽
2
象出更通用的概念我们暂且叫它Message; 起始行的概念E 文Request Line 以及Status
Line 又包括了很多消息头(这是包容的关系),SIPURL 也包括消息头,等等,还有什
么参数什么的元素呢;当我们在考虑和提炼这些概念和元素的时候,我们思考怎么抽象
他们呢,它们又有什么基本的元素及其共性呢?他们之间的关系如何组织呢?
Resiprocate 的源码告诉了我们如何去设计和封装这些概念的上佳实现。在Resiprocate
中一些RFC3261 中定义元素的对应:
建议:利用CRC 卡片的方式去记录理解Resiprocate 中的大量的类及其关系。CRC:类、
职责、协作。
部分设计的理解
OBSERVER/VISITOR/COMMAND/ITERATOR 模式,工厂模式(大量容器的使用也是一种变体
如:DialogSet),代理类句柄类(界面实现分离,隐藏实现…),……
大量的界面类(如AppXXX 系列)是遵循大师BS “界面和实现分离”的原则吧;而句柄方
3
式对对象的间接管理是老外的惯用伎俩啦,关于句柄设计从大师BS 的著作到
Effective C++的Handle_Body 论和C++沉思录的大段描述再到C++ Model
Design都有发挥和外延,感兴趣可以观之。
插播:
源码中的大量Clone 函数是模仿大师BS 的虚拟构造函数一说,是原型模式的体现;
源码中对同步的封装值得借鉴,其中有“资源开始即初始化”理论的体现;在DUM 部分
回调机制所遵循的著名“好莱坞原则”;句柄和代理的一个特点就是重载了operator-、
operator*等;源码中也非常注重效率如Sip Core 部分中大量Hash 表的建立。
T* operator-()
{
return get();
}
const T* operator-() const
{
return get();
}
T operator- ()
{
return *get();
}
const T operator*() const
{
return *get();
}
Handled::Handled(HandleManager ham) :
mHam
您可能关注的文档
- [计算机软件及应用]J2EE下的Agent迁移机制研究.pdf
- [计算机软件及应用]magic linux安装.ppt
- [计算机软件及应用]MATLAB与系统仿真9.pdf
- [计算机软件及应用]MATLAB的程序设计.ppt
- [计算机软件及应用]MATLAB基本教程.pdf
- [计算机软件及应用]Matlab基础.ppt
- [计算机软件及应用]matlab课件:第7章 MATLAB符号计算.ppt
- [计算机软件及应用]matlab教程ppt4.pdf
- [计算机软件及应用]matlab高级编程与应用-图像处理实验报告.doc
- [计算机软件及应用]MATLAB绘图.ppt
- [计算机软件及应用]SAS基本教程.pdf
- [计算机软件及应用]Rational Rose教程 UML建模教程.pdf
- [计算机软件及应用]QHM Ver155演示资料CN.ppt
- [计算机软件及应用]serve-u软件介绍及电子表格Excel使用25招.doc
- [计算机软件及应用]rh124-1112-编写Shell管理脚本.ppt
- [计算机软件及应用]shell脚本编程.ppt
- [计算机软件及应用]Shell脚本编程基础知识.ppt
- [计算机软件及应用]QQ2812用户手册V21-20091012.pdf
- [计算机软件及应用]S3C2410中文手册全集.pdf
- [计算机软件及应用]SIP协议及其在视频监控系统中的应用.ppt
文档评论(0)