chan_dahdi: Add inband_on_proceeding compatibility option.

The new inband_on_proceeding option causes Asterisk to assume inband audio
may be present when a PROCEEDING message is received.

Q.931 Section 5.1.2 says the network cannot assume that the CPE side has
attached to the B channel at this time without explicitly sending the
progress indicator ie informing the CPE side to attach to the B channel
for audio.  However, some non-compliant ISDN switches send a PROCEEDING
without the progress indicator ie indicating inband audio is available and
assume that the CPE device has connected the media path for listening to
ringback and other messages.

ASTERISK-17834 which causes this issue was dealing with a non-compliant
network switch.

(closes issue ASTERISK-21151)
Reported by: Gianluca Merlo
Tested by: rmudgett


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@384685 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/98/198/1
Richard Mudgett 13 years ago
parent e1d3fc357c
commit 7bdeb23dd2

@ -1365,6 +1365,7 @@ static struct dahdi_chan_conf dahdi_chan_conf_default(void)
.localdialplan = PRI_NATIONAL_ISDN + 1,
.nodetype = PRI_CPE,
.qsigchannelmapping = DAHDI_CHAN_MAPPING_PHYSICAL,
.inband_on_proceeding = 1,
#if defined(HAVE_PRI_CCSS)
.cc_ptmp_recall_mode = 1,/* specificRecall */
@ -12680,6 +12681,7 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf,
pris[span].pri.layer1_ignored = 0;
}
pris[span].pri.append_msn_to_user_tag = conf->pri.pri.append_msn_to_user_tag;
pris[span].pri.inband_on_proceeding = conf->pri.pri.inband_on_proceeding;
ast_copy_string(pris[span].pri.initial_user_tag, conf->chan.cid_tag, sizeof(pris[span].pri.initial_user_tag));
ast_copy_string(pris[span].pri.msn_list, conf->pri.pri.msn_list, sizeof(pris[span].pri.msn_list));
#if defined(HAVE_PRI_MWI)
@ -17677,6 +17679,8 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct
#endif /* defined(HAVE_PRI_MWI) */
} else if (!strcasecmp(v->name, "append_msn_to_cid_tag")) {
confp->pri.pri.append_msn_to_user_tag = ast_true(v->value);
} else if (!strcasecmp(v->name, "inband_on_proceeding")) {
confp->pri.pri.inband_on_proceeding = ast_true(v->value);
} else if (!strcasecmp(v->name, "layer1_presence")) {
if (!strcasecmp(v->value, "required")) {
confp->pri.pri.layer1_ignored = 0;

@ -5678,9 +5678,11 @@ static void *pri_dchannel(void *vpri)
/* Bring voice path up */
pri_queue_control(pri, chanpos, AST_CONTROL_PROGRESS);
pri->pvts[chanpos]->progress = 1;
sig_pri_set_dialing(pri->pvts[chanpos], 0);
sig_pri_open_media(pri->pvts[chanpos]);
} else if (pri->inband_on_proceeding) {
sig_pri_set_dialing(pri->pvts[chanpos], 0);
}
sig_pri_set_dialing(pri->pvts[chanpos], 0);
sig_pri_unlock_private(pri->pvts[chanpos]);
break;
case PRI_EVENT_FACILITY:

@ -393,6 +393,8 @@ struct sig_pri_span {
* appended to the initial_user_tag[].
*/
unsigned int append_msn_to_user_tag:1;
/*! TRUE if a PROCEEDING message needs to unsquelch the received audio. */
unsigned int inband_on_proceeding:1;
int dialplan; /*!< Dialing plan */
int localdialplan; /*!< Local dialing plan */
char internationalprefix[10]; /*!< country access code ('00' for european dialplans) */

@ -169,6 +169,18 @@
;
;resetinterval = 3600
;
; Assume inband audio may be present when a PROCEEDING message is received.
; Q.931 Section 5.1.2 says the network cannot assume that the CPE side has
; attached to the B channel at this time without explicitly sending the
; progress indicator ie informing the CPE side to attach to the B channel
; for audio. However, some non-compliant ISDN switches send a PROCEEDING
; without the progress indicator ie indicating inband audio is available and
; assume that the CPE device has connected the media path for listening to
; ringback and other messages.
; Default yes in current release branches for backward compatibility.
;
;inband_on_proceeding=yes
;
; Overlap dialing mode (sending overlap digits)
; Cannot be changed on a reload.
;

Loading…
Cancel
Save