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模块中更有用的应用。
- Asterisk模块编写(1)
- Asterisk模块编写1
- Asterisk模块编写(2)
- Asterisk模块编写指南
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 如何写Asterisk模块(3)
- Asterisk 可加载模块
- Asterisk cli模块分析
- Asterisk cli模块分析
- Asterisk 可加载模块
- Asterisk cli模块分析
- asterisk 模块app开发
- Asterisk 可加载模块
- asterisk 自动加载模块
- C 编写lua模块(1)
- 用Crosstool工具构建交叉工具链
- 翻腾书箱,找到了目标
- 找到了众多本“葵花宝典”
- 推荐一些北京的景点(1简单版)
- 转:软件版本
- Asterisk模块编写(1)
- c语言编译过程
- Spring MVC+BlzeDS+Flex框架实践:HelloWorld篇
- 走向架构师之路---开博寄语
- vim 中文乱码解决方法
- 考研数学解题21种思维定势
- 【Windows Mobile开发系列 之 开始一】了解智能项目和一般PC项目的区别
- C++虚函数与虚函数表 转帖
- Oracle设置表空间到只读模式