Asterisk模块编写(1)

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值