summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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