Chapter 6:Transport Layer
传输通常是通过网络来收发消息。PJSIP的传输框架是可扩展的,也就是说应用程序可以注册自己传输消息的方法。
6.1 Transport Layer Design
6.1.1 “Class Diagram”
下图展示了传输层各实例之间的关系。
6.1.2 Transport Manager
传输管理器(pjsip_tpmgr)管理所有传输对象和工厂。提供下述功能:
#通过传输引用计数器和空闲计时器来管理传输的生命周期
#管理传输工厂
#从传输层收包,解包,分发SIP消息到endpoint
#基于传输类型和远端地址匹配合适的传输方式向目的地传输SIP消息。
#没有可用的传输时动态创建新的传输来向新的目的地传输消息。
每个endpoint只有一个传输管理器,且一般来说对应用程序不可见;应用程序必须使用endpoint提供的函数。
6.1.3 Transport Factory
传输工厂(pjsip_tpfactory)被用来动态连接远端endpoint。其中一个例子是TCP传输,一个TCP传输需要两端都建立TCP连接。
当传输管理器发现需要为新目的地创建新的传输,会根据匹配规则(比如传输类型)查找传输工厂,然后工厂创建连接。
传输工厂的对象声明如下:
6.1.4 Transport
传输对象使用 pjsip_transport 结构体表示。每个结构体实例通常代表一个socket句柄(如UDP,TCP),尽管传输层也支持non_socket的连接方式。
General Transport Operations
从框架的角度来看,传输对象是一个动态的对象。框架没有轮询传输对象的机制。相反的,传输对象必须自己寻找方法来接收网络的报文,然后分发消息至传输管理器来做进一步的处理。
推荐的方法是注册传输socket句柄到endpoint的I/O队列(pj_ioqueue),这样的话当endponit轮询I/O队列的时候,网络的包就可以被传输对象收到。