SESSION
SESSION为FS的核心概念之一,所以需要拿出来专门的分析下。
从以下几个方面进行分析,结构类型,资源的管理,对于呼叫的意义,规格。
1、结构类型
每一次呼叫会申请一个session,并为每个申请的session申请一个channel。Channel为每次呼叫的实体,呼叫中状态机状态就是从channel中获取。新申请的channel的state为CS_NEW,running_state为CS_NONE。
相互关系为:
SESSION结构为:switch_core_session
CHANNEL结构为:switch_channel
2、资源管理
FS运行时可能存在多路呼叫,即会产生多个SESSION。对于SESSION的查找和管理通过全局结构变量session_manager实现,其key为UUID。
FS运行中会执行大量的回调函数。SESSION中的变量endpoint_interface保存了全局函数指针endpoint_interface的地址。从而实现了会话的入局回调,出局回调函数的统一个调用。
FS主要是C语言完成的,所以要小心的保护好全部变量的值,在申请SESSION的时申请了各种类型的信号量,用来保证系统的正常的运行。
FS也是消息驱动的系统。所以申请SESSION的时候申请了2个消息队列,3个事件队列(FIFO也是FS的一个核心概念,以后进行描述,这里不再详细记录。)