[asterisk-commits] trunk r11193 - in /trunk: configs/ doc/ res/
res/snmp/
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sun Feb 26 13:46:15 MST 2006
Author: markster
Date: Sun Feb 26 14:46:11 2006
New Revision: 11193
URL: http://svn.digium.com/view/asterisk?rev=11193&view=rev
Log:
Add SNMP support (bug #6439)
Added:
trunk/configs/res_snmp.conf.sample (with props)
trunk/doc/asterisk-mib.txt (with props)
trunk/doc/digium-mib.txt (with props)
trunk/doc/snmp.txt (with props)
trunk/res/res_snmp.c (with props)
trunk/res/snmp/
trunk/res/snmp/agent.c (with props)
trunk/res/snmp/agent.h (with props)
Modified:
trunk/res/Makefile
Added: trunk/configs/res_snmp.conf.sample
URL: http://svn.digium.com/view/asterisk/trunk/configs/res_snmp.conf.sample?rev=11193&view=auto
==============================================================================
--- trunk/configs/res_snmp.conf.sample (added)
+++ trunk/configs/res_snmp.conf.sample Sun Feb 26 14:46:11 2006
@@ -1,0 +1,10 @@
+;
+; Configuration file for res_snmp
+;
+
+[general]
+; We run as a subagent per default -- to run as a full agent
+; we must run as root (to be able to bind to port 161)
+;subagent = yes
+; SNMP must be explicitly enabled to be active
+;enabled = yes
Propchange: trunk/configs/res_snmp.conf.sample
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/configs/res_snmp.conf.sample
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: trunk/configs/res_snmp.conf.sample
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: trunk/doc/asterisk-mib.txt
URL: http://svn.digium.com/view/asterisk/trunk/doc/asterisk-mib.txt?rev=11193&view=auto
==============================================================================
--- trunk/doc/asterisk-mib.txt (added)
+++ trunk/doc/asterisk-mib.txt Sun Feb 26 14:46:11 2006
@@ -1,0 +1,717 @@
+ASTERISK-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ OBJECT-TYPE, MODULE-IDENTITY, Integer32, Counter32, TimeTicks
+ FROM SNMPv2-SMI
+
+ TEXTUAL-CONVENTION, DisplayString, TruthValue
+ FROM SNMPv2-TC
+
+ digium
+ FROM DIGIUM-MIB;
+
+asterisk MODULE-IDENTITY
+ LAST-UPDATED "200602041900Z"
+ ORGANIZATION "Digium, Inc."
+ CONTACT-INFO
+ "Mark Spencer
+ Email: markster at digium.com"
+ DESCRIPTION
+ "Asterisk is an Open Source PBX. This MIB defined
+ objects for managing Asterisk instances."
+ ::= { digium 1 }
+
+asteriskVersion OBJECT IDENTIFIER ::= { asterisk 1 }
+asteriskConfiguration OBJECT IDENTIFIER ::= { asterisk 2 }
+asteriskModules OBJECT IDENTIFIER ::= { asterisk 3 }
+asteriskIndications OBJECT IDENTIFIER ::= { asterisk 4 }
+asteriskChannels OBJECT IDENTIFIER ::= { asterisk 5 }
+
+-- asteriskVersion
+
+astVersionString OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Text version string of the version of Asterisk that
+ the SNMP Agent was compiled to run against."
+ ::= { asteriskVersion 1 }
+
+astVersionTag OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "SubVersion revision of the version of Asterisk that
+ the SNMP Agent was compiled to run against -- this is
+ typically 0 for release-versions of Asterisk."
+ ::= { asteriskVersion 2 }
+
+-- asteriskConfiguration
+
+astConfigUpTime OBJECT-TYPE
+ SYNTAX TimeTicks
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Time ticks since Asterisk was started."
+ ::= { asteriskConfiguration 1 }
+
+astConfigReloadTime OBJECT-TYPE
+ SYNTAX TimeTicks
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Time ticks since Asterisk was last reloaded."
+ ::= { asteriskConfiguration 2 }
+
+astConfigPid OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The process id of the running Asterisk process."
+ ::= { asteriskConfiguration 3 }
+
+astConfigSocket OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The control socket for giving Asterisk commands."
+ ::= { asteriskConfiguration 4 }
+
+-- asteriskModules
+
+astNumModules OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number of modules currently loaded into Asterisk."
+ ::= { asteriskModules 1 }
+
+-- asteriskIndications
+
+astNumIndications OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number of indications currently defined in Asterisk."
+ ::= { asteriskIndications 1 }
+
+astCurrentIndication OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Default indication zone to use."
+ ::= { asteriskIndications 2 }
+
+astIndicationsTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF AstIndicationsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Table with all the indication zones currently know to
+ the running Asterisk instance."
+ ::= { asteriskIndications 3 }
+
+astIndicationsEntry OBJECT-TYPE
+ SYNTAX AstIndicationsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Information about a single indication zone."
+ INDEX { astIndIndex }
+ ::= { astIndicationsTable 1 }
+
+AstIndicationsEntry ::= SEQUENCE {
+ astIndIndex Integer32,
+ astIndCountry DisplayString,
+ astIndAlias DisplayString,
+ astIndDescription DisplayString
+}
+
+astIndIndex OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Numerical index into the table of indication zones."
+ ::= { astIndicationsEntry 1 }
+
+astIndCountry OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Country for which the indication zone is valid,
+ typically this is the ISO 2-letter code of the country."
+ ::= { astIndicationsEntry 2 }
+
+astIndAlias OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ ""
+ ::= { astIndicationsEntry 3 }
+
+astIndDescription OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Description of the indication zone, usually the full
+ name of the country it is valid for."
+ ::= { astIndicationsEntry 4 }
+
+-- asteriskChannels
+
+astNumChannels OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current number of active channels."
+ ::= { asteriskChannels 1 }
+
+astChanTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF AstChanEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Table with details of the currently active channels
+ in the Asterisk instance."
+ ::= { asteriskChannels 2 }
+
+astChanEntry OBJECT-TYPE
+ SYNTAX AstChanEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Details of a single channel."
+ INDEX { astChanIndex }
+ ::= { astChanTable 1 }
+
+AstChanEntry ::= SEQUENCE {
+ astChanIndex Integer32,
+ astChanName DisplayString,
+ astChanLanguage DisplayString,
+ astChanType DisplayString,
+ astChanMusicClass DisplayString,
+ astChanBridge DisplayString,
+ astChanMasq DisplayString,
+ astChanMasqr DisplayString,
+ astChanWhenHangup TimeTicks,
+ astChanApp DisplayString,
+ astChanData DisplayString,
+ astChanContext DisplayString,
+ astChanMacroContext DisplayString,
+ astChanMacroExten DisplayString,
+ astChanMacroPri Integer32,
+ astChanExten DisplayString,
+ astChanPri Integer32,
+ astChanAccountCode DisplayString,
+ astChanForwardTo DisplayString,
+ astChanUniqueId DisplayString,
+ astChanCallGroup Unsigned32,
+ astChanPickupGroup Unsigned32,
+ astChanState INTEGER,
+ astChanMuted TruthValue,
+ astChanRings Integer32,
+ astChanCidDNID DisplayString,
+ astChanCidNum DisplayString,
+ astChanCidName DisplayString,
+ astChanCidANI DisplayString,
+ astChanCidRDNIS DisplayString,
+ astChanCidPresentation DisplayString,
+ astChanCidANI2 Integer32,
+ astChanCidTON Integer32,
+ astChanCidTNS Integer32,
+ astChanAMAFlags INTEGER,
+ astChanADSI INTEGER,
+ astChanToneZone DisplayString,
+ astChanHangupCause INTEGER,
+ astChanVariables DisplayString,
+ astChanFlags BITS,
+ astChanTransferCap INTEGER
+}
+
+astChanIndex OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Index into the channel table."
+ ::= { astChanEntry 1 }
+
+astChanName OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of the currentl channel."
+ ::= { astChanEntry 2 }
+
+astChanLanguage OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Which language the current channel is configured to
+ use -- used mainly for prompts."
+ ::= { astChanEntry 3 }
+
+astChanType OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Underlying technology for the current channel."
+ ::= { astChanEntry 4 }
+
+astChanMusicClass OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Music class to be used for Music on Hold for this
+ channel."
+ ::= { astChanEntry 5 }
+
+astChanBridge OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Which channel this channel is currently bridged (in a
+ conversation) with."
+ ::= { astChanEntry 6 }
+
+astChanMasq OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Channel masquerading for us."
+ ::= { astChanEntry 7 }
+
+astChanMasqr OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Channel we are masquerading for."
+ ::= { astChanEntry 8 }
+
+astChanWhenHangup OBJECT-TYPE
+ SYNTAX TimeTicks
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "How long until this channel will be hung up."
+ ::= { astChanEntry 9 }
+
+astChanApp OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current application for the channel."
+ ::= { astChanEntry 10 }
+
+astChanData OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Arguments passed to the current application."
+ ::= { astChanEntry 11 }
+
+astChanContext OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current extension context."
+ ::= { astChanEntry 12 }
+
+astChanMacroContext OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current macro context."
+ ::= { astChanEntry 13 }
+
+astChanMacroExten OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current macro extension."
+ ::= { astChanEntry 14 }
+
+astChanMacroPri OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current macro priority."
+ ::= { astChanEntry 15 }
+
+astChanExten OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current extension."
+ ::= { astChanEntry 16 }
+
+astChanPri OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current priority."
+ ::= { astChanEntry 17 }
+
+astChanAccountCode OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Account Code for billing."
+ ::= { astChanEntry 18 }
+
+astChanForwardTo OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Where to forward to if asked to dial on this
+ interface."
+ ::= { astChanEntry 19 }
+
+astChanUniqueId OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Unique Channel Identifier."
+ ::= { astChanEntry 20 }
+
+astChanCallGroup OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Call Group."
+ ::= { astChanEntry 21 }
+
+astChanPickupGroup OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Pickup Group."
+ ::= { astChanEntry 22 }
+
+astChanState OBJECT-TYPE
+ SYNTAX INTEGER {
+ stateDown(0),
+ stateReserved(1),
+ stateOffHook(2),
+ stateDialing(3),
+ stateRing(4),
+ stateRinging(5),
+ stateUp(6),
+ stateBusy(7),
+ stateDialingOffHook(8),
+ statePreRing(9)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Channel state."
+ ::= { astChanEntry 23 }
+
+astChanMuted OBJECT-TYPE
+ SYNTAX TruthValue
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Transmission of voice data has been muted."
+ ::= { astChanEntry 24 }
+
+astChanRings OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number of rings so far."
+ ::= { astChanEntry 25 }
+
+astChanCidDNID OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Dialled Number ID."
+ ::= { astChanEntry 26 }
+
+astChanCidNum OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Caller Number."
+ ::= { astChanEntry 27 }
+
+astChanCidName OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Caller Name."
+ ::= { astChanEntry 28 }
+
+astCanCidANI OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "ANI"
+ ::= { astChanEntry 29 }
+
+astChanCidRDNIS OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Redirected Dialled Number Service."
+ ::= { astChanEntry 30 }
+
+astChanCidPresentation OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number Presentation/Screening."
+ ::= { astChanEntry 31 }
+
+astChanCidANI2 OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "ANI 2 (info digit)."
+ ::= { astChanEntry 32 }
+
+astChanCidTON OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Type of Number."
+ ::= { astChanEntry 33 }
+
+astChanCidTNS OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Transit Network Select."
+ ::= { astChanEntry 34 }
+
+astChanAMAFlags OBJECT-TYPE
+ SYNTAX INTEGER {
+ Default(0),
+ Omit(1),
+ Billing(2),
+ Documentation(3)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "AMA Flags."
+ ::= { astChanEntry 35 }
+
+astChanADSI OBJECT-TYPE
+ SYNTAX INTEGER {
+ Unknown(0),
+ Available(1),
+ Unavailable(2),
+ OffHookOnly(3)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Whether or not ADSI is detected on CPE."
+ ::= { astChanEntry 36 }
+
+astChanToneZone OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Indication zone to use for channel."
+ ::= { astChanEntry 37 }
+
+astChanHangupCause OBJECT-TYPE
+ SYNTAX INTEGER {
+ NotDefined(0),
+ Unregistered(3),
+ Normal(16),
+ Busy(17),
+ NoAnswer(19),
+ Congestion(34),
+ Failure(38),
+ NoSuchDriver(66)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Why is the channel hung up."
+ ::= { astChanEntry 38 }
+
+astChanVariables OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Channel Variables defined for this channel."
+ ::= { astChanEntry 39 }
+
+astChanFlags OBJECT-TYPE
+ SYNTAX BITS {
+ WantsJitter(0),
+ DeferDTMF(1),
+ WriteInterrupt(2),
+ Blocking(3),
+ Zombie(4),
+ Exception(5),
+ MusicOnHold(6),
+ Spying(7),
+ NativeBridge(8),
+ AutoIncrementingLoop(9)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Flags set on this channel."
+ ::= { astChanEntry 40 }
+
+astChanTransferCap OBJECT-TYPE
+ SYNTAX INTEGER {
+ Speech(0),
+ Digital(8),
+ RestrictedDigital(9),
+ 3kAudio(16),
+ DigitalWithTones(17),
+ Video(24)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Transfer Capabilities for this channel."
+ ::= { astChanEntry 41 }
+
+astNumChanTypes OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number of channel types (technologies) supported."
+ ::= { asteriskChannels 3 }
+
+astChanTypeTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF AstChanTypeEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Table with details of the supported channel types."
+ ::= { asteriskChannels 4 }
+
+astChanTypeEntry OBJECT-TYPE
+ SYNTAX AstChanTypeEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Information about a technology we support, including
+ how many channels are currently using this technology."
+ INDEX { astChanTypeIndex }
+ ::= { astChanTypeTable 1 }
+
+AstChanTypeEntry ::= SEQUENCE {
+ astChanTypeIndex Integer32,
+ astChanTypeName DisplayString,
+ astChanTypeDesc DisplayString,
+ astChanTypeDeviceState Integer32,
+ astChanTypeIndications Integer32,
+ astChanTypeTransfer Integer32,
+ astChanTypeChannels Gauge32
+}
+
+astChanTypeIndex OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Index into the table of channel types."
+ ::= { astChanTypeEntry 1 }
+
+astChanTypeName OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Unique name of the technology we are describing."
+ ::= { astChanTypeEntry 2 }
+
+astChanTypeDesc OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Description of the channel type (technology)."
+ ::= { astChanTypeEntry 3 }
+
+astChanTypeDeviceState OBJECT-TYPE
+ SYNTAX TruthValue
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Whether the current technology can hold device states."
+ ::= { astChanTypeEntry 4 }
+
+astChanTypeIndications OBJECT-TYPE
+ SYNTAX TruthValue
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Whether the current technology supports progress indication."
+ ::= { astChanTypeEntry 5 }
+
+astChanTypeTransfer OBJECT-TYPE
+ SYNTAX TruthValue
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Whether the current technology supports transfers, where
+ Asterisk can get out from inbetween two bridged channels."
+ ::= { astChanTypeEntry 6 }
+
+astChanTypeChannels OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number of active channels using the current technology."
+ ::= { astChanTypeEntry 7 }
+
+END
Propchange: trunk/doc/asterisk-mib.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/doc/asterisk-mib.txt
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: trunk/doc/asterisk-mib.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: trunk/doc/digium-mib.txt
URL: http://svn.digium.com/view/asterisk/trunk/doc/digium-mib.txt?rev=11193&view=auto
==============================================================================
--- trunk/doc/digium-mib.txt (added)
+++ trunk/doc/digium-mib.txt Sun Feb 26 14:46:11 2006
@@ -1,0 +1,17 @@
+DIGIUM-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ enterprises
+ FROM SNMPv2-SMI;
+
+digium MODULE-IDENTITY
+ LAST-UPDATED "200602041900Z"
+ ORGANIZATION "Digium, Inc."
+ CONTACT-INFO
+ "Mark Spencer
+ Email: markster at digium.com"
+ DESCRIPTION
+ ""
+ ::= { enterprises 22736 }
+
+END
Propchange: trunk/doc/digium-mib.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/doc/digium-mib.txt
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: trunk/doc/digium-mib.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: trunk/doc/snmp.txt
URL: http://svn.digium.com/view/asterisk/trunk/doc/snmp.txt?rev=11193&view=auto
==============================================================================
--- trunk/doc/snmp.txt (added)
+++ trunk/doc/snmp.txt Sun Feb 26 14:46:11 2006
@@ -1,0 +1,36 @@
+Asterisk SNMP Support
+---------------------
+
+Rudimentary support for SNMP access to Asterisk is available. To build
+this, one needs to have Net-SNMP development headers and libraries on
+the build system, including any libraries Net-SNMP depends on.
+
+Note that on some (many?) Linux-distributions the dependency list in
+the net-snmp-devel list is not complete, and additional RPMs will need
+to be installed. This is typically seen as attempts to build res_snmp
+as net-snmp-devel is available, but then failures to find certain
+libraries.
+
+SNMP support comes in two varieties -- as a sub-agent to a running SNMP
+daemon using the AgentX protocol, or as a full standalone agent. If
+you wish to run a full standalone agent, Asterisk must run as root in
+order to find to port 161.
+
+Configuring access when running as a full agent is something that is
+left as an exercise to the reader.
+
+To enable access to the Asterisk SNMP subagent from a master SNMP
+daemon, one will need to enable AgentX support, and also make sure that
+Asterisk will be able to access the Unix domain socket. One way of
+doing this is to add the following to /etc/snmp/snmpd.conf:
+
+ # Enable AgentX support
+ master agentx
+
+ # Set permissions on AgentX socket and containing
+ # directory such that process in group 'asterisk'
+ # will be able to connect
+ agentXPerms 0660 0550 nobody asterisk
+
+This assumes that you run Asterisk under group 'asterisk' (and does
+not care what user you run as).
Propchange: trunk/doc/snmp.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/doc/snmp.txt
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: trunk/doc/snmp.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: trunk/res/Makefile
URL: http://svn.digium.com/view/asterisk/trunk/res/Makefile?rev=11193&r1=11192&r2=11193&view=diff
==============================================================================
--- trunk/res/Makefile (original)
+++ trunk/res/Makefile Sun Feb 26 14:46:11 2006
@@ -30,6 +30,11 @@
OSPLIB:=$(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libosptk.a $(CROSS_COMPILE_TARGET)/usr/local/lib/libosptk.a)
ifeq (${OSPLIB},)
MODS:=$(filter-out res_osp.so,$(MODS))
+endif
+
+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/net-snmp/net-snmp-config.h),)
+ SNMP_LDLIBS+=$(shell net-snmp-config --agent-libs)
+ MODS+=res_snmp.so
endif
ifeq (${WITH_SMDI},)
@@ -108,6 +113,9 @@
res_config_odbc.so: res_config_odbc.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} ${CYG_RES_CONFIG_ODBC_LIB}
+res_snmp.so: res_snmp.o snmp/agent.o
+ $(CC) $(SOLINK) ${SNMP_LDFLAGS} -o $@ ${CYGSOLINK} res_snmp.o snmp/agent.o ${CYGSOLIB} ${SNMP_LDLIBS}
+
ifneq ($(wildcard .depend),)
include .depend
endif
Added: trunk/res/res_snmp.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_snmp.c?rev=11193&view=auto
==============================================================================
--- trunk/res/res_snmp.c (added)
+++ trunk/res/res_snmp.c Sun Feb 26 14:46:11 2006
@@ -1,0 +1,148 @@
+/*
+ * Copyright (C) 2006 Voop as
+ * Thorsten Lockert <tholo at 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 at 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:
+ */
Propchange: trunk/res/res_snmp.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/res/res_snmp.c
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: trunk/res/res_snmp.c
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: trunk/res/snmp/agent.c
URL: http://svn.digium.com/view/asterisk/trunk/res/snmp/agent.c?rev=11193&view=auto
==============================================================================
--- trunk/res/snmp/agent.c (added)
+++ trunk/res/snmp/agent.c Sun Feb 26 14:46:11 2006
@@ -1,0 +1,845 @@
+/*
+ * Copyright (C) 2006 Voop as
+ * Thorsten Lockert <tholo at 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 at voop.as>
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * These conflict with ones in Asterisk header files, so
+ * get rid of them. They'll be back after the next few
+ * includes...
+ */
+#undef HAVE_GETLOADAVG
+#undef HAVE_STRCASESTR
+
+#include <pthread.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/channel.h"
+#include "asterisk/logger.h"
+#include "asterisk/options.h"
+#include "asterisk/indications.h"
+#include "asterisk/version.h"
+#include "asterisk/pbx.h"
+
+/* Colission between Net-SNMP and Asterisk */
+#define unload_module ast_unload_module
+#include "asterisk/module.h"
+#undef unload_module
+
+#include "agent.h"
+
+/* Helper functions in Net-SNMP, header file not installed by default */
+int header_generic(struct variable *, oid *, size_t *, int, size_t *, WriteMethod **);
+int header_simple_table(struct variable *, oid *, size_t *, int, size_t *, WriteMethod **, int);
+int register_sysORTable(oid *, size_t, const char *);
+int unregister_sysORTable(oid *, size_t);
+
+/* Not defined in header files */
+extern char ast_config_AST_SOCKET[];
+
+/* Forward declaration */
+static void init_asterisk_mib(void);
+
+/*
+ * Anchor for all the Asterisk MIB values
+ */
+static oid asterisk_oid[] = { 1, 3, 6, 1, 4, 1, 22736, 1 };
+
+/*
+ * MIB values -- these correspond to values in the Asterisk MIB,
+ * and MUST be kept in sync with the MIB for things to work as
+ * expected.
+ */
+#define ASTVERSION 1
+#define ASTVERSTRING 1
+#define ASTVERTAG 2
+
+#define ASTCONFIGURATION 2
+#define ASTCONFUPTIME 1
+#define ASTCONFRELOADTIME 2
+#define ASTCONFPID 3
+#define ASTCONFSOCKET 4
+
+#define ASTMODULES 3
+#define ASTMODCOUNT 1
+
+#define ASTINDICATIONS 4
+#define ASTINDCOUNT 1
+#define ASTINDCURRENT 2
+
+#define ASTINDTABLE 3
+#define ASTINDINDEX 1
+#define ASTINDCOUNTRY 2
+#define ASTINDALIAS 3
+#define ASTINDDESCRIPTION 4
+
+#define ASTCHANNELS 5
+#define ASTCHANCOUNT 1
+
+#define ASTCHANTABLE 2
+#define ASTCHANINDEX 1
+#define ASTCHANNAME 2
+#define ASTCHANLANGUAGE 3
+#define ASTCHANTYPE 4
+#define ASTCHANMUSICCLASS 5
+#define ASTCHANBRIDGE 6
+#define ASTCHANMASQ 7
+#define ASTCHANMASQR 8
+#define ASTCHANWHENHANGUP 9
+#define ASTCHANAPP 10
+#define ASTCHANDATA 11
+#define ASTCHANCONTEXT 12
+#define ASTCHANMACROCONTEXT 13
+#define ASTCHANMACROEXTEN 14
+#define ASTCHANMACROPRI 15
+#define ASTCHANEXTEN 16
+#define ASTCHANPRI 17
+#define ASTCHANACCOUNTCODE 18
+#define ASTCHANFORWARDTO 19
+#define ASTCHANUNIQUEID 20
+#define ASTCHANCALLGROUP 21
+#define ASTCHANPICKUPGROUP 22
+#define ASTCHANSTATE 23
+#define ASTCHANMUTED 24
+#define ASTCHANRINGS 25
+#define ASTCHANCIDDNID 26
+#define ASTCHANCIDNUM 27
+#define ASTCHANCIDNAME 28
+#define ASTCHANCIDANI 29
+#define ASTCHANCIDRDNIS 30
+#define ASTCHANCIDPRES 31
+#define ASTCHANCIDANI2 32
+#define ASTCHANCIDTON 33
+#define ASTCHANCIDTNS 34
+#define ASTCHANAMAFLAGS 35
+#define ASTCHANADSI 36
+#define ASTCHANTONEZONE 37
+#define ASTCHANHANGUPCAUSE 38
+#define ASTCHANVARIABLES 39
+#define ASTCHANFLAGS 40
+#define ASTCHANTRANSFERCAP 41
+
+#define ASTCHANTYPECOUNT 3
+
+#define ASTCHANTYPETABLE 4
+#define ASTCHANTYPEINDEX 1
+#define ASTCHANTYPENAME 2
+#define ASTCHANTYPEDESC 3
+#define ASTCHANTYPEDEVSTATE 4
+#define ASTCHANTYPEINDICATIONS 5
+#define ASTCHANTYPETRANSFER 6
+#define ASTCHANTYPECHANNELS 7
+
+void *agent_thread(void *arg)
+{
+ ast_verbose(VERBOSE_PREFIX_2 "Starting %sAgent\n", res_snmp_agentx_subagent ? "Sub" : "");
+
+ snmp_enable_stderrlog();
+
+ if (res_snmp_agentx_subagent)
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE,
+ 1);
+
+ init_agent("asterisk");
+
+ init_asterisk_mib();
+
+ init_snmp("asterisk");
+
+ if (!res_snmp_agentx_subagent)
+ init_master_agent();
+
+ while (res_snmp_dont_stop)
+ agent_check_and_process(1);
+
+ snmp_shutdown("asterisk");
+
+ ast_verbose(VERBOSE_PREFIX_2 "Terminating %sAgent\n",
+ res_snmp_agentx_subagent ? "Sub" : "");
+
+ return NULL;
+}
+
+static u_char *
+ast_var_channels(struct variable *vp, oid *name, size_t *length,
+ int exact, size_t *var_len, WriteMethod **write_method)
+{
+ static unsigned long long_ret;
+
+ if (header_generic(vp, name, length, exact, var_len, write_method))
+ return NULL;
+
+ switch (vp->magic) {
+ case ASTCHANCOUNT:
+ long_ret = ast_active_channels();
+ return (u_char *)&long_ret;
+ default:
+ break;
+ }
+ return NULL;
+}
+
+static u_char *ast_var_channels_table(struct variable *vp, oid *name, size_t *length,
+ int exact, size_t *var_len, WriteMethod **write_method)
+{
+ static unsigned long long_ret;
+ static u_char bits_ret[2];
+ static char string_ret[256];
+ struct ast_channel *chan, *bridge;
+ struct timeval tval;
+ u_char *ret;
+ int i, bit;
+
+ if (header_simple_table(vp, name, length, exact, var_len, write_method, ast_active_channels()))
+ return NULL;
+
+ i = name[*length - 1] - 1;
+ for (chan = ast_channel_walk_locked(NULL);
+ chan && i;
+ chan = ast_channel_walk_locked(chan), i--)
+ ast_mutex_unlock(&chan->lock);
+ if (chan == NULL)
+ return NULL;
+ *var_len = sizeof(long_ret);
+
+ switch (vp->magic) {
+ case ASTCHANINDEX:
+ long_ret = name[*length - 1];
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANNAME:
+ if (!ast_strlen_zero(chan->name)) {
+ strncpy(string_ret, chan->name, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANLANGUAGE:
+ if (!ast_strlen_zero(chan->language)) {
+ strncpy(string_ret, chan->language, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANTYPE:
+ strncpy(string_ret, chan->tech->type, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ break;
+ case ASTCHANMUSICCLASS:
+ if (!ast_strlen_zero(chan->musicclass)) {
+ strncpy(string_ret, chan->musicclass, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANBRIDGE:
+ if ((bridge = ast_bridged_channel(chan)) != NULL) {
+ strncpy(string_ret, bridge->name, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANMASQ:
+ if (chan->masq && !ast_strlen_zero(chan->masq->name)) {
+ strncpy(string_ret, chan->masq->name, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANMASQR:
+ if (chan->masqr && !ast_strlen_zero(chan->masqr->name)) {
+ strncpy(string_ret, chan->masqr->name, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANWHENHANGUP:
+ if (chan->whentohangup) {
+ gettimeofday(&tval, NULL);
+ long_ret = difftime(chan->whentohangup, tval.tv_sec) * 100 - tval.tv_usec / 10000;
+ ret= (u_char *)&long_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANAPP:
+ if (chan->appl) {
+ strncpy(string_ret, chan->appl, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANDATA:
+ if (chan->data) {
+ strncpy(string_ret, chan->data, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANCONTEXT:
+ strncpy(string_ret, chan->context, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ break;
+ case ASTCHANMACROCONTEXT:
+ strncpy(string_ret, chan->macrocontext, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ break;
+ case ASTCHANMACROEXTEN:
+ strncpy(string_ret, chan->macroexten, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ break;
+ case ASTCHANMACROPRI:
+ long_ret = chan->macropriority;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANEXTEN:
+ strncpy(string_ret, chan->exten, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ break;
+ case ASTCHANPRI:
+ long_ret = chan->priority;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANACCOUNTCODE:
+ if (!ast_strlen_zero(chan->accountcode)) {
+ strncpy(string_ret, chan->accountcode, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANFORWARDTO:
+ if (!ast_strlen_zero(chan->call_forward)) {
+ strncpy(string_ret, chan->call_forward, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANUNIQUEID:
+ strncpy(string_ret, chan->uniqueid, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ break;
+ case ASTCHANCALLGROUP:
+ long_ret = chan->callgroup;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANPICKUPGROUP:
+ long_ret = chan->pickupgroup;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANSTATE:
+ long_ret = chan->_state & 0xffff;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANMUTED:
+ long_ret = chan->_state & AST_STATE_MUTE ? 1 : 2;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANRINGS:
+ long_ret = chan->rings;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANCIDDNID:
+ if (chan->cid.cid_dnid) {
+ strncpy(string_ret, chan->cid.cid_dnid, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANCIDNUM:
+ if (chan->cid.cid_num) {
+ strncpy(string_ret, chan->cid.cid_num, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANCIDNAME:
+ if (chan->cid.cid_name) {
+ strncpy(string_ret, chan->cid.cid_name, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANCIDANI:
+ if (chan->cid.cid_ani) {
+ strncpy(string_ret, chan->cid.cid_ani, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANCIDRDNIS:
+ if (chan->cid.cid_rdnis) {
+ strncpy(string_ret, chan->cid.cid_rdnis, sizeof(string_ret));
+ string_ret[sizeof(string_ret) - 1] = '\0';
+ *var_len = strlen(string_ret);
+ ret = (u_char *)string_ret;
+ }
+ else
+ ret = NULL;
+ break;
+ case ASTCHANCIDPRES:
+ long_ret = chan->cid.cid_pres;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANCIDANI2:
+ long_ret = chan->cid.cid_ani2;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANCIDTON:
+ long_ret = chan->cid.cid_ton;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANCIDTNS:
+ long_ret = chan->cid.cid_tns;
+ ret = (u_char *)&long_ret;
+ break;
+ case ASTCHANAMAFLAGS:
+ long_ret = chan->amaflags;
[... 448 lines stripped ...]
More information about the asterisk-commits
mailing list