While I understand the sentiment here, I'm not sure this is a good idea. This builds in a 500ms post-dial delay issue into every call. I've been building systems for three years now, and everywhere there is an "Answer" (which, I believe, should be the only method that picks up a line and sets up a media channel locally, but that's a discussion for another thread) there is a "Wait(.5)" or even a "Wait(1)".

Building this in as a non-optional default seems a bit on the drastic side to deal with people who don't know about how to manage their dialplans. Perhaps making this a selectable option, or removing it and better educating folks how to write a dialplan that has better audio performance?

There are instances where instant audio path access is useful. If I'm using DTMF to page through ChanSpy sessions, as an example, is this called? How about during large test jig configurations where thousands of audio channels are being set up/torn down in short order? (which, BTW, will be happening next week on a grand scale hopefully.)

It just seems "wrong" to me to insert a mandatory delay. I know the intentions are good, but hard-coded things like this make me uncomfortable. Discussion?

JT



Author: kpfleming
Date: Thu Jan 11 17:42:14 2007
New Revision: 50538

URL: http://svn.digium.com/view/asterisk?view=rev&rev=50538
Log:
when a channel gets automatically answered by an application, sleep a bit to give the audio path (for VOIP channels) time to be setup

Modified:
    trunk/main/channel.c

Modified: trunk/main/channel.c
URL: http://svn.digium.com/view/asterisk/trunk/main/channel.c?view=diff&rev=50538&r1=50537&r2=50538
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Thu Jan 11 17:42:14 2007
@@ -1615,17 +1615,21 @@
 int ast_answer(struct ast_channel *chan)
 {
        int res = 0;
+
        ast_channel_lock(chan);
+
        /* You can't answer an outbound call */
        if (ast_test_flag(chan, AST_FLAG_OUTGOING)) {
                ast_channel_unlock(chan);
                return 0;
        }
+
        /* Stop if we're a zombie or need a soft hangup */
        if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan)) {
                ast_channel_unlock(chan);
                return -1;
        }
+
        switch(chan->_state) {
        case AST_STATE_RINGING:
        case AST_STATE_RING:
@@ -1633,6 +1637,7 @@
                        res = chan->tech->answer(chan);
                ast_setstate(chan, AST_STATE_UP);
                ast_cdr_answer(chan->cdr);
+               ast_safe_sleep(chan, 500);
                break;
        case AST_STATE_UP:
                ast_cdr_answer(chan->cdr);
@@ -1640,7 +1645,9 @@
        default:
                break;
        }
+
        ast_channel_unlock(chan);
+
        return res;
 }


_______________________________________________
_______________________________________________
--Bandwidth and Colocation provided by Easynews.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to