Resiprocate简介
更新时间:2024-04-24 09:57: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简介04-24
十套无机化学复习试卷(答案在后面)03-24
汪苏泷,银河歌词02-16
我想让爸爸陪我一天作文450字06-24
正方形的性质与判定经典例题练习01-17
第二章 统计调查与整理练习题11-10
清涧县职称论文发表-计算机网络风险防范论文选题题目04-26
我想让爸爸陪我一天作文400字06-24
《音乐分析与创作》综合复习题09-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- Resiprocate
- 简介
- 第三方医药物流审计管理制度及操作规程(药品批发或零售连锁企业
- 2016海外留学生招聘猎头是这样看简历的,你知道吗?
- 枯草芽孢杆菌发酵培养基的优化 - 图文
- 电磁场作业题答案全
- 北京四中 - 高中数学高考综合复习 专题三十七 极限
- 厦门某住宅小区监理日志(共30篇)
- 2014年高考真题 - 英语(浙江卷) 解析版
- 《3-6岁儿童学习与发展指南》复习试题
- ICH临床部分术语中英文对照表
- 2011学年第一学期高三文科数学期末试题及答案
- 商业银行金融产品创新的现状、问题及对策研究 - 以招商银行为例
- 11月份邮政AIX/Oracle培训测试题
- 外科医患沟通竞赛评分
- 网络舆情概论教学大纲及教案 2016年9月
- 纺织面料史上最强详解(最详细整理) - 图文
- 2019届高考语文必备:古诗词鉴赏中的10大规律
- 网络管理与维护综合实训课程 - 图文
- K形车位锁项目可行性研究报告(目录) - 图文
- HXD3机车C1-C3电气部分检修工艺资料
- 数字电路zw4 - 图文