asterisk 模块app开发
来源:互联网 发布:轩辕剑骑兵进阶数据 编辑:程序博客网 时间:2024/05/02 04:34
我的第一个asterisk内部模块,”hello world~”
首先配置linux的开发环境及asterisk的源码.
创建的文件名为app_helloworld.c,存放在Asterisk的源代码树/apps目录下
代码如下:
#include "asterisk.h"
//每个Asterisk模块都包含主要的Asterisk头文件
#include "asterisk/module.h"//包含ASTERISK_FILE_VERSION宏,该宏用于注册该文件的版本#include "asterisk/logger.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 100001 $")//该宏用于注册该文件的版本
static int load_module(void)//Asterisk加载和卸载模块时会调用他们
{
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;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Hello World");
编绎成功后,将app_helloworld.so 拷贝到 /usr/lib/asterisk/modules目录下
CLI>module load app_helloworld.so
CLI>Loaded app_helloworld.so => (Hello World)
装载成功,这只是个空的模块,下面我们添加些应用。
asterisk里提供了大量的app用于在extension.conf中编写dialplan,这些app非常丰富,你几乎可以做任何事情,你甚至可以在dialplan中设置变量,使用一些简单的流程控制等。但是当你发现你需要的app在asterisk里并没有提供,而老板又天天催你交差的时候,你就不得不自己来实现它,建议大家把自己实现的app放在一个新的模块里,比如我们可以建立一个新的名为app_myapps.so的模块,那么这就又牵涉到如何添加一个新的模块。 $*w]]b$Dn
复制代码
- #define AST_LIST_HEAD_STATIC(name, type)
\ - struct name {
\ -
struct type *first; \ -
struct type *last; \ -
ast_mutex_t lock; \ - } name;
1><@$kVMm~
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 1.1 $")
//这里是asterisk core用来控制源码文件的版本的
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <asterisk/lock.h>
#include <asterisk/file.h>
#include <asterisk/logger.h>
#include <asterisk/channel.h>
#include <asterisk/pbx.h>
#include <asterisk/options.h>
#include <asterisk/config.h>
#include <asterisk/module.h>
#include <asterisk/enum.h>
#include <asterisk/utils.h>
#include <asterisk/app.h>
//to add any include files you need here
static char *tdesc = "This is my app :)";
static char *app = "myapp";
static char *synopsis = "myapp(param1|param2):\n"
static int myapp_exec(struct ast_channel *chan, void *data)
{
out1:
}
static int load_module(void)
{
}
static int unload_module(void)
{
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "MY OWN APPS");
//EOF
- asterisk 模块app开发
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
- Asterisk 可加载模块
- Asterisk cli模块分析
- Asterisk cli模块分析
- Asterisk 可加载模块
- Asterisk cli模块分析
- Asterisk模块编写1
- Asterisk模块编写指南
- Asterisk 可加载模块
- asterisk 自动加载模块
- asterisk app命令中文翻译
- asterisk app命令中文翻译
- asterisk App-Hangup 挂机
- Asterisk模块编写(1)
- hdu2087 这道题 好给力! memset()伤不起 如果让我说:我只能说,实力决定一切。
- 第九周—1.Complex类(运用<<和>>的重载)
- Eclipse 代码提示功能设置。
- Android企业级开源项目
- "2>&1 > file"和 "> file 2>&1"区别?
- asterisk 模块app开发
- OpenCV实现JPG转换为avi格式的视频流
- 同一服务器,不同域名的绑定方法
- linux 开机自启动设置 inittab 详解
- c# 随机打乱(洗牌,布雷)
- Croc Champ 2013 - Round 2 题解
- package manager service是怎样选择armeabi/armeabi-v7a中的库文件的?
- CLASS B的变迁和处理对策
- impala0.7与hive(分别基于MR1和MR2)的测试性能对比