tmp->usedistinctiveringdetection = usedistinctiveringdetection;
tmp->callwaitingcallerid = conf->chan.callwaitingcallerid;
tmp->threewaycalling = conf->chan.threewaycalling;
+ tmp->threewaysilenthold = conf->chan.threewaysilenthold;
tmp->adsi = conf->chan.adsi;
tmp->use_smdi = conf->chan.use_smdi;
tmp->permhidecallerid = conf->chan.hidecallerid;
confp->chan.cid_start = CID_START_RING;
} else if (!strcasecmp(v->name, "threewaycalling")) {
confp->chan.threewaycalling = ast_true(v->value);
+ } else if (!strcasecmp(v->name, "threewaysilenthold")) {
+ confp->chan.threewaysilenthold = ast_true(v->value);
} else if (!strcasecmp(v->name, "cancallforward")) {
confp->chan.cancallforward = ast_true(v->value);
} else if (!strcasecmp(v->name, "relaxdtmf")) {
* \note Set from the "threewaycalling" value read in from chan_dahdi.conf
*/
unsigned int threewaycalling:1;
+ /*!
+ * \brief TRUE if a three way dial tone should time out to silence
+ * \note Set from the "threewaysilenthold" value read in from chan_dahdi.conf
+ */
+ unsigned int threewaysilenthold:1;
/*!
* \brief TRUE if call transfer is enabled
* \note For FXS ports (either direct analog or over T1/E1):
/* Read the first digit */
timeout = analog_get_firstdigit_timeout(p);
/* If starting a threeway call, never timeout on the first digit so someone
- can use flash-hook as a "hold" feature */
- if (p->subs[ANALOG_SUB_THREEWAY].owner) {
+ * can use flash-hook as a "hold" feature...
+ * ...Unless three-way dial tone should time out to silence, in which case the default suffices. */
+ if (!p->threewaysilenthold && p->subs[ANALOG_SUB_THREEWAY].owner) {
timeout = INT_MAX;
}
while (len < AST_MAX_EXTENSION-1) {
}
} else if (res == 0) {
ast_debug(1, "not enough digits (and no ambiguous match)...\n");
- res = analog_play_tone(p, idx, ANALOG_TONE_CONGESTION);
+ if (p->threewaysilenthold) {
+ ast_debug(1, "Nothing dialed at three-way dial tone, timed out to silent hold\n");
+ } else {
+ res = analog_play_tone(p, idx, ANALOG_TONE_CONGESTION);
+ }
analog_wait_event(p);
ast_hangup(chan);
goto quit;
unsigned int permhidecallerid:1; /*!< Whether to hide our outgoing caller ID or not */
unsigned int pulse:1;
unsigned int threewaycalling:1;
+ unsigned int threewaysilenthold:1; /*!< Whether to time out a three-way dial tone to silence */
unsigned int transfer:1;
unsigned int transfertobusy:1; /*!< allow flash-transfers to busy channels */
unsigned int use_callerid:1; /*!< Whether or not to use caller id on this channel */
;
threewaycalling=yes
;
+; By default, the three-way dial tone never times out, allowing it to be
+; used as a primitive "hold" mechanism. However, if you'd prefer
+; to have the dial tone time out to silence, you can use this option
+; to time out after the normal first digit timeout to silence.
+; Default is 'no'.
+;
+;threewaysilenthold=no
+;
; For FXS ports (either direct analog or over T1/E1):
; Support flash-hook call transfer (requires three way calling)
; Also enables call parking (overrides the 'canpark' parameter)