Asterisk模块编写(1)

来源:互联网 发布:子女宫武曲天府知乎 编辑:程序博客网 时间:2024/05/16 05:23

是否有过想编写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模块中更有用的应用。

原创粉丝点击