FreeSWITCH--构建一个新的module

1. 代码部分

Freeswitch构建一个新的模块时,必须实现load函数,如下:

SWITCH_MODULE_LOAD_FUNCTION(mod_example_load);

该load函数的简单实现如下:

SWITCH_MODULE_LOAD_FUNCTION(mod_example_load)
{
	/* connect my internal structure to the blank pointer passed to me */
	*module_interface = switch_loadable_module_create_module_interface(pool, modname);

	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Hello World!\n");

	/* indicate that the module should continue to be loaded */
	return SWITCH_STATUS_SUCCESS;
}

在mod_example_load中对可以当前模块进行一些必要的初始化操作,如资源分配等。
除了load函数外,还可可以选择性的实现shutdown和runtime函数,如下:

SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_example_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_example_runtime);

其中shutdown主要是在当前模块卸载时对占用的资源进行释放;runtime可以作为当前模块功能实现的主要入口,比如实现一个event_loop。简单实现如下所示:

SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_example_shutdown);
{
	return SWITCH_STATUS_SUCCESS;
}
SWITCH_MODULE_RUNTIME_FUNCTION(mod_example_runtime);
{
	while(looping)
	{
		switch_yield(1000);
	}
	return SWITCH_STATUS_TERM;
}

在当前模块加载时,会通过如下方式在core中初始化当前模块三个函数的对应的指针,并在后续进行调用。

SWITCH_MODULE_DEFINITION(mod_example, mod_example_load, mod_example_shutdown, mod_example_runtime);

2. 编译部分

新增一个模块后,除了在本地路径下新增Makefile.am还需要修改以下几处:

(1) 根目录下configure.ac
需要添加src/mod/applications/mod_m_modules/Makefile,否则会报如下编译错误

requires no space between "-L" and "-shared"

(2) 根目录下的modules.conf
需要添加applications/mod_m_modules
(3) build下的modules.conf.in
需要添加applications/mod_m_modules
(4) conf/autoload_configs下的modules.conf.xml
需要添加

<load module="mod_m_modules"/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值