如何编写一个asterisk模块(module)- asterisk11版本

一、准备工作

1、进入addons目录,建立app_testApp.c文件;

2、仿照app_testApp.c文件进行app_testApp.c的编码

二、编码关键点

1、定义app名称为testApp

static const char app[] = "testApp";

2. 定义头文件

    #include "asterisk.h"

    ASTERISK_FILE_VERSION(__FILE__, "$Revision$")

    static char *synopsis = "testApp";
    static char *description ="A test module demo ";
    #include "asterisk/logger.h"
    #include "asterisk/channel.h"
    #include "asterisk/pbx.h"
    #include "asterisk/module.h"
    #include "asterisk/app.h"

3、功能处理函数:

AST_DECLARE_APP_ARGS函数和 AST_STANDARD_APP_ARGS函数
static int testApp_exec(struct ast_channel *chan, const char *data)
{
        ast_verbose("testApp_exec : %s\r\n",data);

        AST_DECLARE_APP_ARGS(args,
                AST_APP_ARG(par1);
                AST_APP_ARG(par2);
        );

        char *parse;
        if (ast_strlen_zero(data))
        {
                ast_log(LOG_WARNING, "test requires an argument (data)\n");
                return -1;
        }
        parse = ast_strdupa(data);
        AST_STANDARD_APP_ARGS(args, parse);

        ast_verbose("test_exec : par1 = %s\r\n",args.par1);
        ast_verbose("test_exec : par2 = %s\r\n",args.par2);

        return 0;
}
4.模块的加载和卸载

 

    static int unload_module(void)
    {
    return ast_unregister_application(app);
    }

    static int load_module(void)
    {
    int res;

    res = ast_register_application(app, testApp_exec, synopsis, description);

    return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
    }

    AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Say polish counting words");

 

 三、测试

1、在拨号方案中调用

vi /etc/asterisk/extensions.conf

在拨号方案中添加如下调用:

exten => _X.,1,testApp(${EXTEN},”Just a test”)

2、用呼叫进行触发

发表评论