您的位置:首页 > 其它

freeswitch 内核之sip 模块

2011-08-01 23:37 288 查看
 

我建了一个 Freeswitch 内核研究 交流群, 45211986, 欢迎加入, 另外,承接 基于SIP的通信服务器及客户端解决方案。 

freeswitch 为支持跨平台,底层库使用 apache portable  runtime lib(apr),其作者之前的工作中一直接触apache.

 

swith_apr.c 中为 freeswitch引用 apr提供的所有工具库接口函数的重新定义,目的是为了统一。

 

当通信层采用sip协议时,mod_sofia 模块被使用,此模块为 对诺基亚开源sip协议栈sofia sip的访问入口,

mod_sofia 为内核启动后的驱动入口。

sip 模块在文件 mod_sofia.c文件中。

SWITCH_MODULE_LOAD_FUNCTION(name) 为每个可加载模块的入口,系统启动时根据module.xml配置动态加载配置的模块。

与动态模块加载相关的宏定义在switch_types.h里,每个模块会定义模块加载,运行,移除对应的回调。

SWITCH_MODULE_LOAD_FUNCTION

SWITCH_MODULE_SHUTDOWN_FUNCTION

SWITCH_MODULE_DEFINITION

所以,sip 模块的加载入口在  SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load)

mod_sofia_globals 结构保存sip 运行时全局配置,首先设置一些全局配置,然后进入

config_sofia 函数 解析sip配置信息。

首先解析sip协议栈主配置文件,sofia.conf。

<configuration name="sofia.conf" description="sofia Endpoint">

  <global_settings>

    <param name="log-level" value="0"/>

    <!-- <param name="auto-restart" value="false"/> -->

    <param name="debug-presence" value="0"/>

  </global_settings>

  <!--

      The rabbit hole goes deep.  This includes all the

      profiles in the sip_profiles directory that is up

      one level from this directory.

  -->

  <profiles>

    <X-PRE-PROCESS cmd="include" data="../sip_profiles/*.xml"/> // 用预处理宏包含配置文件

  </profiles>

</configuration>

sofia.conf 分两部分

1.全局配置 (global_settings)

2.sip 协议栈 profiles(局域网,外网,网关配置),所有与此相关的配置文件放在sip_profiles 目录下

freeswitch 中 UA = User Agent = Sofia Profile = SIP Profile

为安全起见,freeswitch把UA按局域网(客户端与服务器在一个网段内),外网分类。

config_sofia 解析完第一部分后,开始解析 第二部分:

按sip_profiles目录下的配置文件一个一个解析:

这里注意只会解析sip_profiles目录下的xml文件,不会递归解析

此目录下每个配置文件对应一个sofia_profile结构。sofia_profile可以理解为一个sip ua

此目录下的文件分 这样几个固定节点:

1. settings 节点 ,其为name value对。 为此类型sip ua的通用属性配置。包括 sip 属性,rtp 属性等的设置,比如 是否开启

 sip 100rel特性,Presence 等。与asterisk sip.conf配置文件下的分机属性概念类似类似,但更详尽,灵活。

2. gateways 节点,freeswitch与sip 落地的接口节点,此节点包括若干sip落地网关的配置。

dilplan中 呼叫字符串结构:

sofia/gateway/<gateway_name>/<dialstring>

单个网关节点包含对应属性配置,如是呼入网关还是呼出,注册到网关的账号等。。。

parse_gateways 函数完成网关节点的配置解析。sofia_reg_add_gateway函数把此网关放到freeswitch注册列表里(freeswitch 作为

客户端注册到网关上)。

  

3. domains 节点,此节点包含所有分机节点。为所有分机节点的父节点 ,分级结构如下

   domains

       domain

       groups

       group

       user

 directory 目录下的所有user都在此处被解析。

 

4. aliases 节点

当此类型sip profile 解析完毕后 ,launch_sofia_profile_thread启动一个线程  sofia_profile_thread_run进一步设置此profile。

线程内部 用nua_create创建sofia sip ua, nua_create 为 sofia sip 协议栈提供的api,负责创建并启动一个 sip ua  协议栈 ,

指定事件回调函数 sofia_event_callback,所有传输层sip 消息的入口即为此函数。所有 sip协议栈事件都通过sofia_event_callback

传给mod_sofia.

最后 启动工作线程sofia_profile_worker_thread_run 处理此sip ua的事件队列。

更深入的分析 应该进入nua_create 访问sofia sip  协议栈的核心(创建,初始化,启动)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息