freeswitch 内核模块开发

这里以模块 helloworld 为例。

1. 创建模块目录 freeswitch/src/mod/applications/mod_helloworld

2. 把模块名放在freeswitch/modules.conf文件中,make时 根据此文件选择编译哪些模块并生成相应模块的makefile文件

3. 如果你的模块以依赖第三方库,则需要在makefile中指定头文件以及库的路径,一个例子:

LOCAL_CFLAGS=-I$(switch_srcdir)/libs/libteletone/src
LOCAL_LDFLAGS=$(switch_srcdir)/libs/libteletone/libteletone.la


4.如果你的模块包含多个文件则需要 指定文件列表:

LOCAL_OBJS=file.c file2.c file3.c 
local_depend: $(LOCAL_OBJS)


5.编写模块接口


freeswitch中 每个模块从加载->运行->关闭 流程由三个宏实现,实际编写模块过程为几个宏的填写。具体业务逻辑在宏内部实现。

SWITCH_MODULE_LOAD_FUNCTION (mod_name)

实际展开即为函数,load function 负责系统启动时或运行时加载模块,模块的全局数据结构,钩子设置,事件handler 一般在此处实现。

SWITCH_MODULE_RUNTIME_FUNCTION

系统运行时loop, 这里可以启动线程处理请求,监听socket 等等。

SWITCH_MODULE_SHUTDOWN_FUNCTION

模块卸载,这里负责清除全局数据结构,释放资源。

SWITCH_MODULE_DEFINITION 模块的定义


mod_helloworld.c 代码:




编译: sudo make mod_helloworld

安装 sudo make mod_helloworld-install

dialplan里试一试 function helloworld.


-----------------------------------

高级:

1.模块加载函数内可以加载自定义xml配置文件.

例子:

<configuration name="mymodule.conf" description="MyModule configuration">


2. 订阅事件

模块可以向系统订阅自己感兴趣的事件,只需一个函数,指定一个你自己的事件回调。

例子:订阅所有事件


接下来就是编写你的回调函数

void mymodule_event_handler(switch_event_t *event);

3.在模块内 发起呼叫,定义channle状态回调。。。。


 

你可能感兴趣的:(switch)