zoukankan      html  css  js  c++  java
  • Sip协议栈事务层的设计与实现

    一个事务是客户发送的一个请求事务(通过通讯层)发送到一个服务器事务,连同服务器事务的所有的该请求的应答发送回客户端事务。事务层处理应用服务层的重发,匹配请求的应答,以及应用服务层的超时。任何一个用户代理客户端(user agent client UAC)完成的事情都是由一组事务构成的。通常一个SIP 事务由一个单个请求和这个请求的所有应答组成,这些应答包括了零个或者多个临时应答以及一个或者多个终结应答

    事务层包含两个事务库:客户端事务库和服务端事务库。每个事务都包含若干状态。其中Invite客户端事务包括CallingProceedingCompletedTerminated四种状态;非Invite客户端事务包括TryingProceedingCompletedTerminated四种状态;Invite服务端端事务包括ProceedingCompletedConfirmedTerminated四种状态;非Invite服务端端事务包括TryingProceedingCompletedTerminated四种状态。

    事务层需要依赖TU层和传输层。即接收传输层收到的数据,处理后转给TU层;接收TU层要发送的数据,处理后转给传输层发送。

    事务层包含一个定时器管理器,对11种定时器进行维护。当在TCP传输方式下不启用。

    每个事务包含一个TransactionKey做为事务的标识。在RFC3261中以顶端ViabranchCSeq中的方法作为事务的标识,因此以它作为查找事务的关键字。由于只遵循RFC2543的消息中Via可以不带branch参数,为了处理这种情况,查找时首先检查消息中是否存在该参数且是否以字符串“z9hG4bK”开头。若发现Via中不带branch参数或branch不符合RFC3261规范, 则根据请求消息中的URIViaCall-IDTotagFromtag以及CSeq生成哈希代码做为事务的标识

    事务层是线程安全的。

    下图描述了事务层的关键类的类图:

  • 相关阅读:
    译:编程面试的10大算法概念汇总
    Android内存优化之封装九宫格
    Android Java 程序员必备开发工具
    译:如何成为一个通晓多种编程语言的程序员
    8大排序算法图文讲解
    Android酷炫实用的开源框架(UI框架)
    Android动态加载字节码
    利用无效字节码指令引发逆向工具崩溃(二)
    oracle 12c linux服务器启动监听
    oracle无主键去重方法
  • 原文地址:https://www.cnblogs.com/wenjingu/p/2208907.html
Copyright © 2011-2022 走看看