--- chan_iax2.c.orig 2009-01-18 16:28:28.000000000 -0500 +++ chan_iax2.c 2009-01-18 16:44:58.000000000 -0500 @@ -377,8 +377,9 @@ IAX_DELAYPBXSTART = (1 << 25), /*!< Don't start a PBX on the channel until the peer sends us a response, so that we've achieved a three-way handshake with them before sending voice or anything else*/ - IAX_ALLOWFWDOWNLOAD = (1 << 26), /*!< Allow the FWDOWNL command? */ - IAX_NOKEYROTATE = (1 << 27), /*!< Disable key rotation with encryption */ + IAX_ALLOWFWDOWNLOAD = (1 << 26), /*!< Allow the FWDOWNL command? */ + IAX_NOKEYROTATE = (1 << 27), /*!< Disable key rotation with encryption */ + IAX_IMMEDIATE = (1 << 28), /*!< Allow immediate off-hook to extension s */ }; static int global_rtautoclear = 120; @@ -6233,6 +6234,7 @@ ast_set_flag(iaxs[callno], IAX_MAXAUTHREQ); iaxs[callno]->prefs = user->prefs; ast_copy_flags(iaxs[callno], user, IAX_CODEC_USER_FIRST); + ast_copy_flags(iaxs[callno], user, IAX_IMMEDIATE); ast_copy_flags(iaxs[callno], user, IAX_CODEC_NOPREFS); ast_copy_flags(iaxs[callno], user, IAX_CODEC_NOCAP); ast_copy_flags(iaxs[callno], user, IAX_NOKEYROTATE); @@ -9482,10 +9484,13 @@ ast_set_flag(&iaxs[fr->callno]->state, IAX_STATE_TBD); /* If this is a TBD call, we're ready but now what... */ ast_verb(3, "Accepted AUTHENTICATED TBD call from %s\n", ast_inet_ntoa(sin.sin_addr)); + if (ast_test_flag(iaxs[fr->callno], IAX_IMMEDIATE)) goto immediatedial; } } } break; + immediatedial: + case IAX_COMMAND_DIAL: if (ast_test_flag(&iaxs[fr->callno]->state, IAX_STATE_TBD)) { ast_clear_flag(&iaxs[fr->callno]->state, IAX_STATE_TBD); @@ -11095,6 +11100,8 @@ ast_set_flag(user, IAX_CODEC_NOCAP); ast_set_flag(user, IAX_CODEC_NOPREFS); } + } else if (!strcasecmp(v->name, "immediate")) { + ast_set2_flag(user, ast_true(v->value), IAX_IMMEDIATE); } else if (!strcasecmp(v->name, "jitterbuffer")) { ast_set2_flag(user, ast_true(v->value), IAX_USEJITTERBUF); } else if (!strcasecmp(v->name, "forcejitterbuffer")) {