static struct dahdi_pvt { ast_mutex_t lock; 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 buf_no; /*!< Number of buffers */ int buf_policy; /*!< 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 */ /*! \brief Rx gain set by chan_dahdi.conf */ float rxgain; /*! \brief Tx gain set by chan_dahdi.conf */ float txgain; int tonezone; /*!< tone zone for this chan, or -1 for default */ 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; /*! * \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. */ 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. */ 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; /*! \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; unsigned int unknown_alarm:1; /*! \brief TRUE if TDD in MATE mode */ unsigned int mate:1; /*! \brief TRUE if we originated the call leg. */ unsigned int outgoing:1; /* unsigned int overlapdial:1; unused and potentially confusing */ /*! * \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 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 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; #if defined(HAVE_PRI) /*! \brief TRUE if channel is alerting/ringing */ unsigned int alerting:1; /*! \brief TRUE if the call has already gone/hungup */ unsigned int alreadyhungup:1; /*! * \brief TRUE if this is an idle call * \note Applies to PRI channels. */ unsigned int isidlecall:1; /*! * \brief TRUE if call is in a proceeding state. * The call has started working its way through the network. */ unsigned int proceeding:1; /*! \brief TRUE if the call has seen progress through the network. */ unsigned int progress:1; /*! * \brief TRUE if this channel is being reset/restarted * \note Applies to PRI channels. */ unsigned int resetting:1; /*! * \brief TRUE if this channel has received a SETUP_ACKNOWLEDGE * \note Applies to PRI channels. */ unsigned int setup_ack:1; #endif /*! * \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; /*! \brief The serial port to listen for SMDI data on */ 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 Saved context string. */ 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 Sugggested 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]; #ifdef PRI_ANI /*! \brief Automatic Number Identification number (Alternate PRI caller ID number) */ char cid_ani[AST_MAX_EXTENSION]; #endif /*! \brief Caller ID number from an incoming call. */ char cid_num[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 Last Caller ID number from an incoming call. */ char lastcid_num[AST_MAX_EXTENSION]; /*! \brief Last Caller ID name from an incoming call. */ char lastcid_name[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 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; int channel; /*!< Channel Number or CRV */ 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 */ int callingpres; /*!< The value of callling 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 expire our muting for CID/CW */ /*! \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 BOOLEAN. XXX Meaning what?? */ int callwaitcas; /*! \brief Number of call waiting rings. */ int callwaitrings; /*! \brief Number of echo cancel taps. 0 if echo canceller not requested. */ int 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 Length of "busy" tone on time. * \note Set from the "busypattern" value read in from chan_dahdi.conf */ int busy_tonelength; /*! * \brief Length of "busy" tone off time. * \note Set from the "busypattern" value read in from chan_dahdi.conf */ int busy_quietlength; /*! * \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; struct timeval flashtime; /*!< Last flash-hook time */ /*! \brief Opaque DSP configuration structure. */ struct ast_dsp *dsp; //int cref; /*!< Call reference number (Not used) */ /*! \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 */ char mailbox[AST_MAX_EXTENSION]; /*! \brief Delayed dialing for E911. Overlap digits for ISDN. */ char dialdest[256]; /*! \brief Time the interface went on-hook. */ int onhooktime; /*! \brief -1 = unknown, 0 = no messages, 1 = new messages available */ int msgstate; int distinctivering; /*!< Which distinctivering to use */ int cidrings; /*!< Which ring to deliver CID on */ 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 after this many rings. * \note Set from the "sendcalleridafter" value read in from chan_dahdi.conf */ int sendcalleridafter; #ifdef HAVE_PRI /*! \brief DAHDI PRI control parameters */ struct dahdi_pri *pri; /*! \brief XXX Purpose??? */ struct dahdi_pvt *bearer; /*! \brief XXX Purpose??? */ struct dahdi_pvt *realcall; /*! \brief Opaque libpri call control structure */ q931_call *call; /*! \brief Channel number in span. */ int prioffset; /*! \brief Logical span number within trunk group */ int logicalspan; #endif /*! \brief Current line interface polarity. POLARITY_IDLE, POLARITY_REV */ int polarity; /*! \brief DSP feature flags: DSP_FEATURE_xxx */ int dsp_features; /*! \brief DTMF digit in progress. 0 when no digit in progress. */ char begindigit; } *iflist = NULL, *ifend = NULL;