现在的位置: 首页 > 综合 > 正文

Asterisk模块编写(1)

2013年12月12日 ⁄ 综合 ⁄ 共 1591字 ⁄ 字号 评论关闭

是否有过想编写Asterisk模块的想法?在Asterisk中有的模块相当的复杂,但是其结构却非常的简单,让我们来从“Hello World”Asterisk模块开始:res_helloworld.该模块是基于Asterisk1.6的,为Asterisk1.4编写模块几乎一样。创建的文件名为res_helloworld.c,存放在Asterisk的源代码树/res目录下。
    首先每个Asterisk模块都包含主要的Asterisk头文件,asterisk.h
  
    接下来,包含ASTERISK_FILE_VERSION宏,该宏用于注册该文件的版本,通过CLI命令“core show file version like filename”命令查看文件SVN版本。
   
    包含Asterisk模块头文件,包含该头文件是定义实现Asterisk模块所必须的。
    #include "asterisk/module.h"
    让我们继续进行同时包含使用Asteisk日志模块接口,用于显示Asterisk日志信息,显示日志信息也是本模块所要做的事情。
    #include "asterisk/logger.h"
    现在包含每个Asterisk模块必须的使用的两个函数,load_module()和unload_module().当Asterisk加载和卸载模块时会调用他们。
    static int load_module(void)
 
{
    
ast_log(LOG_NOTICE, "Hello World!/n");
    
return AST_MODULE_LOAD_SUCCESS;
 
}
 
static int unload_module(void)
 
{
   
ast_log(LOG_NOTICE, "Goodbye World!/n");
   
return 0;
 
}

 
static int unload_module(void)
 
{
    
ast_log(LOG_NOTICE, "Goodbye World!/n");
   
return 0;
 
}

    最后,每个模块必须包含AST_MODULE_INFO宏实例。该宏包含模块必要代码是用于该模块被加载时向Asterisk core注册自己。
    AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Hello World");
    最终的结果构成res_helloworld.c文件。
    重新编译Asterisk,编译系统将自动发现该模块,该模块像其他模块一样,也会被编译,最后安装。通过编译,安装,运行Asterisk,这时可以确认你的模块是否被正确的加载:
    *CLI> module show like helloworld
     
Module Description Use Count
    
res_helloworld.so Hello World 0
    
1 modules loaded

    通过CLI命令可以自己卸载、加载你的模块,可以观测到日志信息。
*CLI> module unload res_helloworld.so
 
[Jun 19 10:50:57] NOTICE[26612]: res_helloworld.c:35 unload_module: Goodbye World!
*CLI> module load res_helloworld.so
 
[Jun 19 10:51:05] NOTICE[26612]: res_helloworld.c:42 load_module: Hello World!
 
Loaded res_helloworld.so => (Hello World)
    祝贺你,你已经成功的完成了Asteisk模块编写!
    下一步,我们将开始实现在Asteirsk模块中更有用的应用。

抱歉!评论已关闭.