`

How-to: Write an Asterisk Module, Part 1

 
阅读更多

Have you ever wanted to write an Asterisk module? While some of the Asterisk modules are quite complicated, the anatomy of an Asterisk module is pretty simple. Let’s start with the “Hello World” of Asterisk modules: res_helloworld.

This example is based on Asterisk 1.6. However, creating Asterisk modules for Asterisk 1.4 is almost the exact same.

Create a file called res_helloworld.c in the res/ directory of an Asterisk source tree.

The first thing in every Asterisk module is to include the main Asterisk header file, asterisk.h.

#include "asterisk.h"

 Next, include the ASTERISK_FILE_VERSION macro. This registers the file with the “core show file version” CLI command. This CLI command lists the last SVN revision where that file changed.

ASTERISK_FILE_VERSION(__FILE__, "$Revision: $")

 Include the Asterisk module header file. This includes the definitions necessary for implementing an Asterisk module.


#include "asterisk/module.h"

Let’s go ahead and include the header file that lets us use the Asterisk logging interface, as well. This will let us print messages to the Asterisk log so that our new module actually does something.


#include "asterisk/logger.h"

It is now time to include the two functions that every Asterisk module must implement. Those are load_module() and unload_module(). These functions get called when Asterisk loads and unloads the module.

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;
}
 

Finally, every module must include an instance of one of the AST_MODULE_INFO macros. This macro includes the necessary code for the module to properly register itself with the Asterisk core when it gets loaded.


AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Hello World");

The final result should look something like this: res_helloworld.c

When you run make to compile Asterisk, the build system should automatically find your module. It will be compiled and installed with the rest of Asterisk. Compile, install, and run Asterisk. Then, verify that your module has been loaded:


*CLI> module show like helloworld
Module Description Use Count
res_helloworld.so Hello World 0
1 modules loaded

You should also be able to unload and load your module, and see the appropriate message in the Asterisk logger.


*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)

Congratulations! You have successfully written an Asterisk module!

Next, we will start looking at how to start implementing more useful things inside of this module structure.

 

 

 

 

分享到:
评论

相关推荐

    docker-asterisk-lua:星号+ Lua泊坞窗图片

    docker-asterisk-lua 关闭看 具有星号和lua环境的Docker容器星号1.8 docker pull antirek / asterisk-lua:asterisk1.8星号11 泊坞窗拉antirek / asterisk-lua:asterisk11 docker pull antirek / asterisk-lua:...

    Asterisk Dialplan命令中文翻译

    Asterisk Dialplan是 Asterisk VoIP 服务器中的核心组件之一,它负责处理呼叫路由、通话控制和多种功能。Asterisk的拨号计划由一系列命令组成,这些命令用于定义呼叫流程并决定如何处理不同类型的呼叫事件。以下是...

    Qt-Asterisk-Desktop:用于Asterisk PBX系统的Qt桌面应用程序

    **Qt-Asterisk-Desktop: Asterisk PBX系统的Qt桌面应用详解** Qt-Asterisk-Desktop是一个基于Qt库开发的桌面应用程序,专为Asterisk Private Branch eXchange (PBX)系统设计。Asterisk是一款开源的IP电话系统,能够...

    asterisk-java-1.0.0-m2-sources.zip_asterisk

    Asterisk-Java是一个Java库,它为Asterisk系统提供了AGI(Asterisk Gateway Interface)的实现,方便开发者用Java语言进行Asterisk系统的接口开发。AGI是Asterisk的一个强大特性,允许外部应用程序在呼叫处理过程中...

    ari-py:用于访问Asterisk REST接口的库

    关于该软件包包含用于Asterisk REST接口的Python客户端库。 它建立在库的基础上,相对于生成的API提供了改进的,特定于Asterisk的API用法使用setup.py脚本从源代码安装。 $ sudo ./setup.py install原料药ARI客户端...

    通过asterisk-java操作asterisk

    Asterisk是一个开源的IP电话系统,而Asterisk-java则是一个Java库,它提供了与Asterisk服务器交互的能力。这个库使得开发者可以利用Java语言来控制和编程Asterisk PBX(Private Branch eXchange),执行诸如创建、...

    asterisk-java-master.zip_asterisk

    1. **API接口**:Asterisk-java提供了一系列的Java类和接口,如ManagerConnection用于建立和管理与Asterisk Manager Interface的连接,ManagerEventListener用于监听Asterisk服务器的事件,Channel类则用于操作通话...

    asterisk-java:用于Asterisk PBX集成的免费Java库

    适用于Asterisk-Java的自述文件 介绍 Asterisk-Java软件包包含一组Java类,使您可以轻松构建与交互的Java应用程序。 Asterisk-Java支持Asterisk为此场景提供的两个接口: 协议和 。 您可以在这里找到最新版本的Java...

    asterisk-ami-connector:适用于NodeJS的Asterisk AMI连接器(ES2015)

    $ npm i asterisk-ami-connector NodeJS版本 支持>=4.0.0 用法 具有承诺的基本示例。 const connector = require ( 'asterisk-ami-connector' ) ( { reconnect : true } ) ; connector . connect ( 'login' , '...

    asterisk18-sounds-cn-full.zip

    【描述】中提到的"Asterisk 18"是 Asterisk 开源通信平台的一个主要版本,这是一个广泛使用的 PBX(Private Branch Exchange,私人交换机)系统,能够支持VoIP服务。Asterisk 提供了丰富的功能,如语音通话、会议、...

    Asterisk Manager API(AMI) 中文文档

    - Channel: 需要挂断的通道名称,如SIP/123-1c20。 - Timeout: 通道应该挂断的秒数。 - 示例: ``` Action: AbsoluteTimeout Channel: SIP/123-1c20 Timeout: 20 ``` 2. **ChangeMonitor**:更改记录某通道...

    ya-node-asterisk:用于 Asterisk 管理器界面的 node.js 客户端库

    亚娜Yana 是另一个用于 Asterisk Manager Interface 的 node.js 库。 支持的 Asterisk 版本:全部(主要使用 Asterisk 11、13 和 16 进行测试)。 支持的 node.js 版本:12+。 小(约 350 行代码) 没有依赖低级...

    贝岭的matlab的代码-asterisk-amr:Asterisk13转码模块:AMR-WB

    或者,如果你使用Asterisk预先录制的语音和音乐文件,这些文件是听不到的,因为它们不是在AMR中而是在slin中。 因此,该存储库不仅为音频编解码器 AMR 和 AMR-WB 添加了格式模块,还添加了一个转码模块: codecs/...

    asterisk-opus:对 Asterisk 的 Opus(转码)和 VP8(直通)支持,需要更好的 WebRTC 集成

    #Asterisk Opus/VP8 补丁 由于 Opus 和 VP8 目前无法集成到 Asterisk 存储库中(在此了解原因),我们准备了一个补丁,为添加对两种编解码器(Opus 转码、VP8 直通)的支持。 ##安装补丁为了支持Opus,你需要先安装...

    docker-asterisk:用于 Asterisk PBX 的 Dockerfile

    码头工人星号 用于 Asterisk PBX 的 Dockerfile

    对日开发常用句型.pdf

    1. **アイコン (アイコン)** - Icon:这是计算机界面上的小图形,代表一个功能或应用程序。 2. **アイテム ( 아이템)** - Item:通常指列表或菜单中的一个条目或元素。 3. **アイデア (アイデア)** - Idea:在软件...

    20120412_Asterisk录音记录(SQLServer)1

    Asterisk录音记录(SQLServer)1 在Asterisk PBX系统中,录音记录是非常重要的功能,它允许管理员和用户追踪通话记录以便于分析、审计或存档。本篇文章将介绍如何利用SQL Server来存储Asterisk的录音记录,并对其进行...

    issue-list-readme:在目标网页上显示问题:eyes:

    :eight-spoked_asterisk: 好极了! :eight-spoked_asterisk: 测试ge 测试一下... 通过此操作进行编译。 # setup steps : - name : checkout uses : actions/checkout@v2 - name : rewriteReadme uses : ...

    Simple-Click2Call-for-Asterisk-PBX:用于 Asterisk PBX 平台的简单 Click2Call

    Simple-Click2Call-for-Asterisk-PBX 将 click2dial.php 复制到您的 Asterisk 服务器 (/var/www/html) 上的 web 文件夹中。 以 root 身份登录您的 Asterisk 服务器并编辑文件:nano -w /var/...

    Asterisk AMI 接口代码

    在给定的压缩包文件中,我们看到包含了一个名为"asterisk-java"的子文件,这可能是一个Java库,专门用于与Asterisk AMI进行通信。 Asterisk AMI接口基于TCP/IP协议,通常默认运行在5038端口上。它使用文本协议,每...

Global site tag (gtag.js) - Google Analytics