summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2013-04-03 20:20:09 +0000
committerRichard Mudgett <rmudgett@digium.com>2013-04-03 20:20:09 +0000
commit79818112fdc9190e4dccf632d403d35343785bdf (patch)
treef7d0f06ecfe95a74d2b02e615d13625f008d14b2 /channels
parent1cafccdf877f623bee5d4eb3c32c7fe4aa605678 (diff)
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 ........ Merged revisions 384685 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 384689 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@384696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_dahdi.c4
-rw-r--r--channels/sig_pri.c4
-rw-r--r--channels/sig_pri.h2
3 files changed, 9 insertions, 1 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 277cdaa45..bd58b6d87 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -1413,6 +1413,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 */
@@ -12951,6 +12952,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)
@@ -18218,6 +18220,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);
#if defined(HAVE_PRI_DISPLAY_TEXT)
} else if (!strcasecmp(v->name, "display_send")) {
confp->pri.pri.display_flags_send = dahdi_display_text_option(v->value);
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index dba005214..353b7f39b 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -6752,9 +6752,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:
diff --git a/channels/sig_pri.h b/channels/sig_pri.h
index db052862d..805ed9b48 100644
--- a/channels/sig_pri.h
+++ b/channels/sig_pri.h
@@ -470,6 +470,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;
#if defined(HAVE_PRI_MCID)
/*! \brief TRUE if allow sending MCID request on this span. */
unsigned int mcid_send:1;