协议栈的层次 SIP 为应用层(Application-Layer)的协议,所以不需要改变操作系统便可以支持。SIP 已经获得3GPP (Third GenerationPartnership Project)、3GPP2 (Third Generation Partnership ProjectNumber 2)等机构认证,成为未来第三代行动通讯 (3G) 的标准。 下面是 SIP 的分层图示,IETF 坚持分层,不同模块功能相对独立,各层之间松散耦合。 事务用户层(Transaction User) 事务层(Transaction ) 传输层(Transport) 语法与编码层(Syntax and Encoding) 关于Resiprocate 设计 首先祭出这面大旗,”类是对概念的描述,面向接口编程;封装变化的概念。”---这不是我讲的,是大师们的口水。 Resiprocate 中大部分类就是对 RFC3261 各种 SIP 元素、组件的封装,并且也体现了RFC 协议设计的层次。 在面向对象的设计中我们首先就要厘清问题域的所在;SIP Stack 的设计就是要充分考虑完整展现RFC定义的各种元素和概念以及让这些独立而又关联的元素互动起来成为一个活的系统。 可以这样来考虑,比如我们知道 RFC 定义了一个 SIP MESSAGE 的概念;下面是从 RFC 文档拷贝的内容: SIP 消息 = 起始行 *消息头部 CRLF(空行) [消息体] 因此 SIP Message 这个概念元素还包括了更多的元素和概念;SIP Message 中我们能抽 象出更通用的概念我们暂且叫它 Message; 起始行的概念 E 文 Request Line 以及 Status Line 又包括了很多消息头(这是包容的关系),SIPURL 也包括消息头,等等,还有什么参数什么的元素呢;当我们在考虑和提炼这些概念和元素的时候,我们思考怎么抽象他们呢,它们又有什么基本的元素及其共性呢?他们之间的关系如何组织呢?Resiprocate的源码告诉了我们如何去设计和封装这些概念的上佳实现。在Resiprocate中一些RFC3261 中定义元素的对应: 建议:利用CRC 卡片的方式去记录理解Resiprocate 中的大量的类及其关系。CRC:类、职责、协作。 部分设计的理解 OBSERVER/VISITOR/COMMAND/ITERATOR 模式,工厂模式(大量容器的使用也是一种变体如:DialogSet),代理类句柄类(界面实现分离,隐藏实现…),…… 大量的界面类(如AppXXX 系列)是遵循大师BS“界面和实现分离”的原则吧;而句柄方式对对象的间接管理是老外的惯用伎俩啦,关于句柄设计从大师BS 的著作到<>的Handle_Body 论和<>的大段描述再到<>都有发挥和外...