diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-02-26 20:46:11 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-02-26 20:46:11 +0000 |
commit | 9dc45031753b6c466b322dd105af10a156c11eaa (patch) | |
tree | dc11dea95379b474e67d6e7b12cff34e6154e4e4 /res/res_snmp.c | |
parent | 181407f0739de8cfd78f71645cbc49f5063996c2 (diff) |
Add SNMP support (bug #6439)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@11193 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_snmp.c')
-rw-r--r-- | res/res_snmp.c | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/res/res_snmp.c b/res/res_snmp.c new file mode 100644 index 000000000..e62e6fb05 --- /dev/null +++ b/res/res_snmp.c @@ -0,0 +1,148 @@ +/* + * 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> + */ + +#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; + +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; + pthread_join(thread, 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; +} + +char *key(void) +{ + return ASTERISK_GPL_KEY; +} + +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: + */ |