Resiprocate简介
更新时间:2024-02-03 04:09:01 阅读量: 教育文库 文档下载
- resiprocal推荐度:
- 相关推荐
Resiprocate简介
1、背景介绍
随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进的H.323协议栈展现在普通程序员的眼前,为H.323普及立下了汗马功劳。而然当在SIP时代,则出现了群雄割据的状况,SIP相对于H.323简单,灵活,于是各种协议栈层出不穷,一下主要介绍对ReSIProcate协议栈的理解。
ReSIProcate是由SIPFoundry开发,ReSIProcate最开始起源于Vocal,由于Vocal开始只支持rfc3254,为了支持最新的rfc3261,ReSIProcate诞生了,但现在,ReSIProcate已经成为一个独立SIP协议栈了,它十分稳定,并且很多商业程序都在使用。 具体参数:
Language : C++ VxWorks port : No Win32 port : Yes Linux port : Yes
Supports RFC 3261 : Yes Supports RFC 2327 : Yes Supports RFC 3264 : Yes
Supports RFC 3263 : Partial Supports RFC 3515 : Yes Supports RFC 3262 : No Supports RFC 3311 : No TCP : Yes UDP : Yes
SIZE : < 2.5 Mb License : Vovida Document : Few Samples : None
2、 SIP基本呼叫
下面是一个SIP协议的基本呼叫流程图以及对该流程的简单讲解。
SIP UA(Client/Caller)SIP ProxySIP ProxySIP UAS(Client/Callee)主叫摘机发起呼叫InviteInviteInvite100:Trying100:Trying100:Trying180:Alertting180:Alertting200:OK200:OK被叫振铃180:Alertting被叫摘机应答200:OKRTP通道:主被叫通话主叫先挂机ByeByeBye200:OK200:OK200:OKSIP Base Call Flow
上图描述的是一个SIP基本呼叫的流程图,主被叫SIP UA分别注册在不同的Server上,以下对上述流程做一简单说明。 流程说明:
2.1、 首先主叫SIP UA摘机拨叫被叫号码,SIP UA向注册的server上发送invite
消息,携带主被叫的URL和主叫SDP(也可以不带); 2.2、 SIP Proxy1收到invite后对URL进行解析,找到被叫SIP UA的注册Server并路由; 2.3、 SIP Proxy收到invite后解析URL,找到被叫SIP UA,发送invite; 2.4、 被叫SIP UA收到后,分析该消息处理时间可能超长,向主叫发送100Trying,
通知主叫被叫正在处理主叫请求; 2.5、 然后被叫SIP UA指示放回铃音,并发送Alertting(可能会带SDP)消息给
主叫,通知主叫被叫正在放回铃音; 2.6、 之后被叫摘机应答,向主叫发送200OK携带被叫的SDP(如果Alertting已
经携带了SDP,则200OK不带SDP),主叫收到后向被叫回ACK消息确认。
2.7、 双方建立起呼叫,主被叫进行通话。
2.8、 然后主叫先挂机,释放呼叫资源并向被叫发送Bye消息,被叫收到BYE后释
放资源并响应200OK最终响应,会话结束。
3、 Resiprocate设计模式
Resiprocate将SIP协议栈设计为以下四个层次:
事务用户层(Transaction User)【SIP UA 与协议栈的接口层:该层负责将SIP消息入栈并触发事务,以及进行事务管理】事务层(Transaction )【SIP 事物层:对SIP事务进行管理,以及事件超时处理】传输层(Transport)【SIP消息传输层:根据SIP消息中标记的协议类型选择合适的协议将消息发送到IP网】语法与编码层(Syntax and Encoding)【SIP消息处理层:检测SIP消息是否合法,并对消息进行编解码和响应】
Resiprocate通过以上层次之间的密切配合完成对SIP消息的处理,以下是我的一些浅显理解:
3.1、事务用户层:SIP UA 与协议栈的接口层:该层负责将SIP消息入栈并触发事务,
以及进行事务管理,在代码中对应定义的管理类“DialogUsageManager”;它继承了类“HandleManager”和“TransactionUser”。DialogUsageManager类负责
保存对话(dialog)链表,对每一个SIP消息构造一个事务会话,并对SIP消息的接收、处理和发送提供上层接口,以及初始事务会话(Session)。(Dialog:
指一个呼叫从主叫摘机发起呼叫直到通话后主被叫挂机为止,编号:CallId)。 另外:由于DialogUsageManager下面管理的Dialog很多,为了分步管理并且提高查询效率,DialogUsageManager将Dialog放在DialogSet里面,然后通过DialogSet间接管理每一个Dialog。于是有下述关系:DialogUsageManager包含DialogSet,DialogSet包含Dialog。
3.2、事务层:对SIP事务进行管理,以及事件超时处理;这些事务在代码中应该就是
指的一个会话(Session),对应于“InviteSession”类,继承关系:
Handled->BaseUsage->DialogUsage->InviteSession.由于每个session都是属于一个dialog的,所以这里提供getDialogId函数;每一个事物会话还设有状态,通过状态机控制对每一个请求消息进行响应,从而完成一整个事务会话;对于每个消息的处理是在虚基类InviteSessionHandler中定义的纯虚函数,在InviteSession类中只是定义了函数getSessionHandle,返回处理方式,而具体的实现则在定义UA时完成(例如Mrcagent就必须继承InviteSessionHandler并定义实现部分);另外事务层还保证了每个dialog的offer/answer平衡,根据判断offer/answer是否平衡来确认响应消息是否带SDP。(Session:指一个呼叫中发起的请求消息和响应消息对,例如BYE和其响应消息200OK一起构成了一个事物会话,所以一个Session事务一般至少包含两个SipMessage)。
3.3、传输层:根据SIP消息中标记的协议类型选择合适的协议将消息发送到IP网,网
络层是负责SIP消息在IP网的传输;该部分处理是在类DialogUsageManager中进行的,通过调用该类的成员函数internalProcess完成的,但是事实上是从类TransactionUser中继承过来的,发送/收到消息的队列为mFifo。
3.4、语法与编码层:SIP消息处理层,检测SIP消息是否合法,并对消息进行编解码和
响应;主要是在类DialogUsageManager中的process函数处理,它贯穿整个SIP消息的处理流程;基本流程为:
internalProcess->incomingProcess->processRequest/processResponse->DialogSet::dispatch【如果出错就makeResponse and sendResponse】
->dialog::dispatch->InviteSession::dispatch->InviteSession::dispatchConnected->InviteSession::dispatchOthers->InviteSession::dispatchInfo->mDialog.makeResponse and 回调InviteSessionHandler的纯虚函数handler->onInfo(getSessionHandle(), msg)在MRC中实现部分为【MrcAgent::onInfo】
4、 Resiprocate中类的继承关系
以下只列出了一部分类的关系,并且类的成员没分私有共有也只列出了一些个人认为典型的,没有列出 friend class。
Dialog:mDum\\mDialogSet\\mId\\mInviteSession\\DialogType\\mCallId\\mRequests\\mRemoteTargetHandleManager:mHandleMap\\ mShuttingDown\\ mLastId;InviteServer:mTransceiverMessage:tuTransactionMessage:Handled:mHam\\mIdHandleManager:mHandleMap\\ mShuttingDown\\ mLastId;TransactionUser:mRuleList\\mDomainListSipMessage:mTransport\\mSource\\mDestination\\mBufferList\\mContents\\mReason\\mEncoded\\mForceTargetBaseUsage:mDum\\mHandleDialogUsage:mDialogDialogUsageManager:mDialogSetMap\\mMasterProfile\\mInviteSessionHandler\\mClientRegistrationHandler\\mStack\\mIncomingTarget\\mCancelMap\\mConnectionTerminatedEventDispatcherModelAdmin:adminCommandLineParser:mLogType\\ mEncrypt\\ mUdpPort\\\\mAor\\mPasswordmOutboundProxy\\mBuddies\\mTarget\\mCertPathClientPublicationHandlerClientRegistrationHandlerOutOfDialogHandlerClientSubscriptionHandlerInviteSessionHandlerInviteSession:mPeerSupportedMethods\\mPeerUserAgent\\mState\\mCurrentLocalSdp\\mCurrentRemoteSdp\\mCurrentEncryptionLevel\\mEndReason\\mAcksSessionLogicMng:slmMsgList\\slmConfMsgList\\slmDialogMsgList\\seqValueConf\\seqValueConn\\ssdSeqNum\\mcdSeqNumMrcAgent:pSendMessage\\IsAvailable\\pControl\\SpecifymContact\\mRequestMap\\mUacCallIdMap\\first\\mInfoHandleStateMap\\SendMessageList\\InfoMessageList
正在阅读:
Resiprocate简介02-03
甲醛生产物料与能量平衡及生产技术探讨11-02
东南大学后勤服务质量调研报告04-10
ISO9001质量体系认证基本知识11-08
云南省矿业权设置方案编制纲要 doc11-30
人教版/湖北教育出版社小学一年级科学下册教案磁铁的磁极04-17
【最新版】vb+SQL学生信息管理系统毕业论文设计04-28
四年级下册科学基训答案09-30
SQL触发器使用教程和命名规范10-24
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- Resiprocate
- 简介
- 2018智慧树网课走进故宫笔记
- 计算机填空题 -
- 2016海外留学生招聘猎头是这样看简历的,你知道吗?
- 中国中医用仪器行业市场前瞻与未来投资战略分析报告2016-2020年
- 厦门某住宅小区监理日志(共30篇)
- 计组实验报告
- 香港利得税征缴及豁免条件
- 门禁系统培训手册
- 全国计算机二级C语言上机(2改错题)
- 公证书英文版(共6篇)
- 商业银行金融产品创新的现状、问题及对策研究 - 以招商银行为例
- 枯草芽孢杆菌发酵培养基的优化 - 图文
- 药物临床试验质量管理规范考试(GCP)必备最全题库及答案
- 党建经验交流材料
- 数字电路zw4 - 图文
- 化学知识点
- 绩效考核岗位竞聘演讲稿范文
- 篮球赛活动方案
- 井研县银辉农机制造厂建设项目环评报告书
- 网络管理与维护综合实训课程 - 图文