dect
/
asterisk
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asterisk/res/res_snmp.c

154 lines
3.1 KiB
C

/*
* Copyright (C) 2006 Voop as
* Thorsten Lockert <tholo@voop.as>
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief SNMP Agent / SubAgent support for Asterisk
*
* \author Thorsten Lockert <tholo@voop.as>
*/
/*** MODULEINFO
<defaultenabled>no</defaultenabled>
***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
#include "snmp/agent.h"
#define MODULE_DESCRIPTION "SNMP [Sub]Agent for Asterisk"
int res_snmp_agentx_subagent;
int res_snmp_dont_stop;
int res_snmp_enabled;
static pthread_t thread = AST_PTHREADT_NULL;
static int load_config(void)
{
struct ast_variable *var;
struct ast_config *cfg;
char *cat;
res_snmp_enabled = 0;
res_snmp_agentx_subagent = 1;
cfg = ast_config_load("res_snmp.conf");
if (cfg) {
cat = ast_category_browse(cfg, NULL);
while (cat) {
var = ast_variable_browse(cfg, cat);
if (strcasecmp(cat, "general") == 0) {
while (var) {
if (strcasecmp(var->name, "subagent") == 0) {
if (ast_true(var->value))
res_snmp_agentx_subagent = 1;
else if (ast_false(var->value))
res_snmp_agentx_subagent = 0;
else {
ast_log(LOG_ERROR, "Value '%s' does not evaluate to true or false.\n",
var->value);
ast_config_destroy(cfg);
return 1;
}
} else if (strcasecmp(var->name, "enabled") == 0) {
res_snmp_enabled = ast_true(var->value);
} else {
ast_log(LOG_ERROR, "Unrecognized variable '%s' in category '%s'\n",
var->name, cat);
ast_config_destroy(cfg);
return 1;
}
var = var->next;
}
}
else {
ast_log(LOG_ERROR, "Unrecognized category '%s'\n", cat);
ast_config_destroy(cfg);
return 1;
}
cat = ast_category_browse(cfg, cat);
}
ast_config_destroy(cfg);
}
return 0;
}
int load_module(void)
{
load_config();
ast_verbose(VERBOSE_PREFIX_1 "Loading [Sub]Agent Module\n");
res_snmp_dont_stop = 1;
if (res_snmp_enabled)
return ast_pthread_create(&thread, NULL, agent_thread, NULL);
else
return 0;
}
int unload_module(void)
{
ast_verbose(VERBOSE_PREFIX_1 "Unloading [Sub]Agent Module\n");
res_snmp_dont_stop = 0;
return pthread_join(thread, NULL);
}
int reload(void)
{
ast_verbose(VERBOSE_PREFIX_1 "Reloading [Sub]Agent Module\n");
res_snmp_dont_stop = 0;
if (thread != AST_PTHREADT_NULL)
pthread_join(thread, NULL);
thread = AST_PTHREADT_NULL;
load_config();
res_snmp_dont_stop = 1;
if (res_snmp_enabled)
return ast_pthread_create(&thread, NULL, agent_thread, NULL);
else
return 0;
}
int usecount(void)
{
return 0;
}
const char *key(void)
{
return ASTERISK_GPL_KEY;
}
const char *description(void)
{
return MODULE_DESCRIPTION;
}
/*
* Local Variables:
* c-file-style: gnu
* c-basic-offset: 4
* c-file-offsets: ((case-label . 0))
* tab-width: 4
* indent-tabs-mode: t
* End:
*/