Asterisk - The Open Source Telephony Project  21.4.1
Macros | Functions | Variables
res_snmp.c File Reference

SNMP Agent / SubAgent support for Asterisk. More...

#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "snmp/agent.h"

Go to the source code of this file.

Macros

#define MODULE_DESCRIPTION   "SNMP [Sub]Agent for Asterisk"
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_config (void)
 Load res_snmp.conf config file. More...
 
static int load_module (void)
 Load the module. More...
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "SNMP [Sub]Agent for Asterisk" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_EXTENDED, .load = load_module, .unload = unload_module, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
int res_snmp_agentx_subagent
 
int res_snmp_dont_stop
 
static int res_snmp_enabled
 
static pthread_t thread = AST_PTHREADT_NULL
 

Detailed Description

SNMP Agent / SubAgent support for Asterisk.

Author
Thorsten Lockert tholo.nosp@m.@voo.nosp@m.p.as

Uses the Net-SNMP libraries available at http://net-snmp.sourceforge.net/

Definition in file res_snmp.c.

Function Documentation

static int load_config ( void  )
static

Load res_snmp.conf config file.

Returns
1 on load, 0 file does not exist

Definition at line 53 of file res_snmp.c.

References ast_category_browse(), ast_config_destroy(), ast_config_load, ast_false(), ast_true(), ast_variable::name, ast_variable::next, and ast_variable::value.

Referenced by load_module().

54 {
55  struct ast_variable *var;
56  struct ast_config *cfg;
57  struct ast_flags config_flags = { 0 };
58  char *cat;
59 
60  res_snmp_enabled = 0;
61  res_snmp_agentx_subagent = 1;
62  cfg = ast_config_load("res_snmp.conf", config_flags);
63  if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
64  ast_log(LOG_WARNING, "Could not load res_snmp.conf\n");
65  return 0;
66  }
67  cat = ast_category_browse(cfg, NULL);
68  while (cat) {
69  var = ast_variable_browse(cfg, cat);
70 
71  if (strcasecmp(cat, "general") == 0) {
72  while (var) {
73  if (strcasecmp(var->name, "subagent") == 0) {
74  if (ast_true(var->value))
75  res_snmp_agentx_subagent = 1;
76  else if (ast_false(var->value))
77  res_snmp_agentx_subagent = 0;
78  else {
79  ast_log(LOG_ERROR, "Value '%s' does not evaluate to true or false.\n", var->value);
80  ast_config_destroy(cfg);
81  return 1;
82  }
83  } else if (strcasecmp(var->name, "enabled") == 0) {
84  res_snmp_enabled = ast_true(var->value);
85  } else {
86  ast_log(LOG_ERROR, "Unrecognized variable '%s' in category '%s'\n", var->name, cat);
87  ast_config_destroy(cfg);
88  return 1;
89  }
90  var = var->next;
91  }
92  } else {
93  ast_log(LOG_ERROR, "Unrecognized category '%s'\n", cat);
94  ast_config_destroy(cfg);
95  return 1;
96  }
97 
98  cat = ast_category_browse(cfg, cat);
99  }
100  ast_config_destroy(cfg);
101  return 1;
102 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
char * ast_category_browse(struct ast_config *config, const char *prev_name)
Browse categories.
Definition: extconf.c:3326
#define ast_config_load(filename, flags)
Load a config file.
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true". This function checks to see whether a string passed to it is an indication of an "true" value. It checks to see if the string is "yes", "true", "y", "t", "on" or "1".
Definition: utils.c:2199
Structure used to handle boolean flags.
Definition: utils.h:199
int attribute_pure ast_false(const char *val)
Make sure something is false. Determine if a string containing a boolean value is "false"...
Definition: utils.c:2216
void ast_config_destroy(struct ast_config *cfg)
Destroys a config.
Definition: extconf.c:1289
static int load_module ( void  )
static

Load the module.

Module loading including tests for configuration or dependencies. This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE, or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails tests return AST_MODULE_LOAD_FAILURE. If the module can not load the configuration file or other non-critical problem return AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.

Definition at line 114 of file res_snmp.c.

References AST_MODULE_LOAD_DECLINE, load_config(), and thread.

115 {
116  if(!load_config())
118 
119  ast_verb(1, "Loading [Sub]Agent Module\n");
120 
121  res_snmp_dont_stop = 1;
122  if (res_snmp_enabled)
123  return ast_pthread_create_background(&thread, NULL, agent_thread, NULL);
124  else
125  return 0;
126 }
static int load_config(void)
Load res_snmp.conf config file.
Definition: res_snmp.c:53
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78