mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			210 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			210 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Asterisk -- An open source telephony toolkit.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2024, Sangoma Technologies Corporation
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * George Joseph <gjoseph@sangoma.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.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef CHANNEL_PRIVATE_H_
							 | 
						||
| 
								 | 
							
								#define CHANNEL_PRIVATE_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__cplusplus) || defined(c_plusplus)
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*!
							 | 
						||
| 
								 | 
							
								 * \brief Channel UniqueId structure
							 | 
						||
| 
								 | 
							
								 * \note channel creation time used for determining LinkedId Propagation
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								struct ast_channel_id {
							 | 
						||
| 
								 | 
							
									time_t creation_time;				/*!< Creation time */
							 | 
						||
| 
								 | 
							
									int creation_unique;				/*!< sub-second unique value */
							 | 
						||
| 
								 | 
							
									char unique_id[AST_MAX_UNIQUEID];	/*!< Unique Identifier */
							 | 
						||
| 
								 | 
							
									char tenant_id[AST_MAX_TENANT_ID];	/*!< Multi-tenant identifier */
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*!
							 | 
						||
| 
								 | 
							
								 * \brief Main Channel structure associated with a channel.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * \note When adding fields to this structure, it is important to add the field
							 | 
						||
| 
								 | 
							
								 *       'in position' with like-aligned fields, so as to keep the compiler from
							 | 
						||
| 
								 | 
							
								 *       having to add padding to align fields. The structure's fields are sorted
							 | 
						||
| 
								 | 
							
								 *       in this order: pointers, structures, long, int/enum, short, char. This
							 | 
						||
| 
								 | 
							
								 *       is especially important on 64-bit architectures, where mixing 4-byte
							 | 
						||
| 
								 | 
							
								 *       and 8-byte fields causes 4 bytes of padding to be added before many
							 | 
						||
| 
								 | 
							
								 *       8-byte fields.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								struct ast_channel {
							 | 
						||
| 
								 | 
							
									const struct ast_channel_tech *tech;		/*!< Technology (point to channel driver) */
							 | 
						||
| 
								 | 
							
									void *tech_pvt;					/*!< Private data used by the technology driver */
							 | 
						||
| 
								 | 
							
									void *music_state;				/*!< Music State*/
							 | 
						||
| 
								 | 
							
									void *generatordata;				/*!< Current generator data if there is any */
							 | 
						||
| 
								 | 
							
									struct ast_generator *generator;		/*!< Current active data generator */
							 | 
						||
| 
								 | 
							
									struct ast_channel *masq;			/*!< Channel that will masquerade as us */
							 | 
						||
| 
								 | 
							
									struct ast_channel *masqr;			/*!< Who we are masquerading as */
							 | 
						||
| 
								 | 
							
									const char *blockproc;				/*!< Procedure causing blocking */
							 | 
						||
| 
								 | 
							
									const char *appl;				/*!< Current application */
							 | 
						||
| 
								 | 
							
									const char *data;				/*!< Data passed to current application */
							 | 
						||
| 
								 | 
							
									struct ast_sched_context *sched;                /*!< Schedule context */
							 | 
						||
| 
								 | 
							
									struct ast_filestream *stream;			/*!< Stream itself. */
							 | 
						||
| 
								 | 
							
									struct ast_filestream *vstream;			/*!< Video Stream itself. */
							 | 
						||
| 
								 | 
							
									ast_timing_func_t timingfunc;
							 | 
						||
| 
								 | 
							
									void *timingdata;
							 | 
						||
| 
								 | 
							
									struct ast_pbx *pbx;				/*!< PBX private structure for this channel */
							 | 
						||
| 
								 | 
							
									struct ast_trans_pvt *writetrans;		/*!< Write translation path */
							 | 
						||
| 
								 | 
							
									struct ast_trans_pvt *readtrans;		/*!< Read translation path */
							 | 
						||
| 
								 | 
							
									struct ast_audiohook_list *audiohooks;
							 | 
						||
| 
								 | 
							
									struct ast_framehook_list *framehooks;
							 | 
						||
| 
								 | 
							
									struct ast_cdr *cdr;				/*!< Call Detail Record */
							 | 
						||
| 
								 | 
							
									struct ast_tone_zone *zone;			/*!< Tone zone as set in indications.conf or
							 | 
						||
| 
								 | 
							
															 *   in the CHANNEL dialplan function */
							 | 
						||
| 
								 | 
							
									struct ast_channel_monitor *monitor;		/*!< Channel monitoring */
							 | 
						||
| 
								 | 
							
									ast_callid callid;			/*!< Bound call identifier pointer */
							 | 
						||
| 
								 | 
							
									struct ao2_container *dialed_causes;		/*!< Contains tech-specific and Asterisk cause data from dialed channels */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									AST_DECLARE_STRING_FIELDS(
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(name);         /*!< ASCII unique channel name */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(language);     /*!< Language requested for voice prompts */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(musicclass);   /*!< Default music class */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(latest_musicclass);   /*!< Latest active music class */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(accountcode);  /*!< Account code for billing */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(peeraccount);  /*!< Peer account code for billing */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(userfield);    /*!< Userfield for CEL billing */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(call_forward); /*!< Where to forward to if asked to dial on this interface */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(parkinglot);   /*! Default parking lot, if empty, default parking lot  */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(hangupsource); /*! Who is responsible for hanging up this channel */
							 | 
						||
| 
								 | 
							
										AST_STRING_FIELD(dialcontext);  /*!< Dial: Extension context that we were called from */
							 | 
						||
| 
								 | 
							
									);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									struct ast_channel_id uniqueid;		/*!< Unique Channel Identifier - can be specified on creation */
							 | 
						||
| 
								 | 
							
									struct ast_channel_id linkedid;		/*!< Linked Channel Identifier - oldest propagated when bridged */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									struct timeval whentohangup; /*!< Non-zero, set to actual time when channel is to be hung up */
							 | 
						||
| 
								 | 
							
									pthread_t blocker;           /*!< If anyone is blocking, this is them */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*!
							 | 
						||
| 
								 | 
							
									 * \brief Dialed/Called information.
							 | 
						||
| 
								 | 
							
									 * \note Set on incoming channels to indicate the originally dialed party.
							 | 
						||
| 
								 | 
							
									 * \note Dialed Number Identifier (DNID)
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									struct ast_party_dialed dialed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*!
							 | 
						||
| 
								 | 
							
									 * \brief Channel Caller ID information.
							 | 
						||
| 
								 | 
							
									 * \note The caller id information is the caller id of this
							 | 
						||
| 
								 | 
							
									 * channel when it is used to initiate a call.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									struct ast_party_caller caller;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*!
							 | 
						||
| 
								 | 
							
									 * \brief Channel Connected Line ID information.
							 | 
						||
| 
								 | 
							
									 * \note The connected line information identifies the channel
							 | 
						||
| 
								 | 
							
									 * connected/bridged to this channel.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									struct ast_party_connected_line connected;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*!
							 | 
						||
| 
								 | 
							
									 * \brief Channel Connected Line ID information that was last indicated.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									struct ast_party_connected_line connected_indicated;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*! \brief Redirecting/Diversion information */
							 | 
						||
| 
								 | 
							
									struct ast_party_redirecting redirecting;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									struct ast_frame dtmff;				/*!< DTMF frame */
							 | 
						||
| 
								 | 
							
									struct varshead varshead;			/*!< A linked list for channel variables. See \ref AstChanVar */
							 | 
						||
| 
								 | 
							
									ast_group_t callgroup;				/*!< Call group for call pickups */
							 | 
						||
| 
								 | 
							
									ast_group_t pickupgroup;			/*!< Pickup group - which calls groups can be picked up? */
							 | 
						||
| 
								 | 
							
									struct ast_namedgroups *named_callgroups;	/*!< Named call group for call pickups */
							 | 
						||
| 
								 | 
							
									struct ast_namedgroups *named_pickupgroups;	/*!< Named pickup group - which call groups can be picked up? */
							 | 
						||
| 
								 | 
							
									struct timeval creationtime;			/*!< The time of channel creation */
							 | 
						||
| 
								 | 
							
									struct timeval answertime;				/*!< The time the channel was answered */
							 | 
						||
| 
								 | 
							
									struct ast_readq_list readq;
							 | 
						||
| 
								 | 
							
									struct ast_jb jb;				/*!< The jitterbuffer state */
							 | 
						||
| 
								 | 
							
									struct timeval dtmf_tv;				/*!< The time that an in process digit began, or the last digit ended */
							 | 
						||
| 
								 | 
							
									struct ast_hangup_handler_list hangup_handlers;/*!< Hangup handlers on the channel. */
							 | 
						||
| 
								 | 
							
									struct ast_datastore_list datastores; /*!< Data stores on the channel */
							 | 
						||
| 
								 | 
							
									struct ast_autochan_list autochans; /*!< Autochans on the channel */
							 | 
						||
| 
								 | 
							
									unsigned long insmpl;				/*!< Track the read/written samples for monitor use */
							 | 
						||
| 
								 | 
							
									unsigned long outsmpl;				/*!< Track the read/written samples for monitor use */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int blocker_tid;					/*!< If anyone is blocking, this is their thread id */
							 | 
						||
| 
								 | 
							
									AST_VECTOR(, int) fds;				/*!< File descriptors for channel -- Drivers will poll on
							 | 
						||
| 
								 | 
							
															 *   these file descriptors, so at least one must be non -1.
							 | 
						||
| 
								 | 
							
															 *   See \arg \ref AstFileDesc */
							 | 
						||
| 
								 | 
							
									int softhangup;				/*!< Whether or not we have been hung up...  Do not set this value
							 | 
						||
| 
								 | 
							
															 *   directly, use ast_softhangup() */
							 | 
						||
| 
								 | 
							
									int fdno;					/*!< Which fd had an event detected on */
							 | 
						||
| 
								 | 
							
									int streamid;					/*!< For streaming playback, the schedule ID */
							 | 
						||
| 
								 | 
							
									int vstreamid;					/*!< For streaming video playback, the schedule ID */
							 | 
						||
| 
								 | 
							
									struct ast_format *oldwriteformat;  /*!< Original writer format */
							 | 
						||
| 
								 | 
							
									int timingfd;					/*!< Timing fd */
							 | 
						||
| 
								 | 
							
									enum ast_channel_state state;			/*!< State of line -- Don't write directly, use ast_setstate() */
							 | 
						||
| 
								 | 
							
									int rings;					/*!< Number of rings so far */
							 | 
						||
| 
								 | 
							
									int priority;					/*!< Dialplan: Current extension priority */
							 | 
						||
| 
								 | 
							
									int amaflags;					/*!< Set BEFORE PBX is started to determine AMA flags */
							 | 
						||
| 
								 | 
							
									int macropriority;				/*!< Macro: Current non-macro priority. See app_macro.c */
							 | 
						||
| 
								 | 
							
									enum ast_channel_adsicpe adsicpe;		/*!< Whether or not ADSI is detected on CPE */
							 | 
						||
| 
								 | 
							
									unsigned int fin;				/*!< Frames in counters. The high bit is a debug mask, so
							 | 
						||
| 
								 | 
							
															 *   the counter is only in the remaining bits */
							 | 
						||
| 
								 | 
							
									unsigned int fout;				/*!< Frames out counters. The high bit is a debug mask, so
							 | 
						||
| 
								 | 
							
															 *   the counter is only in the remaining bits */
							 | 
						||
| 
								 | 
							
									int hangupcause;				/*!< Why is the channel hanged up. See causes.h */
							 | 
						||
| 
								 | 
							
									unsigned int finalized:1;       /*!< Whether or not the channel has been successfully allocated */
							 | 
						||
| 
								 | 
							
									struct ast_flags flags;				/*!< channel flags of AST_FLAG_ type */
							 | 
						||
| 
								 | 
							
									int alertpipe[2];
							 | 
						||
| 
								 | 
							
									struct ast_format_cap *nativeformats;         /*!< Kinds of data this channel can natively handle */
							 | 
						||
| 
								 | 
							
									struct ast_format *readformat;            /*!< Requested read format (after translation) */
							 | 
						||
| 
								 | 
							
									struct ast_format *writeformat;           /*!< Requested write format (before translation) */
							 | 
						||
| 
								 | 
							
									struct ast_format *rawreadformat;         /*!< Raw read format (before translation) */
							 | 
						||
| 
								 | 
							
									struct ast_format *rawwriteformat;        /*!< Raw write format (after translation) */
							 | 
						||
| 
								 | 
							
									unsigned int emulate_dtmf_duration;		/*!< Number of ms left to emulate DTMF for */
							 | 
						||
| 
								 | 
							
									int visible_indication;                         /*!< Indication currently playing on the channel */
							 | 
						||
| 
								 | 
							
									int hold_state;							/*!< Current Hold/Unhold state */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									unsigned short transfercapability;		/*!< ISDN Transfer Capability - AST_FLAG_DIGITAL is not enough */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									struct ast_bridge *bridge;                      /*!< Bridge this channel is participating in */
							 | 
						||
| 
								 | 
							
									struct ast_bridge_channel *bridge_channel;/*!< The bridge_channel this channel is linked with. */
							 | 
						||
| 
								 | 
							
									struct ast_timer *timer;			/*!< timer object that provided timingfd */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									char context[AST_MAX_CONTEXT];			/*!< Dialplan: Current extension context */
							 | 
						||
| 
								 | 
							
									char exten[AST_MAX_EXTENSION];			/*!< Dialplan: Current extension number */
							 | 
						||
| 
								 | 
							
									char lastcontext[AST_MAX_CONTEXT];		/*!< Dialplan: Previous extension context */
							 | 
						||
| 
								 | 
							
									char lastexten[AST_MAX_EXTENSION];		/*!< Dialplan: Previous extension number */
							 | 
						||
| 
								 | 
							
									char macrocontext[AST_MAX_CONTEXT];		/*!< Macro: Current non-macro context. See app_macro.c */
							 | 
						||
| 
								 | 
							
									char macroexten[AST_MAX_EXTENSION];		/*!< Macro: Current non-macro extension. See app_macro.c */
							 | 
						||
| 
								 | 
							
									char unbridged;							/*!< non-zero if the bridge core needs to re-evaluate the current
							 | 
						||
| 
								 | 
							
																			 bridging technology which is in use by this channel's bridge. */
							 | 
						||
| 
								 | 
							
									char is_t38_active;						/*!< non-zero if T.38 is active on this channel. */
							 | 
						||
| 
								 | 
							
									char dtmf_digit_to_emulate;			/*!< Digit being emulated */
							 | 
						||
| 
								 | 
							
									char sending_dtmf_digit;			/*!< Digit this channel is currently sending out. (zero if not sending) */
							 | 
						||
| 
								 | 
							
									struct timeval sending_dtmf_tv;		/*!< The time this channel started sending the current digit. (Invalid if sending_dtmf_digit is zero.) */
							 | 
						||
| 
								 | 
							
									struct stasis_topic *topic;		/*!< Topic for this channel */
							 | 
						||
| 
								 | 
							
									struct stasis_forward *channel_forward; /*!< Subscription for event forwarding to all channel topic */
							 | 
						||
| 
								 | 
							
									struct stasis_forward *endpoint_forward;	/*!< Subscription for event forwarding to endpoint's topic */
							 | 
						||
| 
								 | 
							
									struct ast_stream_topology *stream_topology; /*!< Stream topology */
							 | 
						||
| 
								 | 
							
									void *stream_topology_change_source; /*!< Source that initiated a stream topology change */
							 | 
						||
| 
								 | 
							
									struct ast_stream *default_streams[AST_MEDIA_TYPE_END]; /*!< Default streams indexed by media type */
							 | 
						||
| 
								 | 
							
									struct ast_channel_snapshot *snapshot; /*!< The current up to date snapshot of the channel */
							 | 
						||
| 
								 | 
							
									struct ast_flags snapshot_segment_flags; /*!< Flags regarding the segments of the snapshot */
							 | 
						||
| 
								 | 
							
									int linked_in_container; /*!< Whether this channel is linked in a storage container */
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__cplusplus) || defined(c_plusplus)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* CHANNEL_PRIVATE_H_ */
							 |