Asterisk模組編寫(1)

2021-05-04 22:35:46 字數 1577 閱讀 7201

是否有過想編寫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)

static int unload_module(void)

static int unload_module(void)

最後,每個模組必須包含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

include includemodule license dual bsd gpl 是用來告知核心,該模組帶有乙個自由的許可證 沒有這樣的說明,在模組載入時核心會抱怨.static int hello init void static void hello exit void module ini...

再說C模組的編寫(1)

前言 在 lua 控制 c 中對lua呼叫c函式做了初步的學習,而這篇才是重中之重,這篇文章會重點的總結c模組編寫過程中遇到的一些問題,比如陣列操作 字串操作和c函式的狀態儲存等問題。現在就開始吧。陣列操作 在lua中應該不能叫陣列,而是一種table的東西 而在c語言中,沒有table這種東西,只...

如何寫Asterisk模組(3)

在該部分你將看到如何實現 asterisk cli 命令。對 asterisk 來說,cli 是尤為重要的,無論是在進行配置 顯示狀態以及除錯都會用到。該部分將對如何寫 asterisk 模組 2 的基礎上進行新增 首先我們需要包含定義 cli命令介面的標頭檔案。include asterisk c...