Usage of the SAForum AIS (Application Interface Specification) More...
#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <pthread.h>
#include "ais/ais.h"
#include "asterisk/module.h"
#include "asterisk/options.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/utils.h"
#include "asterisk/cli.h"
Go to the source code of this file.
Data Structures | |
struct | ais_error |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
const char * | ais_err2str (SaAisErrorT error) |
ASTERISK_FILE_VERSION (__FILE__,"$Revision: 284593 $") | |
static void * | dispatch_thread_handler (void *data) |
static int | load_module (void) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info __MODULE_INFO_SECTION | __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "SAForum AIS" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } |
static struct ais_error | ais_errors [] |
SaVersionT | ais_version = { 'B', 1, 1 } |
static struct ast_module_info * | ast_module_info = &__mod_info |
struct { | |
builddir build BUILD asterisk res res_ais c pthread_t id | |
unsigned int stop:1 | |
} | dispatch_thread |
Usage of the SAForum AIS (Application Interface Specification)
This file contains the common code between the uses of the different AIS services.
Definition in file res_ais.c.
const char* ais_err2str | ( | SaAisErrorT | error | ) |
Definition at line 102 of file res_ais.c.
References ais_errors, ARRAY_LEN, and ais_error::desc.
Referenced by add_subscribe_event(), ast_ais_clm_load_module(), ast_ais_clm_unload_module(), ast_ais_evt_load_module(), ast_ais_evt_unload_module(), ast_event_cb(), build_event_channel(), event_channel_destroy(), evt_event_deliver_cb(), and subscribe_event_destroy().
{ int x; for (x = 0; x < ARRAY_LEN(ais_errors); x++) { if (ais_errors[x].error == error) return ais_errors[x].desc; } return "Unknown"; }
ASTERISK_FILE_VERSION | ( | __FILE__ | , |
"$Revision: 284593 $" | |||
) |
static void* dispatch_thread_handler | ( | void * | data | ) | [static] |
Definition at line 114 of file res_ais.c.
References ast_log(), ast_poll, clm_handle, dispatch_thread, errno, evt_handle, and LOG_ERROR.
Referenced by load_module().
{ SaSelectionObjectT clm_fd, evt_fd; int res; struct pollfd pfd[2] = { { .events = POLLIN, }, { .events = POLLIN, } }; SaAisErrorT ais_res; ais_res = saClmSelectionObjectGet(clm_handle, &clm_fd); if (ais_res != SA_AIS_OK) { ast_log(LOG_ERROR, "Failed to retrieve select fd for CLM service. " "This module will not operate.\n"); return NULL; } ais_res = saEvtSelectionObjectGet(evt_handle, &evt_fd); if (ais_res != SA_AIS_OK) { ast_log(LOG_ERROR, "Failed to retrieve select fd for EVT service. " "This module will not operate.\n"); return NULL; } pfd[0].fd = clm_fd; pfd[1].fd = evt_fd; while (!dispatch_thread.stop) { pfd[0].revents = 0; pfd[1].revents = 0; res = ast_poll(pfd, 2, -1); if (res == -1 && errno != EINTR && errno != EAGAIN) { ast_log(LOG_ERROR, "Select error (%s) dispatch thread going away now, " "and the module will no longer operate.\n", strerror(errno)); break; } if (pfd[0].revents & POLLIN) { saClmDispatch(clm_handle, SA_DISPATCH_ALL); } if (pfd[1].revents & POLLIN) { saEvtDispatch(evt_handle, SA_DISPATCH_ALL); } } return NULL; }
static int load_module | ( | void | ) | [static] |
Definition at line 160 of file res_ais.c.
References ast_ais_clm_load_module(), ast_ais_clm_unload_module(), ast_ais_evt_load_module(), ast_ais_evt_unload_module(), ast_log(), AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_pthread_create_background, dispatch_thread, dispatch_thread_handler(), and LOG_ERROR.
{ if (ast_ais_clm_load_module()) goto return_error; if (ast_ais_evt_load_module()) goto evt_failed; if (ast_pthread_create_background(&dispatch_thread.id, NULL, dispatch_thread_handler, NULL)) { ast_log(LOG_ERROR, "Error starting AIS dispatch thread.\n"); goto dispatch_failed; } return AST_MODULE_LOAD_SUCCESS; dispatch_failed: ast_ais_evt_unload_module(); evt_failed: ast_ais_clm_unload_module(); return_error: return AST_MODULE_LOAD_DECLINE; }
static int unload_module | ( | void | ) | [static] |
Definition at line 184 of file res_ais.c.
References ast_ais_clm_unload_module(), ast_ais_evt_unload_module(), AST_PTHREADT_NULL, and dispatch_thread.
{ ast_ais_clm_unload_module(); ast_ais_evt_unload_module(); if (dispatch_thread.id != AST_PTHREADT_NULL) { dispatch_thread.stop = 1; pthread_kill(dispatch_thread.id, SIGURG); /* poke! */ pthread_join(dispatch_thread.id, NULL); } return 0; }
struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "SAForum AIS" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static] |
struct ais_error ais_errors[] [static] |
Referenced by ais_err2str().
SaVersionT ais_version = { 'B', 1, 1 } |
Definition at line 67 of file res_ais.c.
Referenced by ast_ais_clm_load_module(), and ast_ais_evt_load_module().
struct ast_module_info* ast_module_info = &__mod_info [static] |
struct { ... } dispatch_thread [static] |
Referenced by dispatch_thread_handler(), load_module(), and unload_module().