diff --git a/UPGRADE.txt b/UPGRADE.txt index 249a6194a59..1076cc380ab 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 1392389ce30..81242533eaa 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 4c1f170f11f..bcfebb05322 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 c8498faf1e2..12f3dcae70a 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 2c0488aec8b..13691fcdf23 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