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

    事务层是线程安全的。

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

  • 相关阅读:
    jquey插件开发
    平常问题传送门
    Angular1实战总结01:了不起的$cacheFactory
    node基础15:events模块
    node基础14:连接数据库
    node基础13:异步流程控制
    node基础12:动态网页
    node基础11:接受参数
    node基础10:处理异常
    IOS子视图超过父视图frame后,无法交互响应
  • 原文地址:https://www.cnblogs.com/wenjingu/p/2208907.html
Copyright © 2020-2023  润新知