| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Asterisk -- An open source telephony toolkit. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2013 Digium, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Richard Mudgett <rmudgett@digium.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * See http://www.asterisk.org for more information about
 | 
					
						
							|  |  |  |  * the Asterisk project. Please do not directly contact | 
					
						
							|  |  |  |  * any of the maintainers of this project for assistance; | 
					
						
							|  |  |  |  * the project provides a web site, mailing lists and IRC | 
					
						
							|  |  |  |  * channels for your use. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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 DAHDI internal API definitions. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \author Richard Mudgett <rmudgett@digium.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * See Also: | 
					
						
							|  |  |  |  * \arg \ref AstCREDITS | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _ASTERISK_CHAN_DAHDI_H
 | 
					
						
							|  |  |  | #define _ASTERISK_CHAN_DAHDI_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(HAVE_OPENR2)
 | 
					
						
							|  |  |  | #include <openr2.h>
 | 
					
						
							|  |  |  | #endif	/* defined(HAVE_OPENR2) */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <dahdi/user.h>
 | 
					
						
							|  |  |  | #include <dahdi/tonezone.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "asterisk/channel.h"
 | 
					
						
							|  |  |  | #include "asterisk/dsp.h"
 | 
					
						
							| 
									
										
										
										
											2013-12-19 16:52:43 +00:00
										 |  |  | #include "asterisk/app.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-23 16:44:07 +02:00
										 |  |  | #include "asterisk/mwi.h"
 | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #if defined(__cplusplus) || defined(c_plusplus)
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(HAVE_PRI)
 | 
					
						
							|  |  |  | struct sig_pri_span; | 
					
						
							|  |  |  | #endif	/* defined(HAVE_PRI) */
 | 
					
						
							|  |  |  | #if defined(HAVE_SS7)
 | 
					
						
							|  |  |  | struct sig_ss7_linkset; | 
					
						
							|  |  |  | #endif	/* defined(HAVE_SS7) */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SUB_REAL		0			/*!< Active call */
 | 
					
						
							|  |  |  | #define SUB_CALLWAIT	1			/*!< Call-Waiting call on hold */
 | 
					
						
							|  |  |  | #define SUB_THREEWAY	2			/*!< Three-way call */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct distRingData { | 
					
						
							|  |  |  | 	int ring[3]; | 
					
						
							|  |  |  | 	int range; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | struct ringContextData { | 
					
						
							|  |  |  | 	char contextData[AST_MAX_CONTEXT]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | struct dahdi_distRings { | 
					
						
							|  |  |  | 	struct distRingData ringnum[3]; | 
					
						
							|  |  |  | 	struct ringContextData ringContext[3]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern const char * const subnames[]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct dahdi_subchannel { | 
					
						
							|  |  |  | 	int dfd; | 
					
						
							|  |  |  | 	struct ast_channel *owner; | 
					
						
							|  |  |  | 	int chan; | 
					
						
							|  |  |  | 	short buffer[AST_FRIENDLY_OFFSET/2 + READ_SIZE]; | 
					
						
							|  |  |  | 	struct ast_frame f;		/*!< One frame for each channel.  How did this ever work before? */ | 
					
						
							|  |  |  | 	unsigned int needringing:1; | 
					
						
							|  |  |  | 	unsigned int needbusy:1; | 
					
						
							|  |  |  | 	unsigned int needcongestion:1; | 
					
						
							|  |  |  | 	unsigned int needanswer:1; | 
					
						
							|  |  |  | 	unsigned int needflash:1; | 
					
						
							|  |  |  | 	unsigned int needhold:1; | 
					
						
							|  |  |  | 	unsigned int needunhold:1; | 
					
						
							|  |  |  | 	unsigned int linear:1; | 
					
						
							|  |  |  | 	unsigned int inthreeway:1; | 
					
						
							|  |  |  | 	struct dahdi_confinfo curconf; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MAX_SLAVES	4
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* States for sending MWI message
 | 
					
						
							|  |  |  |  * First three states are required for send Ring Pulse Alert Signal | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | typedef enum { | 
					
						
							|  |  |  | 	MWI_SEND_NULL = 0, | 
					
						
							|  |  |  | 	MWI_SEND_SA, | 
					
						
							|  |  |  | 	MWI_SEND_SA_WAIT, | 
					
						
							|  |  |  | 	MWI_SEND_PAUSE, | 
					
						
							|  |  |  | 	MWI_SEND_SPILL, | 
					
						
							|  |  |  | 	MWI_SEND_CLEANUP, | 
					
						
							|  |  |  | 	MWI_SEND_DONE, | 
					
						
							|  |  |  | } mwisend_states; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mwisend_info { | 
					
						
							|  |  |  | 	struct timeval pause; | 
					
						
							|  |  |  | 	mwisend_states mwisend_current; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! Specify the lists dahdi_pvt can be put in. */ | 
					
						
							|  |  |  | enum DAHDI_IFLIST { | 
					
						
							|  |  |  | 	DAHDI_IFLIST_NONE,	/*!< The dahdi_pvt is not in any list. */ | 
					
						
							|  |  |  | 	DAHDI_IFLIST_MAIN,	/*!< The dahdi_pvt is in the main interface list */ | 
					
						
							|  |  |  | #if defined(HAVE_PRI)
 | 
					
						
							|  |  |  | 	DAHDI_IFLIST_NO_B_CHAN,	/*!< The dahdi_pvt is in a no B channel interface list */ | 
					
						
							|  |  |  | #endif	/* defined(HAVE_PRI) */
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct dahdi_pvt { | 
					
						
							|  |  |  | 	ast_mutex_t lock;					/*!< Channel private lock. */ | 
					
						
							|  |  |  | 	struct callerid_state *cs; | 
					
						
							|  |  |  | 	struct ast_channel *owner;			/*!< Our current active owner (if applicable) */ | 
					
						
							|  |  |  | 							/*!< Up to three channels can be associated with this call */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct dahdi_subchannel sub_unused;		/*!< Just a safety precaution */ | 
					
						
							|  |  |  | 	struct dahdi_subchannel subs[3];			/*!< Sub-channels */ | 
					
						
							|  |  |  | 	struct dahdi_confinfo saveconf;			/*!< Saved conference info */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct dahdi_pvt *slaves[MAX_SLAVES];		/*!< Slave to us (follows our conferencing) */ | 
					
						
							|  |  |  | 	struct dahdi_pvt *master;				/*!< Master to us (we follow their conferencing) */ | 
					
						
							|  |  |  | 	int inconference;				/*!< If our real should be in the conference */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	int bufsize;                /*!< Size of the buffers */ | 
					
						
							|  |  |  | 	int buf_no;					/*!< Number of buffers */ | 
					
						
							|  |  |  | 	int buf_policy;				/*!< Buffer policy */ | 
					
						
							|  |  |  | 	int faxbuf_no;              /*!< Number of Fax buffers */ | 
					
						
							|  |  |  | 	int faxbuf_policy;          /*!< Fax buffer policy */ | 
					
						
							|  |  |  | 	int sig;					/*!< Signalling style */ | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Nonzero if the signaling type is sent over a radio. | 
					
						
							|  |  |  | 	 * \note Set to a couple of nonzero values but it is only tested like a boolean. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int radio; | 
					
						
							|  |  |  | 	int outsigmod;					/*!< Outbound Signalling style (modifier) */ | 
					
						
							|  |  |  | 	int oprmode;					/*!< "Operator Services" mode */ | 
					
						
							|  |  |  | 	struct dahdi_pvt *oprpeer;				/*!< "Operator Services" peer tech_pvt ptr */ | 
					
						
							| 
									
										
										
										
											2013-10-14 22:52:42 +00:00
										 |  |  | 	/*! \brief Hardware Rx gain set by chan_dahdi.conf */ | 
					
						
							|  |  |  | 	float hwrxgain; | 
					
						
							|  |  |  | 	/*! \brief Hardware Tx gain set by chan_dahdi.conf */ | 
					
						
							|  |  |  | 	float hwtxgain; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	/*! \brief Amount of gain to increase during caller id */ | 
					
						
							|  |  |  | 	float cid_rxgain; | 
					
						
							| 
									
										
										
										
											2013-10-14 22:06:01 +00:00
										 |  |  | 	/*! \brief Software Rx gain set by chan_dahdi.conf */ | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	float rxgain; | 
					
						
							| 
									
										
										
										
											2013-10-14 22:06:01 +00:00
										 |  |  | 	/*! \brief Software Tx gain set by chan_dahdi.conf */ | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	float txgain; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	float txdrc; /*!< Dynamic Range Compression factor. a number between 1 and 6ish */ | 
					
						
							|  |  |  | 	float rxdrc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	int tonezone;					/*!< tone zone for this chan, or -1 for default */ | 
					
						
							|  |  |  | 	enum DAHDI_IFLIST which_iflist;	/*!< Which interface list is this structure listed? */ | 
					
						
							|  |  |  | 	struct dahdi_pvt *next;				/*!< Next channel in list */ | 
					
						
							|  |  |  | 	struct dahdi_pvt *prev;				/*!< Prev channel in list */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* flags */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if ADSI (Analog Display Services Interface) available | 
					
						
							|  |  |  | 	 * \note Set from the "adsi" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int adsi:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if we can use a polarity reversal to mark when an outgoing | 
					
						
							|  |  |  | 	 * call is answered by the remote party. | 
					
						
							|  |  |  | 	 * \note Set from the "answeronpolarityswitch" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int answeronpolarityswitch:1; | 
					
						
							| 
									
										
										
										
											2021-06-19 21:36:34 -07:00
										 |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief INTEGER, number of ANI INFO digits on a CAMA trunk. | 
					
						
							|  |  |  | 	 * older switches use 1 INFO digit, newer switches use 2 INFO digits | 
					
						
							|  |  |  | 	 * \note Set from the "ani_info_digits" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int ani_info_digits:8; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief INTEGER, length of ANI failure timeout in ms. | 
					
						
							|  |  |  | 	 * \note Set from the "ani_timeout" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int ani_timeout:16; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief INTEGER, length of time to wait before sending ANI wink in ms. | 
					
						
							|  |  |  | 	 * \note Set from the "ani_wink_time" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int ani_wink_time:16; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if busy detection is enabled. | 
					
						
							|  |  |  | 	 * (Listens for the beep-beep busy pattern.) | 
					
						
							|  |  |  | 	 * \note Set from the "busydetect" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int busydetect:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if call return is enabled. | 
					
						
							|  |  |  | 	 * (*69, if your dialplan doesn't catch this first) | 
					
						
							|  |  |  | 	 * \note Set from the "callreturn" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int callreturn:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if busy extensions will hear the call-waiting tone | 
					
						
							|  |  |  | 	 * and can use hook-flash to switch between callers. | 
					
						
							|  |  |  | 	 * \note Can be disabled by dialing *70. | 
					
						
							|  |  |  | 	 * \note Initialized with the "callwaiting" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int callwaiting:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if send caller ID for Call Waiting | 
					
						
							|  |  |  | 	 * \note Set from the "callwaitingcallerid" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int callwaitingcallerid:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if support for call forwarding enabled. | 
					
						
							|  |  |  | 	 * Dial *72 to enable call forwarding. | 
					
						
							|  |  |  | 	 * Dial *73 to disable call forwarding. | 
					
						
							|  |  |  | 	 * \note Set from the "cancallforward" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int cancallforward:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if support for call parking is enabled. | 
					
						
							|  |  |  | 	 * \note Set from the "canpark" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int canpark:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if to wait for a DTMF digit to confirm answer */ | 
					
						
							|  |  |  | 	unsigned int confirmanswer:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the channel is to be destroyed on hangup. | 
					
						
							|  |  |  | 	 * (Used by pseudo channels.) | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int destroy:1; | 
					
						
							|  |  |  | 	unsigned int didtdd:1;				/*!< flag to say its done it once */ | 
					
						
							|  |  |  | 	/*! \brief TRUE if analog type line dialed no digits in Dial() */ | 
					
						
							|  |  |  | 	unsigned int dialednone:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if in the process of dialing digits or sending something. | 
					
						
							|  |  |  | 	 * \note This is used as a receive squelch for ISDN until connected. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int dialing:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if the transfer capability of the call is digital. */ | 
					
						
							|  |  |  | 	unsigned int digital:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if Do-Not-Disturb is enabled, present only for non sig_analog */ | 
					
						
							|  |  |  | 	unsigned int dnd:1; | 
					
						
							|  |  |  | 	/*! \brief XXX BOOLEAN Purpose??? */ | 
					
						
							|  |  |  | 	unsigned int echobreak:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if echo cancellation enabled when bridged. | 
					
						
							|  |  |  | 	 * \note Initialized with the "echocancelwhenbridged" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 * \note Disabled if the echo canceller is not setup. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int echocanbridged:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if echo cancellation is turned on. */ | 
					
						
							|  |  |  | 	unsigned int echocanon:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if a fax tone has already been handled. */ | 
					
						
							|  |  |  | 	unsigned int faxhandled:1; | 
					
						
							|  |  |  | 	/*! TRUE if dynamic faxbuffers are configured for use, default is OFF */ | 
					
						
							|  |  |  | 	unsigned int usefaxbuffers:1; | 
					
						
							|  |  |  | 	/*! TRUE while buffer configuration override is in use */ | 
					
						
							|  |  |  | 	unsigned int bufferoverrideinuse:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if over a radio and dahdi_read() has been called. */ | 
					
						
							|  |  |  | 	unsigned int firstradio:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the call will be considered "hung up" on a polarity reversal. | 
					
						
							|  |  |  | 	 * \note Set from the "hanguponpolarityswitch" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int hanguponpolarityswitch:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if DTMF detection needs to be done by hardware. */ | 
					
						
							|  |  |  | 	unsigned int hardwaredtmf:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the outgoing caller ID is blocked/hidden. | 
					
						
							|  |  |  | 	 * \note Caller ID can be disabled by dialing *67. | 
					
						
							|  |  |  | 	 * \note Caller ID can be enabled by dialing *82. | 
					
						
							|  |  |  | 	 * \note Initialized with the "hidecallerid" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int hidecallerid:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if hide just the name not the number for legacy PBX use. | 
					
						
							|  |  |  | 	 * \note Only applies to PRI channels. | 
					
						
							|  |  |  | 	 * \note Set from the "hidecalleridname" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int hidecalleridname:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if DTMF detection is disabled. */ | 
					
						
							|  |  |  | 	unsigned int ignoredtmf:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the channel should be answered immediately | 
					
						
							|  |  |  | 	 * without attempting to gather any digits. | 
					
						
							|  |  |  | 	 * \note Set from the "immediate" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int immediate:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if in an alarm condition. */ | 
					
						
							|  |  |  | 	unsigned int inalarm:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if TDD in MATE mode */ | 
					
						
							|  |  |  | 	unsigned int mate:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if we originated the call leg. */ | 
					
						
							|  |  |  | 	unsigned int outgoing:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if busy extensions will hear the call-waiting tone | 
					
						
							|  |  |  | 	 * and can use hook-flash to switch between callers. | 
					
						
							|  |  |  | 	 * \note Set from the "callwaiting" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int permcallwaiting:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the outgoing caller ID is blocked/restricted/hidden. | 
					
						
							|  |  |  | 	 * \note Set from the "hidecallerid" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int permhidecallerid:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if PRI congestion/busy indications are sent out-of-band. | 
					
						
							|  |  |  | 	 * \note Set from the "priindication" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int priindication_oob:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if PRI B channels are always exclusively selected. | 
					
						
							|  |  |  | 	 * \note Set from the "priexclusive" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int priexclusive:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if we will pulse dial. | 
					
						
							|  |  |  | 	 * \note Set from the "pulsedial" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int pulse:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if a pulsed digit was detected. (Pulse dial phone detected) */ | 
					
						
							|  |  |  | 	unsigned int pulsedial:1; | 
					
						
							|  |  |  | 	unsigned int restartpending:1;		/*!< flag to ensure counted only once for restart */ | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if caller ID is restricted. | 
					
						
							|  |  |  | 	 * \note Set but not used.  Should be deleted.  Redundant with permhidecallerid. | 
					
						
							|  |  |  | 	 * \note Set from the "restrictcid" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int restrictcid:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if three way calling is enabled | 
					
						
							|  |  |  | 	 * \note Set from the "threewaycalling" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int threewaycalling:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if call transfer is enabled | 
					
						
							|  |  |  | 	 * \note For FXS ports (either direct analog or over T1/E1): | 
					
						
							|  |  |  | 	 *   Support flash-hook call transfer | 
					
						
							|  |  |  | 	 * \note For digital ports using ISDN PRI protocols: | 
					
						
							|  |  |  | 	 *   Support switch-side transfer (called 2BCT, RLT or other names) | 
					
						
							|  |  |  | 	 * \note Set from the "transfer" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int transfer:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if caller ID is used on this channel. | 
					
						
							|  |  |  | 	 * \note PRI and SS7 spans will save caller ID from the networking peer. | 
					
						
							|  |  |  | 	 * \note FXS ports will generate the caller ID spill. | 
					
						
							|  |  |  | 	 * \note FXO ports will listen for the caller ID spill. | 
					
						
							|  |  |  | 	 * \note Set from the "usecallerid" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int use_callerid:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if we will use the calling presentation setting | 
					
						
							|  |  |  | 	 * from the Asterisk channel for outgoing calls. | 
					
						
							|  |  |  | 	 * \note Only applies to PRI and SS7 channels. | 
					
						
							|  |  |  | 	 * \note Set from the "usecallingpres" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int use_callingpres:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if distinctive rings are to be detected. | 
					
						
							|  |  |  | 	 * \note For FXO lines | 
					
						
							|  |  |  | 	 * \note Set indirectly from the "usedistinctiveringdetection" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int usedistinctiveringdetection:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if we should use the callerid from incoming call on dahdi transfer. | 
					
						
							|  |  |  | 	 * \note Set from the "useincomingcalleridondahditransfer" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int dahditrcallerid:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if allowed to flash-transfer to busy channels. | 
					
						
							|  |  |  | 	 * \note Set from the "transfertobusy" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int transfertobusy:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the FXO port monitors for neon type MWI indications from the other end. | 
					
						
							|  |  |  | 	 * \note Set if the "mwimonitor" value read in contains "neon" from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int mwimonitor_neon:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the FXO port monitors for fsk type MWI indications from the other end. | 
					
						
							|  |  |  | 	 * \note Set if the "mwimonitor" value read in contains "fsk" from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int mwimonitor_fsk:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the FXO port monitors for rpas precursor to fsk MWI indications from the other end. | 
					
						
							|  |  |  | 	 * \note RPAS - Ring Pulse Alert Signal | 
					
						
							|  |  |  | 	 * \note Set if the "mwimonitor" value read in contains "rpas" from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int mwimonitor_rpas:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if an MWI monitor thread is currently active */ | 
					
						
							|  |  |  | 	unsigned int mwimonitoractive:1; | 
					
						
							|  |  |  | 	/*! \brief TRUE if a MWI message sending thread is active */ | 
					
						
							|  |  |  | 	unsigned int mwisendactive:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if channel is out of reset and ready | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	 * \note Used by SS7.  Otherwise set but not used. | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int inservice:1; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	 * \brief Bitmask for the channel being locally blocked. | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	 * \note Applies to SS7 and MFCR2 channels. | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	 * \note For MFCR2 only the first bit is used - TRUE if blocked | 
					
						
							|  |  |  | 	 * \note For SS7 two bits are used | 
					
						
							|  |  |  | 	 * \note Bit 0 - TRUE if maintenance blocked | 
					
						
							|  |  |  | 	 * \note Bit 1 - TRUE if hardware blocked | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	unsigned int locallyblocked:2; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	/*!
 | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	 * \brief Bitmask for the channel being remotely blocked. 1 maintenance, 2 blocked in hardware. | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	 * \note Applies to SS7 and MFCR2 channels. | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	 * \note For MFCR2 only the first bit is used - TRUE if blocked | 
					
						
							|  |  |  | 	 * \note For SS7 two bits are used | 
					
						
							|  |  |  | 	 * \note Bit 0 - TRUE if maintenance blocked | 
					
						
							|  |  |  | 	 * \note Bit 1 - TRUE if hardware blocked | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2014-06-16 18:27:51 +00:00
										 |  |  | 	unsigned int remotelyblocked:2; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if the channel alarms will be managed also as Span ones | 
					
						
							|  |  |  | 	 * \note Applies to all channels | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int manages_span_alarms:1; | 
					
						
							| 
									
										
										
										
											2013-10-14 22:52:42 +00:00
										 |  |  | 	/*! \brief TRUE if hardware Rx gain set by Asterisk */ | 
					
						
							|  |  |  | 	unsigned int hwrxgain_enabled; | 
					
						
							|  |  |  | 	/*! \brief TRUE if hardware Tx gain set by Asterisk */ | 
					
						
							|  |  |  | 	unsigned int hwtxgain_enabled; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #if defined(HAVE_PRI)
 | 
					
						
							|  |  |  | 	struct sig_pri_span *pri; | 
					
						
							|  |  |  | 	int logicalspan; | 
					
						
							|  |  |  | #endif	/* defined(HAVE_PRI) */
 | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if SMDI (Simplified Message Desk Interface) is enabled | 
					
						
							|  |  |  | 	 * \note Set from the "usesmdi" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int use_smdi:1; | 
					
						
							|  |  |  | 	struct mwisend_info mwisend_data; | 
					
						
							|  |  |  | 	/*! \brief The SMDI interface to get SMDI messages from. */ | 
					
						
							|  |  |  | 	struct ast_smdi_interface *smdi_iface; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief Distinctive Ring data */ | 
					
						
							|  |  |  | 	struct dahdi_distRings drings; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief The configured context for incoming calls. | 
					
						
							|  |  |  | 	 * \note The "context" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char context[AST_MAX_CONTEXT]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief A description for the channel configuration | 
					
						
							|  |  |  | 	 * \note The "description" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char description[32]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							| 
									
										
										
										
											2015-03-06 20:24:58 +00:00
										 |  |  | 	 * \brief Default distinctive ring context. | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	 */ | 
					
						
							|  |  |  | 	char defcontext[AST_MAX_CONTEXT]; | 
					
						
							|  |  |  | 	/*! \brief Extension to use in the dialplan. */ | 
					
						
							|  |  |  | 	char exten[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Language configured for calls. | 
					
						
							|  |  |  | 	 * \note The "language" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char language[MAX_LANGUAGE]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief The configured music-on-hold class to use for calls. | 
					
						
							|  |  |  | 	 * \note The "musicclass" or "mohinterpret" or "musiconhold" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char mohinterpret[MAX_MUSICCLASS]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Suggested music-on-hold class for peer channel to use for calls. | 
					
						
							|  |  |  | 	 * \note The "mohsuggest" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char mohsuggest[MAX_MUSICCLASS]; | 
					
						
							|  |  |  | 	char parkinglot[AST_MAX_EXTENSION]; /*!< Parking lot for this channel */ | 
					
						
							|  |  |  | #if defined(HAVE_PRI) || defined(HAVE_SS7)
 | 
					
						
							|  |  |  | 	/*! \brief Automatic Number Identification number (Alternate PRI caller ID number) */ | 
					
						
							|  |  |  | 	char cid_ani[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | #endif	/* defined(HAVE_PRI) || defined(HAVE_SS7) */
 | 
					
						
							|  |  |  | 	/*! \brief Automatic Number Identification code from PRI */ | 
					
						
							|  |  |  | 	int cid_ani2; | 
					
						
							|  |  |  | 	/*! \brief Caller ID number from an incoming call. */ | 
					
						
							|  |  |  | 	char cid_num[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Caller ID tag from incoming call | 
					
						
							|  |  |  | 	 * \note the "cid_tag" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char cid_tag[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*! \brief Caller ID Q.931 TON/NPI field values.  Set by PRI. Zero otherwise. */ | 
					
						
							|  |  |  | 	int cid_ton; | 
					
						
							|  |  |  | 	/*! \brief Caller ID name from an incoming call. */ | 
					
						
							|  |  |  | 	char cid_name[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*! \brief Caller ID subaddress from an incoming call. */ | 
					
						
							|  |  |  | 	char cid_subaddr[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	char *origcid_num;				/*!< malloced original callerid */ | 
					
						
							|  |  |  | 	char *origcid_name;				/*!< malloced original callerid */ | 
					
						
							|  |  |  | 	/*! \brief Call waiting number. */ | 
					
						
							|  |  |  | 	char callwait_num[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*! \brief Call waiting name. */ | 
					
						
							|  |  |  | 	char callwait_name[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*! \brief Redirecting Directory Number Information Service (RDNIS) number */ | 
					
						
							|  |  |  | 	char rdnis[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*! \brief Dialed Number Identifier */ | 
					
						
							|  |  |  | 	char dnid[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Bitmapped groups this belongs to. | 
					
						
							|  |  |  | 	 * \note The "group" bitmapped group string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	ast_group_t group; | 
					
						
							|  |  |  | 	/*! \brief Default call PCM encoding format: DAHDI_LAW_ALAW or DAHDI_LAW_MULAW. */ | 
					
						
							|  |  |  | 	int law_default; | 
					
						
							|  |  |  | 	/*! \brief Active PCM encoding format: DAHDI_LAW_ALAW or DAHDI_LAW_MULAW */ | 
					
						
							|  |  |  | 	int law; | 
					
						
							|  |  |  | 	int confno;					/*!< Our conference */ | 
					
						
							|  |  |  | 	int confusers;					/*!< Who is using our conference */ | 
					
						
							|  |  |  | 	int propconfno;					/*!< Propagated conference number */ | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Bitmapped call groups this belongs to. | 
					
						
							|  |  |  | 	 * \note The "callgroup" bitmapped group string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	ast_group_t callgroup; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Bitmapped pickup groups this belongs to. | 
					
						
							|  |  |  | 	 * \note The "pickupgroup" bitmapped group string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	ast_group_t pickupgroup; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Named call groups this belongs to. | 
					
						
							|  |  |  | 	 * \note The "namedcallgroup" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	struct ast_namedgroups *named_callgroups; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Named pickup groups this belongs to. | 
					
						
							|  |  |  | 	 * \note The "namedpickupgroup" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	struct ast_namedgroups *named_pickupgroups; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Channel variable list with associated values to set when a channel is created. | 
					
						
							|  |  |  | 	 * \note The "setvar" strings read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	struct ast_variable *vars; | 
					
						
							|  |  |  | 	int channel;					/*!< Channel Number */ | 
					
						
							|  |  |  | 	int span;					/*!< Span number */ | 
					
						
							|  |  |  | 	time_t guardtime;				/*!< Must wait this much time before using for new call */ | 
					
						
							|  |  |  | 	int cid_signalling;				/*!< CID signalling type bell202 or v23 */ | 
					
						
							|  |  |  | 	int cid_start;					/*!< CID start indicator, polarity or ring or DTMF without warning event */ | 
					
						
							|  |  |  | 	int dtmfcid_holdoff_state;		/*!< State indicator that allows for line to settle before checking for dtmf energy */ | 
					
						
							|  |  |  | 	struct timeval	dtmfcid_delay;  /*!< Time value used for allow line to settle */ | 
					
						
							|  |  |  | 	int callingpres;				/*!< The value of calling presentation that we're going to use when placing a PRI call */ | 
					
						
							|  |  |  | 	int callwaitingrepeat;				/*!< How many samples to wait before repeating call waiting */ | 
					
						
							|  |  |  | 	int cidcwexpire;				/*!< When to stop waiting for CID/CW CAS response (In samples) */ | 
					
						
							|  |  |  | 	int cid_suppress_expire;		/*!< How many samples to suppress after a CID spill. */ | 
					
						
							|  |  |  | 	/*! \brief Analog caller ID waveform sample buffer */ | 
					
						
							|  |  |  | 	unsigned char *cidspill; | 
					
						
							|  |  |  | 	/*! \brief Position in the cidspill buffer to send out next. */ | 
					
						
							|  |  |  | 	int cidpos; | 
					
						
							|  |  |  | 	/*! \brief Length of the cidspill buffer containing samples. */ | 
					
						
							|  |  |  | 	int cidlen; | 
					
						
							|  |  |  | 	/*! \brief Ring timeout timer?? */ | 
					
						
							|  |  |  | 	int ringt; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Ring timeout base. | 
					
						
							|  |  |  | 	 * \note Value computed indirectly from "ringtimeout" read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int ringt_base; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Number of most significant digits/characters to strip from the dialed number. | 
					
						
							|  |  |  | 	 * \note Feature is deprecated.  Use dialplan logic. | 
					
						
							|  |  |  | 	 * \note The characters are stripped before the PRI TON/NPI prefix | 
					
						
							|  |  |  | 	 * characters are processed. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int stripmsd; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief TRUE if Call Waiting (CW) CPE Alert Signal (CAS) is being sent. | 
					
						
							|  |  |  | 	 * \note | 
					
						
							|  |  |  | 	 * After CAS is sent, the call waiting caller id will be sent if the phone | 
					
						
							|  |  |  | 	 * gives a positive reply. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int callwaitcas; | 
					
						
							|  |  |  | 	/*! \brief Number of call waiting rings. */ | 
					
						
							|  |  |  | 	int callwaitrings; | 
					
						
							|  |  |  | 	/*! \brief Echo cancel parameters. */ | 
					
						
							|  |  |  | 	struct { | 
					
						
							|  |  |  | 		struct dahdi_echocanparams head; | 
					
						
							|  |  |  | 		struct dahdi_echocanparam params[DAHDI_MAX_ECHOCANPARAMS]; | 
					
						
							|  |  |  | 	} echocancel; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Echo training time. 0 = disabled | 
					
						
							|  |  |  | 	 * \note Set from the "echotraining" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int echotraining; | 
					
						
							|  |  |  | 	/*! \brief Filled with 'w'.  XXX Purpose?? */ | 
					
						
							|  |  |  | 	char echorest[20]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Number of times to see "busy" tone before hanging up. | 
					
						
							|  |  |  | 	 * \note Set from the "busycount" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int busycount; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Busy cadence pattern description. | 
					
						
							|  |  |  | 	 * \note Set from the "busypattern" value read from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	struct ast_dsp_busy_pattern busy_cadence; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Bitmapped call progress detection flags. CALLPROGRESS_xxx values. | 
					
						
							|  |  |  | 	 * \note Bits set from the "callprogress" and "faxdetect" values read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int callprogress; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Number of milliseconds to wait for dialtone. | 
					
						
							|  |  |  | 	 * \note Set from the "waitfordialtone" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int waitfordialtone; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Number of frames to watch for dialtone in incoming calls | 
					
						
							|  |  |  | 	 * \note Set from the "dialtone_detect" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int dialtone_detect; | 
					
						
							|  |  |  | 	int dialtone_scanning_time_elapsed;	/*!< Amount of audio scanned for dialtone, in frames */ | 
					
						
							| 
									
										
										
										
											2016-07-18 16:16:56 -05:00
										 |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief The number of seconds into call to disable fax detection.  (0 = disabled) | 
					
						
							|  |  |  | 	 * \note Set from the "faxdetect_timeout" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	unsigned int faxdetect_timeout; | 
					
						
							| 
									
										
										
										
											2018-03-21 14:30:18 +02:00
										 |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Time (ms) to detect first digit (in an analog phone) | 
					
						
							|  |  |  | 	 * \note Set from the "firstdigit_timeout" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int firstdigit_timeout; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Time (ms) to detect following digits (in an analog phone) | 
					
						
							|  |  |  | 	 * \note Set from the "interdigit_timeout" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int interdigit_timeout; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Time (ms) to wait, in case of ambiguous match (in an analog phone) | 
					
						
							|  |  |  | 	 * \note Set from the "matchdigit_timeout" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int matchdigit_timeout; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	struct timeval waitingfordt;			/*!< Time we started waiting for dialtone */ | 
					
						
							|  |  |  | 	struct timeval flashtime;			/*!< Last flash-hook time */ | 
					
						
							|  |  |  | 	/*! \brief Opaque DSP configuration structure. */ | 
					
						
							|  |  |  | 	struct ast_dsp *dsp; | 
					
						
							|  |  |  | 	/*! \brief DAHDI dial operation command struct for ioctl() call. */ | 
					
						
							|  |  |  | 	struct dahdi_dialoperation dop; | 
					
						
							|  |  |  | 	int whichwink;					/*!< SIG_FEATDMF_TA Which wink are we on? */ | 
					
						
							|  |  |  | 	/*! \brief Second part of SIG_FEATDMF_TA wink operation. */ | 
					
						
							|  |  |  | 	char finaldial[64]; | 
					
						
							|  |  |  | 	char accountcode[AST_MAX_ACCOUNT_CODE];		/*!< Account code */ | 
					
						
							|  |  |  | 	int amaflags;					/*!< AMA Flags */ | 
					
						
							|  |  |  | 	struct tdd_state *tdd;				/*!< TDD flag */ | 
					
						
							|  |  |  | 	/*! \brief Accumulated call forwarding number. */ | 
					
						
							|  |  |  | 	char call_forward[AST_MAX_EXTENSION]; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Voice mailbox location. | 
					
						
							|  |  |  | 	 * \note Set from the "mailbox" string read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2013-12-19 16:52:43 +00:00
										 |  |  | 	char mailbox[AST_MAX_MAILBOX_UNIQUEID]; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	/*! \brief Opaque event subscription parameters for message waiting indication support. */ | 
					
						
							| 
									
										
										
										
											2019-06-12 13:11:42 -05:00
										 |  |  | 	struct ast_mwi_subscriber *mwi_event_sub; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 	/*! \brief Delayed dialing for E911.  Overlap digits for ISDN. */ | 
					
						
							|  |  |  | 	char dialdest[256]; | 
					
						
							|  |  |  | #ifdef HAVE_DAHDI_LINEREVERSE_VMWI
 | 
					
						
							|  |  |  | 	struct dahdi_vmwi_info mwisend_setting;				/*!< Which VMWI methods to use */ | 
					
						
							|  |  |  | 	unsigned int mwisend_fsk: 1;		/*! Variable for enabling FSK MWI handling in chan_dahdi */ | 
					
						
							|  |  |  | 	unsigned int mwisend_rpas:1;		/*! Variable for enabling Ring Pulse Alert before MWI FSK Spill */ | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	int distinctivering;				/*!< Which distinctivering to use */ | 
					
						
							|  |  |  | 	int dtmfrelax;					/*!< whether to run in relaxed DTMF mode */ | 
					
						
							|  |  |  | 	/*! \brief Holding place for event injected from outside normal operation. */ | 
					
						
							|  |  |  | 	int fake_event; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Minimal time period (ms) between the answer polarity | 
					
						
							|  |  |  | 	 * switch and hangup polarity switch. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int polarityonanswerdelay; | 
					
						
							|  |  |  | 	/*! \brief Start delay time if polarityonanswerdelay is nonzero. */ | 
					
						
							|  |  |  | 	struct timeval polaritydelaytv; | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Send caller ID on FXS after this many rings. Set to 1 for US. | 
					
						
							|  |  |  | 	 * \note Set from the "sendcalleridafter" value read in from chan_dahdi.conf | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	int sendcalleridafter; | 
					
						
							|  |  |  | 	/*! \brief Current line interface polarity. POLARITY_IDLE, POLARITY_REV */ | 
					
						
							|  |  |  | 	int polarity; | 
					
						
							|  |  |  | 	/*! \brief DSP feature flags: DSP_FEATURE_xxx */ | 
					
						
							|  |  |  | 	int dsp_features; | 
					
						
							|  |  |  | #if defined(HAVE_SS7)
 | 
					
						
							|  |  |  | 	/*! \brief SS7 control parameters */ | 
					
						
							|  |  |  | 	struct sig_ss7_linkset *ss7; | 
					
						
							|  |  |  | #endif	/* defined(HAVE_SS7) */
 | 
					
						
							|  |  |  | #if defined(HAVE_OPENR2)
 | 
					
						
							|  |  |  | 	struct dahdi_mfcr2 *mfcr2; | 
					
						
							|  |  |  | 	openr2_chan_t *r2chan; | 
					
						
							|  |  |  | 	openr2_calling_party_category_t mfcr2_recvd_category; | 
					
						
							|  |  |  | 	openr2_calling_party_category_t mfcr2_category; | 
					
						
							|  |  |  | 	int mfcr2_dnis_index; | 
					
						
							|  |  |  | 	int mfcr2_ani_index; | 
					
						
							| 
									
										
										
										
											2019-10-23 12:36:17 -05:00
										 |  |  | 	unsigned int mfcr2call:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_answer_pending:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_charge_calls:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_allow_collect_calls:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_forced_release:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_dnis_matched:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_call_accepted:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_accept_on_offer:1; | 
					
						
							|  |  |  | 	unsigned int mfcr2_progress_sent:1; | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | #endif	/* defined(HAVE_OPENR2) */
 | 
					
						
							|  |  |  | 	/*! \brief DTMF digit in progress.  0 when no digit in progress. */ | 
					
						
							|  |  |  | 	char begindigit; | 
					
						
							|  |  |  | 	/*! \brief TRUE if confrence is muted. */ | 
					
						
							|  |  |  | 	int muting; | 
					
						
							|  |  |  | 	void *sig_pvt; | 
					
						
							|  |  |  | 	struct ast_cc_config_params *cc_params; | 
					
						
							|  |  |  | 	/* DAHDI channel names may differ greatly from the
 | 
					
						
							|  |  |  | 	 * string that was provided to an app such as Dial. We | 
					
						
							|  |  |  | 	 * need to save the original string passed to dahdi_request | 
					
						
							|  |  |  | 	 * for call completion purposes. This way, we can replicate | 
					
						
							|  |  |  | 	 * the original dialed string later. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char dialstring[AST_CHANNEL_NAME]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Analog signaling */ | 
					
						
							|  |  |  | #define SIG_EM          DAHDI_SIG_EM
 | 
					
						
							|  |  |  | #define SIG_EMWINK      (0x0100000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FEATD       (0x0200000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FEATDMF     (0x0400000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FEATB       (0x0800000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_E911        (0x1000000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FEATDMF_TA  (0x2000000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FGC_CAMA    (0x4000000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FGC_CAMAMF  (0x8000000 | DAHDI_SIG_EM)
 | 
					
						
							|  |  |  | #define SIG_FXSLS       DAHDI_SIG_FXSLS
 | 
					
						
							|  |  |  | #define SIG_FXSGS       DAHDI_SIG_FXSGS
 | 
					
						
							|  |  |  | #define SIG_FXSKS       DAHDI_SIG_FXSKS
 | 
					
						
							|  |  |  | #define SIG_FXOLS       DAHDI_SIG_FXOLS
 | 
					
						
							|  |  |  | #define SIG_FXOGS       DAHDI_SIG_FXOGS
 | 
					
						
							|  |  |  | #define SIG_FXOKS       DAHDI_SIG_FXOKS
 | 
					
						
							|  |  |  | #define SIG_SF          DAHDI_SIG_SF
 | 
					
						
							|  |  |  | #define SIG_SFWINK      (0x0100000 | DAHDI_SIG_SF)
 | 
					
						
							|  |  |  | #define SIG_SF_FEATD    (0x0200000 | DAHDI_SIG_SF)
 | 
					
						
							|  |  |  | #define SIG_SF_FEATDMF  (0x0400000 | DAHDI_SIG_SF)
 | 
					
						
							|  |  |  | #define SIG_SF_FEATB    (0x0800000 | DAHDI_SIG_SF)
 | 
					
						
							|  |  |  | #define SIG_EM_E1       DAHDI_SIG_EM_E1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* PRI signaling */ | 
					
						
							|  |  |  | #define SIG_PRI         DAHDI_SIG_CLEAR
 | 
					
						
							|  |  |  | #define SIG_BRI         (0x2000000 | DAHDI_SIG_CLEAR)
 | 
					
						
							|  |  |  | #define SIG_BRI_PTMP    (0X4000000 | DAHDI_SIG_CLEAR)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* SS7 signaling */ | 
					
						
							|  |  |  | #define SIG_SS7         (0x1000000 | DAHDI_SIG_CLEAR)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* MFC/R2 signaling */ | 
					
						
							|  |  |  | #define SIG_MFCR2       DAHDI_SIG_CAS
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SIG_PRI_LIB_HANDLE_CASES	\
 | 
					
						
							|  |  |  | 	SIG_PRI:						\ | 
					
						
							|  |  |  | 	case SIG_BRI:					\ | 
					
						
							|  |  |  | 	case SIG_BRI_PTMP | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \internal | 
					
						
							|  |  |  |  * \brief Determine if sig_pri handles the signaling. | 
					
						
							|  |  |  |  * \since 1.8 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param signaling Signaling to determine if is for sig_pri. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return TRUE if the signaling is for sig_pri. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline int dahdi_sig_pri_lib_handles(int signaling) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int handles; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (signaling) { | 
					
						
							|  |  |  | 	case SIG_PRI_LIB_HANDLE_CASES: | 
					
						
							|  |  |  | 		handles = 1; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		handles = 0; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return handles; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-23 16:26:36 +00:00
										 |  |  | static inline int dahdi_analog_lib_handles(int signalling, int radio, int oprmode) | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	switch (signalling) { | 
					
						
							|  |  |  | 	case SIG_FXOLS: | 
					
						
							|  |  |  | 	case SIG_FXOGS: | 
					
						
							|  |  |  | 	case SIG_FXOKS: | 
					
						
							|  |  |  | 	case SIG_FXSLS: | 
					
						
							|  |  |  | 	case SIG_FXSGS: | 
					
						
							|  |  |  | 	case SIG_FXSKS: | 
					
						
							|  |  |  | 	case SIG_EMWINK: | 
					
						
							|  |  |  | 	case SIG_EM: | 
					
						
							|  |  |  | 	case SIG_EM_E1: | 
					
						
							|  |  |  | 	case SIG_FEATD: | 
					
						
							|  |  |  | 	case SIG_FEATDMF: | 
					
						
							|  |  |  | 	case SIG_E911: | 
					
						
							|  |  |  | 	case SIG_FGC_CAMA: | 
					
						
							|  |  |  | 	case SIG_FGC_CAMAMF: | 
					
						
							|  |  |  | 	case SIG_FEATB: | 
					
						
							|  |  |  | 	case SIG_SFWINK: | 
					
						
							|  |  |  | 	case SIG_SF: | 
					
						
							|  |  |  | 	case SIG_SF_FEATD: | 
					
						
							|  |  |  | 	case SIG_SF_FEATDMF: | 
					
						
							|  |  |  | 	case SIG_FEATDMF_TA: | 
					
						
							|  |  |  | 	case SIG_SF_FEATB: | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		/* The rest of the function should cover the remainder of signalling types */ | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (radio) { | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (oprmode) { | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return 1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define dahdi_get_index(ast, p, nullok)	_dahdi_get_index(ast, p, nullok, __PRETTY_FUNCTION__, __LINE__)
 | 
					
						
							|  |  |  | int _dahdi_get_index(struct ast_channel *ast, struct dahdi_pvt *p, int nullok, const char *fname, unsigned long line); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-23 16:26:36 +00:00
										 |  |  | void dahdi_dtmf_detect_disable(struct dahdi_pvt *p); | 
					
						
							|  |  |  | void dahdi_dtmf_detect_enable(struct dahdi_pvt *p); | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-23 16:26:36 +00:00
										 |  |  | void dahdi_ec_enable(struct dahdi_pvt *p); | 
					
						
							|  |  |  | void dahdi_ec_disable(struct dahdi_pvt *p); | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-23 16:26:36 +00:00
										 |  |  | void dahdi_conf_update(struct dahdi_pvt *p); | 
					
						
							|  |  |  | void dahdi_master_slave_link(struct dahdi_pvt *slave, struct dahdi_pvt *master); | 
					
						
							|  |  |  | void dahdi_master_slave_unlink(struct dahdi_pvt *slave, struct dahdi_pvt *master, int needlock); | 
					
						
							| 
									
										
										
										
											2013-07-23 15:59:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(__cplusplus) || defined(c_plusplus)
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif	/* _ASTERISK_CHAN_DAHDI_H */
 |