summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2014-07-03 22:22:36 +0000
committerRichard Mudgett <rmudgett@digium.com>2014-07-03 22:22:36 +0000
commit3bd495a688199c2db5ebc397210f06191aa59581 (patch)
tree915c129ba5f811995be43faf15e6ff951b24c3be
parent9b10813a2b2aa0edc5005aa9dc61c303a9ec6766 (diff)
chan_dahdi: Add inband_on_setup_ack compatibility option.
The new inband_on_setup_ack option causes Asterisk to assume inband audio may be present when a SETUP_ACKNOWLEDGE message is received. Q.931 Section 5.1.3 says that in scenarios with overlap dialing, when a dialtone is sent from the network side, progress indicator 8 "Inband info now available" MAY be sent to the CPE if no digits were received with the SETUP. It is thus implied that the ie is mandatory if digits came with the SETUP and dialtone is needed. This option should be enabled, when the network sends dialtone and you want to hear it, but the network doesn't send the progress indicator when needed. NOTE: For Q.SIG setups this option should be enabled when outgoing overlap dialing is also enabled because Q.SIG does not send the progress indicator with the SETUP ACK. The commit -r413714 (AST-1338) which causes this issue was dealing with a SIP-to-ISDN interoperability issue. This commit is a merge of the two patches indicated below. ASTERISK-23897 #close Reported by: Pavel Troller Patches: pri-4.diff (license #6302) patch uploaded by Pavel Troller jira_asterisk_23897_v11.patch (license #5621) patch uploaded by rmudgett Review: https://reviewboard.asterisk.org/r/3633/ ........ Merged revisions 417956 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417957 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417958 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@417976 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--UPGRADE.txt37
-rw-r--r--channels/chan_dahdi.c3
-rw-r--r--channels/sig_pri.c26
-rw-r--r--channels/sig_pri.h6
-rw-r--r--configs/chan_dahdi.conf.sample17
5 files changed, 85 insertions, 4 deletions
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 249a6194a..1076cc380 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -120,10 +120,42 @@ CDRs:
chan_dahdi:
- SS7 support now requires libss7 v2.0 or later.
+ - Added the inband_on_setup_ack compatibility option to chan_dahdi.conf to
+ deal with switches that don't send an inband progress indication in the
+ SETUP ACKNOWLEDGE message.
+ Default is now no.
+
+chan_pjsip:
+ - Added a 'force_avp' option to chan_pjsip which will force the usage of
+ 'RTP/AVP', 'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' as the media transport type
+ in SDP offers depending on settings, even when DTLS is used for media
+ encryption.
+
+ - Added a 'media_use_received_transport' option to chan_pjsip which will
+ cause the SDP answer to use the media transport as received in the SDP
+ offer.
+
chan_sip:
- Made set SIPREFERREDBYHDR as inheritable for better chan_pjsip
interoperability.
+ - Added a 'force_avp' option for chan_sip. When enabled this option will
+ cause the media transport in the offer or answer SDP to be 'RTP/AVP',
+ 'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' even if a DTLS stream has been
+ configured. This option can be set to improve interoperability with WebRTC
+ clients that don't use the RFC defined transport for DTLS.
+
+ - The 'dtlsverify' option in chan_sip now has additional values besides
+ 'yes' and 'no'. If 'yes' is specified both the certificate and fingerprint
+ will be verified. If 'no' is specified then neither the certificate or
+ fingerprint is verified. If 'certificate' is specified then only the
+ certificate is verified. If 'fingerprint' is specified then only the
+ fingerprint is verified.
+
+ - A 'dtlsfingerprint' option has been added to chan_sip which allows the
+ hash to be specified for the DTLS fingerprint placed in SDP. Supported
+ values are 'sha-1' and 'sha-256' with 'sha-256' being the default.
+
CLI commands:
- "core show settings" now lists the current console verbosity in addition
to the root console verbosity.
@@ -231,11 +263,12 @@ Utilities:
in contrib/scripts.
WebSockets:
- - Added a compatibility option for ari, chan_sip, and chan_pjsip
+ - Added a compatibility option to ari.conf, sip.conf, and pjsip.conf
'websocket_write_timeout'. When a websocket connection exists where Asterisk
writes a substantial amount of data to the connected client, and the connected
client is slow to process the received data, the socket may be disconnected.
- In such cases, it may be necessary to adjust this value. Default is 100 ms.
+ In such cases, it may be necessary to adjust this value.
+ Default is 100 ms.
===========================================================
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 1392389ce..81242533e 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -12309,6 +12309,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_setup_ack = conf->pri.pri.inband_on_setup_ack;
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));
@@ -18418,6 +18419,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_setup_ack")) {
+ confp->pri.pri.inband_on_setup_ack = 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)
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 4c1f170f1..bcfebb053 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -1650,6 +1650,9 @@ static int pri_fixup_principle(struct sig_pri_span *pri, int principle, q931_cal
#if defined(HAVE_PRI_CALL_WAITING)
new_chan->is_call_waiting = old_chan->is_call_waiting;
#endif /* defined(HAVE_PRI_CALL_WAITING) */
+#if defined(HAVE_PRI_SETUP_ACK_INBAND)
+ new_chan->no_dialed_digits = old_chan->no_dialed_digits;
+#endif /* defined(HAVE_PRI_SETUP_ACK_INBAND) */
#if defined(HAVE_PRI_AOC_EVENTS)
old_chan->aoc_s_request_invoke_id_valid = 0;
@@ -1665,6 +1668,9 @@ static int pri_fixup_principle(struct sig_pri_span *pri, int principle, q931_cal
#if defined(HAVE_PRI_CALL_WAITING)
old_chan->is_call_waiting = 0;
#endif /* defined(HAVE_PRI_CALL_WAITING) */
+#if defined(HAVE_PRI_SETUP_ACK_INBAND)
+ old_chan->no_dialed_digits = 0;
+#endif /* defined(HAVE_PRI_SETUP_ACK_INBAND) */
/* More stuff to transfer to the new channel. */
new_chan->call_level = old_chan->call_level;
@@ -7518,8 +7524,19 @@ static void *pri_dchannel(void *vpri)
* We explicitly DO NOT want to check PRI_PROG_CALL_NOT_E2E_ISDN
* because it will mess up ISDN to SIP interoperability for
* the ALERTING message.
+ *
+ * Q.931 Section 5.1.3 says that in scenarios with overlap
+ * dialing where no called digits are received and the tone
+ * option requires dialtone, the switch MAY send an inband
+ * progress indication ie to indicate dialtone presence in
+ * the SETUP ACKNOWLEDGE. Therefore, if we did not send any
+ * digits with the SETUP then we must assume that dialtone
+ * is present and open the voice path. Fortunately when
+ * interoperating with SIP, we should be sending digits.
*/
- && (e->setup_ack.progressmask & PRI_PROG_INBAND_AVAILABLE)
+ && ((e->setup_ack.progressmask & PRI_PROG_INBAND_AVAILABLE)
+ || pri->inband_on_setup_ack
+ || pri->pvts[chanpos]->no_dialed_digits)
#endif /* defined(HAVE_PRI_SETUP_ACK_INBAND) */
) {
/*
@@ -8149,7 +8166,12 @@ int sig_pri_call(struct sig_pri_chan *p, struct ast_channel *ast, const char *rd
if (!keypad || !ast_strlen_zero(c + p->stripmsd + dp_strip))
#endif /* defined(HAVE_PRI_SETUP_KEYPAD) */
{
- pri_sr_set_called(sr, c + p->stripmsd + dp_strip, pridialplan, s ? 1 : 0);
+ char *called = c + p->stripmsd + dp_strip;
+
+ pri_sr_set_called(sr, called, pridialplan, s ? 1 : 0);
+#if defined(HAVE_PRI_SETUP_ACK_INBAND)
+ p->no_dialed_digits = !called[0];
+#endif /* defined(HAVE_PRI_SETUP_ACK_INBAND) */
}
#if defined(HAVE_PRI_SUBADDR)
diff --git a/channels/sig_pri.h b/channels/sig_pri.h
index c8498faf1..12f3dcae7 100644
--- a/channels/sig_pri.h
+++ b/channels/sig_pri.h
@@ -347,6 +347,10 @@ struct sig_pri_chan {
/*! \brief TRUE if this is a call waiting call */
unsigned int is_call_waiting:1;
#endif /* defined(HAVE_PRI_CALL_WAITING) */
+#if defined(HAVE_PRI_SETUP_ACK_INBAND)
+ /*! TRUE if outgoing SETUP had no called digits */
+ unsigned int no_dialed_digits:1;
+#endif /* defined(HAVE_PRI_SETUP_ACK_INBAND) */
struct ast_channel *owner;
@@ -485,6 +489,8 @@ struct sig_pri_span {
* appended to the initial_user_tag[].
*/
unsigned int append_msn_to_user_tag:1;
+ /*! TRUE if a SETUP ACK message needs to open the audio path. */
+ unsigned int inband_on_setup_ack:1;
/*! TRUE if a PROCEEDING message needs to unsquelch the received audio. */
unsigned int inband_on_proceeding:1;
#if defined(HAVE_PRI_MCID)
diff --git a/configs/chan_dahdi.conf.sample b/configs/chan_dahdi.conf.sample
index 2c0488aec..13691fcdf 100644
--- a/configs/chan_dahdi.conf.sample
+++ b/configs/chan_dahdi.conf.sample
@@ -196,6 +196,23 @@ context=public
;
;resetinterval = 3600
;
+; Assume inband audio may be present when a SETUP ACK message is received.
+; Q.931 Section 5.1.3 says that in scenarios with overlap dialing, when a
+; dialtone is sent from the network side, progress indicator 8 "Inband info
+; now available" MAY be sent to the CPE if no digits were received with
+; the SETUP. It is thus implied that the ie is mandatory if digits came
+; with the SETUP and dialtone is needed.
+; This option should be enabled, when the network sends dialtone and you
+; want to hear it, but the network doesn't send the progress indicator when
+; needed.
+;
+; NOTE: For Q.SIG setups this option should be enabled when outgoing overlap
+; dialing is also enabled because Q.SIG does not send the progress indicator
+; with the SETUP ACK.
+; Default no.
+;
+;inband_on_setup_ack=yes
+;
; 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