]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_dahdi: Allow FXO channels to start immediately.
authorNaveen Albert <asterisk@phreaknet.org>
Fri, 11 Nov 2022 00:47:57 +0000 (00:47 +0000)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Tue, 29 Nov 2022 14:30:14 +0000 (08:30 -0600)
Currently, chan_dahdi will wait for at least one
ring before an incoming call can enter the dialplan.
This is generally necessary in order to receive
the Caller ID spill and/or distinctive ringing
detection.

However, if neither of these is required, then there
is nothing gained by waiting for one ring and this
unnecessarily delays call setup. Users can now
use immediate=yes to make FXO channels (FXS signaled)
begin processing dialplan as soon as Asterisk receives
the call.

ASTERISK-30305 #close

Change-Id: I20818b370b2e4892c7f40c8a8753fa06a81750b5

channels/sig_analog.c
configs/samples/chan_dahdi.conf.sample
doc/CHANGES-staging/fxo_immediate.txt [new file with mode: 0644]

index 76ee645c26f03bbf56d6a61a0d6b508cff4a595b..ccc14a89f990283d29bea1636f05aaef62e36524 100644 (file)
@@ -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;
index 6333351c0ddbab5f2af9b684964c8130e9ddba99..6b2954975091b4eca90aaf47fbb9d4d484f7ee89 100644 (file)
@@ -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 (file)
index 0000000..01f9ec5
--- /dev/null
@@ -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.