欢迎来到天天文库
浏览记录
ID:30787108
大小:1.15 MB
页数:57页
时间:2019-01-03
《resiprocate协议栈介绍文档》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、协议栈的层次SIP为应用层(Application-Layer)的协议,所以不需要改变操作系统便可以支持。STP已经获得3GPP(ThirdGenerationPartnershipProject)s3GPP2(ThirdGenerationPartnershipProjectNumber2)等机构认证,成为未来第三代行动通讯(3G)的标准。下面是S【P的分层图示,IETF坚持分层,不同模块功能相对独立,各层Z间松散耦合。关于Resiprocate设计首先祭出这面大旗,”类是对概念的描述,面向接口编程;
2、封装变化的概念。”-一这不是我讲的,是大师们的口水。Resiprocate中大部分类就是对RFC3261各种SIP元素、组件的封装,并且也体现了RFC协议设计的层次。在面向对象的设计中我们首先就要厘清问题域的所在;SIPStack的设计就是要充分考虑完整展现RFC定义的各种元素和概念以及让这些独立而又关联的元素互动起來成为一个活的系统。可以这样来考虑,比如我们知道RFC定义了一个SIPMESSAGE的概念;下面是从RFC文档拷贝的内容:SIP消息二起始行*消息头部CRLF(空行)[消息体]因此SIPMe
3、ssage这个概念元素还包括了更多的元素和概念;SIPMessage中我们能抽象出更通用的概念我们暂且叫它Message;起始行的概念E文RequestLine以及StatusLine又包括了很多消息头(这是包容的关系),SIPURL也包括消息头,等等,还有什么参数什么的元素呢;当我们在考虑和提炼这些概念和元素的时候,我们思考怎么抽象他们呢,它们又有什么基本的元素及其共性呢?他们之间的关系如何组织呢?Resiprocate的源码告诉了我们如何去设计和封装这些概念的上佳实现。在Resiprocate中一些
4、RFC3261中定义元素的对应:RFCnameAccessTokenresipTypeAccepthAcceptsMimesAccept-EncodinghAcceptEncodingsTokensAccept-LanguagehAcceptLanguagesTokensAlert-InfohAlertInfosGenericUrisAllowhAllowsTokensAuthentication-InfohAuthenticationlnfosAuthsAuthorizationhAuthorizat
5、ionsAuthsCall-IDhCalllDCalllDCall-InfohCallInfosGenericUrisContacthContactsNameAddrsContent-DispositionhContentDispositionTokenContent-EncodinghContentEncodingTokenContent-LanguagehContentLanguagesTokensContentlengthhContentLengthIntegercategoryContent・T
6、ypehContentTypeMimeContent-Transfer-EncodinghContentTransferEncodingStringCategoryCSeqhCSeqCSeqCategoryDatehDateDatecategoryError-InfohErrorlnfosGenericUrisExpireshExpiresIntegercategoryFromhFromNameAddrIn-ReplyToh」nReplyToCalllD建议:利用CRC卡片的方式去记录理解Resipro
7、cate中的大量的类及其关系。CRC:类、职责、协作。部分设计的理解OBSERVER/VISITOR/COMMAND/ITERATOR模式,工厂模式(大量容器的使用也是一种变体如:DialogSet),代理类句柄类(界面实现分离,隐藏实现…),大量的界面类(如AppXXX系列)是遵循大师BS“界面和实现分离”的原则吧;而句柄方式对对象的间接管理是老外的惯用伎俩啦,关于句柄设计从大师BS的著作到«EffectiveC卄>>的Ilandle_Body论和沉思录>>的大段描述再到《C++ModelDesign
8、»都有发挥和外延,感兴趣可以观之。插播:源码中的大量Clone函数是模仿大师BS的虚拟构造函数一说,是原型模式的体现;源码中对同步的封装值得借鉴,其中有“资源开始即初始化”理论的体现;在DUM部分回调机制所遵循的箸名“好莱坞原则”;句柄和代理的一个特点就是重载了operdtor-〉、operator*等;源码中也非常注重效率如SipCore部分中大量Hash表的建立。T*operator->(){returnget():}constT*op
此文档下载收益归作者所有