[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