Asterisk模块编写(2)

来源:互联网 发布:智能家居软件架构 编辑:程序博客网 时间:2024/06/05 08:29

第一部分已经解释了HelloWorldAsterisk模块。该模块只实现了能够给Asterisk编译,能够加载到Asteisk中去,当被加载或卸载时打印简单的日志信息。现在让该模块做些更有意的事情。

res_helloworld.c中,我们应用了load_moduleunload_module函数。在那个模块中,我们仅仅是打印日志,其实在该模块中可以实现更多的功能。

load_module的工作是说:“helloAsterisk, I’m a module. I can provide some features to Asterisk andhere is how you use them."

相反的,unload_module的工作是“Hello Asterisk, again. I’m aboutto disappear, so please don’t use any of these features that I wasproviding to you anymore. If you do, you’ll explode. kthx! ”

现在是更新模块提供功能给Asterisk的时候了。我们将从CDR处理开始,CDR接口不算是一个非常简单的应用。首先是添加合适的头文件。


然后,我们增加一个新的函数,该函数在每次CDRpost时将会调用,参数是CDR本身。

 

接下来,将刚刚实现的应用通过load_module()unload_module()函数经新功能添加到该模块中去。

load_module()函数中,将增加一个函数调用用于向AsteriskCore注册该CDR处理。参数是该应用的名称,简短的描述,以及当CDRpostAsteriskCore调用函数。


 

unload_module()中,需要对刚刚添加的应用注销。

ast_cdr_unregister("HelloWorld");

编译安装后,运行Asterisk,可以去确认你的新CDR应用是否被注册到了AsteriskCore

 

 

当你挂电话,将会看到CDR处理被执行。

你已经可以在Asterisk模块中添加CDR处理了!