diff --git a/channels/sig_analog.c b/channels/sig_analog.c index 76ee645c26f03bbf56d6a61a0d6b508cff4a595b..ccc14a89f990283d29bea1636f05aaef62e36524 100644 --- a/channels/sig_analog.c +++ b/channels/sig_analog.c @@ -3731,6 +3731,32 @@ void *analog_handle_init_event(struct analog_pvt *i, int event) /* Handle an event on a given channel for the monitor thread. */ switch (event) { case ANALOG_EVENT_WINKFLASH: + case ANALOG_EVENT_RINGBEGIN: + switch (i->sig) { + case ANALOG_SIG_FXSLS: + case ANALOG_SIG_FXSGS: + case ANALOG_SIG_FXSKS: + if (i->immediate) { + if (i->use_callerid || i->usedistinctiveringdetection) { + ast_log(LOG_WARNING, "Can't start PBX immediately, must wait for Caller ID / distinctive ring\n"); + } else { + /* If we don't care about Caller ID or Distinctive Ring, then there's + * no need to wait for anything before accepting the call, as + * waiting will buy us nothing. + * So if the channel is configured for immediate, actually start immediately + * and get the show on the road as soon as possible. */ + ast_debug(1, "Disabling ring timeout (previously %d) to begin handling immediately\n", i->ringt_base); + analog_set_ringtimeout(i, 0); + } + } + break; + default: + break; + } + /* Fall through */ + if (!(ISTRUNK(i) && i->immediate && !i->use_callerid && !i->usedistinctiveringdetection)) { + break; + } case ANALOG_EVENT_RINGOFFHOOK: if (i->inalarm) { break; diff --git a/configs/samples/chan_dahdi.conf.sample b/configs/samples/chan_dahdi.conf.sample index 6333351c0ddbab5f2af9b684964c8130e9ddba99..6b2954975091b4eca90aaf47fbb9d4d484f7ee89 100644 --- a/configs/samples/chan_dahdi.conf.sample +++ b/configs/samples/chan_dahdi.conf.sample @@ -936,8 +936,13 @@ pickupgroup=1 ; target of the transfer. ; -; Specify whether the channel should be answered immediately or if the simple -; switch should provide dialtone, read digits, etc. +; On FXS channels (FXO signaled), specifies whether the channel should enter the dialplan +; immediately or if the simple switch should provide dialtone, read digits, etc. +; On FXO channels (FXS signaled), specifies whether the call should enter the dialplan +; immediately or if we should wait for at least one ring. This is required if +; Caller ID or distinctive ringing is enabled. If you do not need either, you can +; skip waiting for the first ring to begin call processing sooner. +; ; Note: If immediate=yes the dialplan execution will always start at extension ; 's' priority 1 regardless of the dialed number! ; diff --git a/doc/CHANGES-staging/fxo_immediate.txt b/doc/CHANGES-staging/fxo_immediate.txt new file mode 100644 index 0000000000000000000000000000000000000000..01f9ec5eb5e7590b3a92c14a1a6d73219c4565e0 --- /dev/null +++ b/doc/CHANGES-staging/fxo_immediate.txt @@ -0,0 +1,6 @@ +Subject: chan_dahdi + +FXO channels (FXS signaled) that don't use callerid or +distinctive ring detection can now be configured +to enter the dialplan immediately using immediate=yes, +instead of waiting for at least one ring.