diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index 68adc5e748..1e01f9646e 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -150,6 +150,8 @@ struct chan_list { int norxtone; int notxtone; + int incoming_early_audio; + int pipe[2]; char ast_rd_buf[4096]; struct ast_frame frame; @@ -1210,6 +1212,8 @@ static int read_config(struct chan_list *ch, int orig) { misdn_cfg_get( port, MISDN_CFG_TXGAIN, &bc->txgain, sizeof(int)); misdn_cfg_get( port, MISDN_CFG_RXGAIN, &bc->rxgain, sizeof(int)); + misdn_cfg_get( port, MISDN_CFG_INCOMING_EARLY_AUDIO, &ch->incoming_early_audio, sizeof(int)); + misdn_cfg_get( port, MISDN_CFG_SENDDTMF, &bc->send_dtmf, sizeof(int)); misdn_cfg_get( port, MISDN_CFG_NEED_MORE_INFOS, &bc->need_more_infos, sizeof(int)); @@ -1733,7 +1737,11 @@ static int misdn_indication(struct ast_channel *ast, int cond) p->state=MISDN_ALERTING; chan_misdn_log(1, p->bc->port, " --> * IND :\tringing pid:%d\n",p->bc?p->bc->pid:-1); misdn_lib_send_event( p->bc, EVENT_ALERTING); - tone_indicate(p, TONE_ALERTING); + + if ( !p->bc->nt && (p->orginator==ORG_MISDN) && !p->incoming_early_audio ) + chan_misdn_log(1,p->bc->port, " --> incoming_early_audio off\n"); + else + tone_indicate(p, TONE_ALERTING); chan_misdn_log(1, p->bc->port, " --> * SEND: State Ring pid:%d\n",p->bc?p->bc->pid:-1); ast_setstate(ast,AST_STATE_RINGING); } @@ -2860,7 +2868,11 @@ static void do_immediate_setup(struct misdn_bchannel *bc,struct chan_list *ch , ret = misdn_lib_send_event(bc, EVENT_PROCEEDING ); } } - tone_indicate(ch,TONE_DIAL); + + if ( !bc->nt && (ch->orginator==ORG_MISDN) && !ch->incoming_early_audio ) + chan_misdn_log(1,bc->port, " --> incoming_early_audio off\n"); + else + tone_indicate(ch,TONE_DIAL); chan_misdn_log(1, bc->port, "* Starting Ast ctx:%s dad:%s oad:%s with 's' extension\n", ast->context, ast->exten, AST_CID_P(ast)); diff --git a/channels/misdn/chan_misdn_config.h b/channels/misdn/chan_misdn_config.h index 84f346a943..1c6bb106d1 100644 --- a/channels/misdn/chan_misdn_config.h +++ b/channels/misdn/chan_misdn_config.h @@ -43,6 +43,7 @@ enum misdn_cfg_elements { MISDN_CFG_SENDDTMF, /* int (bool) */ MISDN_CFG_HOLD_ALLOWED, /* int (bool) */ MISDN_CFG_EARLY_BCONNECT, /* int (bool) */ + MISDN_CFG_INCOMING_EARLY_AUDIO, /* int (bool) */ MISDN_CFG_ECHOCANCEL, /* int */ MISDN_CFG_ECHOCANCELWHENBRIDGED, /* int (bool) */ MISDN_CFG_ECHOTRAINING, /* int (bool) */ diff --git a/channels/misdn_config.c b/channels/misdn_config.c index 7716ce39e9..94114baca2 100644 --- a/channels/misdn_config.c +++ b/channels/misdn_config.c @@ -104,6 +104,7 @@ static const struct misdn_cfg_spec port_spec[] = { { "senddtmf", MISDN_CFG_SENDDTMF, MISDN_CTYPE_BOOL, "no", NONE }, { "hold_allowed", MISDN_CFG_HOLD_ALLOWED, MISDN_CTYPE_BOOL, "no", NONE }, { "early_bconnect", MISDN_CFG_EARLY_BCONNECT, MISDN_CTYPE_BOOL, "yes", NONE }, + { "incoming_early_audio", MISDN_CFG_INCOMING_EARLY_AUDIO, MISDN_CTYPE_BOOL, "no", NONE }, { "echocancel", MISDN_CFG_ECHOCANCEL, MISDN_CTYPE_BOOLINT, "0", 128 }, { "echocancelwhenbridged", MISDN_CFG_ECHOCANCELWHENBRIDGED, MISDN_CTYPE_BOOL, "no", NONE }, { "echotraining", MISDN_CFG_ECHOTRAINING, MISDN_CTYPE_BOOLINT, "0", 1 }, diff --git a/configs/misdn.conf.sample b/configs/misdn.conf.sample index 09ade12cd6..1715aaad65 100644 --- a/configs/misdn.conf.sample +++ b/configs/misdn.conf.sample @@ -197,6 +197,17 @@ localdialplan=0 ; early_bconnect=yes + +; +; turn this on if you like to send Tone Indications to a Incoming +; isdn channel on a TE Port. Rarely used, only if the Telco allows +; you to send indications by yourself, normally the Telco sends the +; indications to the remote party. +; +; default: no +; +incoming_early_audio=no + ; uncomment the following to get into s extension at extension conf ; there you can use DigitTimeout if you can't or don't want to use ; isdn overlap dial.