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生成哈希代码做为事务的标识

    事务层是线程安全的。

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

  • 相关阅读:
    TouchAction实现连续滑动设置手势密码
    用命令方式启动、停止appium服务和app
    企业软件防火墙iptables
    磁盘分区
    docker-网络
    docker-镜像管理基础
    docker-简单操作
    docker-安装
    python-函数
    find一些常用参数的一些常用实例和一些具体用法和注意事项。
  • 原文地址:https://www.cnblogs.com/wenjingu/p/2208907.html
Copyright © 2011-2022 走看看