From: Automerge Script Date: Mon, 2 Apr 2007 12:38:35 +0000 (+0000) Subject: automerge commit X-Git-Tag: 1.2.18-netsec~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b029cfcb6d2d5c7753bbe44a881f1ba45b44213;p=thirdparty%2Fasterisk.git automerge commit git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59653 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index ec38f47bf7..72928717d4 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -106,6 +106,7 @@ enum misdn_chan_state { MISDN_NOTHING=0, /*!< at beginning */ MISDN_WAITING4DIGS, /*!< when waiting for infos */ MISDN_EXTCANTMATCH, /*!< when asterisk couldnt match our ext */ + MISDN_INCOMING_SETUP, /*!< for incoming setups*/ MISDN_DIALING, /*!< when pbx_start */ MISDN_PROGRESS, /*!< we got a progress */ MISDN_PROCEEDING, /*!< we got a progress */ @@ -146,6 +147,8 @@ struct chan_list { int need_hangup; int need_busy; + int noautorespond_on_setup; + int orginator; int norxtone; @@ -682,6 +685,7 @@ static struct state_struct state_array[] = { {MISDN_NOTHING,"NOTHING"}, /* at beginning */ {MISDN_WAITING4DIGS,"WAITING4DIGS"}, /* when waiting for infos */ {MISDN_EXTCANTMATCH,"EXTCANTMATCH"}, /* when asterisk couldnt match our ext */ + {MISDN_INCOMING_SETUP,"INCOMING SETUP"}, /* when pbx_start */ {MISDN_DIALING,"DIALING"}, /* when pbx_start */ {MISDN_PROGRESS,"PROGRESS"}, /* when pbx_start */ {MISDN_PROCEEDING,"PROCEEDING"}, /* when pbx_start */ @@ -1492,6 +1496,8 @@ static int read_config(struct chan_list *ch, int orig) { misdn_cfg_get( port, MISDN_CFG_NEED_MORE_INFOS, &bc->need_more_infos, sizeof(int)); misdn_cfg_get( port, MISDN_CFG_NTTIMEOUT, &ch->nttimeout, sizeof(int)); + misdn_cfg_get( port, MISDN_CFG_NOAUTORESPOND_ON_SETUP, &ch->noautorespond_on_setup, sizeof(int)); + misdn_cfg_get( port, MISDN_CFG_FAR_ALERTING, &ch->far_alerting, sizeof(int)); misdn_cfg_get( port, MISDN_CFG_ALLOWED_BEARERS, &ch->allowed_bearers, BUFFERSIZE); @@ -2131,6 +2137,7 @@ static int misdn_hangup(struct ast_channel *ast) chan_misdn_log(2, bc->port, " --> state:%s\n", misdn_get_ch_state(p)); switch (p->state) { + case MISDN_INCOMING_SETUP: case MISDN_CALLING: p->state=MISDN_CLEANING; misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE); @@ -3141,16 +3148,20 @@ static void do_immediate_setup(struct misdn_bchannel *bc,struct chan_list *ch , ch->state=MISDN_DIALING; - if (bc->nt) { - int ret; - ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); - } else { - int ret; - if ( misdn_lib_is_ptp(bc->port)) { + if (!ch->noautorespond_on_setup) { + if (bc->nt) { + int ret; ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); } else { - ret = misdn_lib_send_event(bc, EVENT_PROCEEDING ); + int ret; + if ( misdn_lib_is_ptp(bc->port)) { + ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); + } else { + ret = misdn_lib_send_event(bc, EVENT_PROCEEDING ); + } } + } else { + ch->state = MISDN_INCOMING_SETUP; } if ( !bc->nt && (ch->orginator==ORG_MISDN) && !ch->incoming_early_audio ) @@ -3642,8 +3653,12 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) /* Check for Pickup Request first */ if (!strcmp(chan->exten, ast_pickup_ext())) { - int ret;/** Sending SETUP_ACK**/ - ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); + if (!ch->noautorespond_on_setup) { + int ret;/** Sending SETUP_ACK**/ + ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); + } else { + ch->state = MISDN_INCOMING_SETUP; + } if (ast_pickup_call(chan)) { hangup_chan(ch); } else { @@ -3701,14 +3716,19 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) } if (ast_exists_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) { - ch->state=MISDN_DIALING; - if (bc->nt || (bc->need_more_infos && misdn_lib_is_ptp(bc->port)) ) { - int ret; - ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); + if (!ch->noautorespond_on_setup) { + ch->state=MISDN_DIALING; + + if (bc->nt || (bc->need_more_infos && misdn_lib_is_ptp(bc->port)) ) { + int ret; + ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); + } else { + int ret; + ret= misdn_lib_send_event(bc, EVENT_PROCEEDING ); + } } else { - int ret; - ret= misdn_lib_send_event(bc, EVENT_PROCEEDING ); + ch->state = MISDN_INCOMING_SETUP; } if (pbx_start_chan(ch)<0) { @@ -3738,7 +3758,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) } } else { - int ret= misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE ); if (ret == -ENOCHAN) { ast_log(LOG_WARNING,"Channel was catched, before we could Acknowledge\n"); diff --git a/channels/misdn/chan_misdn_config.h b/channels/misdn/chan_misdn_config.h index 78d34750f9..e21c59fdb0 100644 --- a/channels/misdn/chan_misdn_config.h +++ b/channels/misdn/chan_misdn_config.h @@ -56,6 +56,7 @@ enum misdn_cfg_elements { MISDN_CFG_PIPELINE, /* char[] */ #endif MISDN_CFG_NEED_MORE_INFOS, /* bool */ + MISDN_CFG_NOAUTORESPOND_ON_SETUP, /* bool */ MISDN_CFG_NTTIMEOUT, /* bool */ MISDN_CFG_JITTERBUFFER, /* int */ MISDN_CFG_JITTERBUFFER_UPPER_THRESHOLD, /* int */ diff --git a/channels/misdn_config.c b/channels/misdn_config.c index 64dc8835d4..cd6a7ffd7f 100644 --- a/channels/misdn_config.c +++ b/channels/misdn_config.c @@ -117,6 +117,7 @@ static const struct misdn_cfg_spec port_spec[] = { { "pipeline", MISDN_CFG_PIPELINE, MISDN_CTYPE_STR, NO_DEFAULT, NONE }, #endif { "need_more_infos", MISDN_CFG_NEED_MORE_INFOS, MISDN_CTYPE_BOOL, "0", NONE }, + { "noautorespond_on_setup", MISDN_CFG_NOAUTORESPOND_ON_SETUP, MISDN_CTYPE_BOOL, "0", NONE }, { "nttimeout", MISDN_CFG_NTTIMEOUT, MISDN_CTYPE_BOOL, "no", NONE }, { "jitterbuffer", MISDN_CFG_JITTERBUFFER, MISDN_CTYPE_INT, "4000", NONE }, { "jitterbuffer_upper_threshold", MISDN_CFG_JITTERBUFFER_UPPER_THRESHOLD, MISDN_CTYPE_INT, "0", NONE },