Alguma vez você já quis escrever um módulo Asterisk?
Enquanto alguns dos módulos Asterisk são bem complicados, a anatomia de um módulo Asterisk é bem simples। Vamos começar com um "HelloWord" nos Modulos do Asterisk: res_helloworld।c
Este exemplo é baseado em Asterisk-1.6. No entanto, a criação de módulos para o Asterisk-1.4 é quase a mesma coisa.
Crie o res_helloword.c no diretorio res/ do fonte asterisk..
A primeira coisa a fazer nos modulos é colocar o include da biblioteca do asterisk "asterisk.h "
ex: #include "asterisk.h"
Em seguida, incluir a macro ASTERISK_FILE_VERSION. Isto registra o arquivo com o "core show file version" na cli, e mostra a última revisão feita no svn.
ASTERISK_FILE_VERSION(__FILE__, "$Revision: $")
Incluir no cabeçaho do asterisk o module tb. Isto inclui as definições necessárias para implementar um módulo Asterisk
#include "asterisk/module.h"
Inclua tb o cabeçalho do arquivo que permite-nos utilizar a interface do Asterisk. Isto vai imprimir mensagens de log, para que o nosso novo módulo realmente faz alguma coisa.
#include "asterisk/logger.h"
agora hora de incluir as duas funções que cada módulo deve ter no Asterisk। são elas load_module () e unload_module () :-) । Estas funções são chamadas quando o Asterisk carrega e descarrega o módulo.
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;
}
Por fim, cada módulo deve incluir um exemplo de uma das macros AST_MODULE_INFO. Esta macro inclui o código necessário para o módulo se registar adequadamente quando o Asterisk carregar.
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Hello World");
O resultado final deverá parecido com este:
res_helloworld.cQuando você executar o
make para compilar Asterisk, o sistema de construção deve localizar automaticamente o seu módulo. Será compilado e instalado com o resto do Asterisk. Compilar, instalar e executar Asterisk. Em seguida, verifique se o módulo foi carregado:
*CLI> module show like helloworld
Module Description Use Count
res_helloworld.so Hello World 0
1 modules loaded
Você também pode descarregar e carregar o seu módulo, e ao ver a mensagem apropriada no 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)