diff --git a/UPGRADE.txt b/UPGRADE.txt index 87256ef25a..42f9837d19 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -35,16 +35,26 @@ From 12.3.2 to 12.4.0: - "Exited on signal $EXITSIGNAL" => "Asterisk exited on signal $EXITSIGNAL." - "Asterisk Died" => "Asterisk on $MACHINE died (sig $EXITSIGNAL)" - - Added a compatibility option for ari, chan_sip, and chan_pjsip - '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. +ARI: + - Added a compatibility option '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. - - Added support for persistent HTTP connections. To enable persistent - HTTP connections configure the keep alive time between HTTP requests. The - keep alive time between HTTP requests is configured in http.conf with the - session_keep_alive parameter. +chan_dahdi: + - 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. + +chan_pjsip: + - Added a compatibility option '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. - 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 @@ -55,6 +65,14 @@ From 12.3.2 to 12.4.0: cause the SDP answer to use the media transport as received in the SDP offer. +chan_sip: + - Added a compatibility option '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. + - 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 @@ -72,6 +90,12 @@ From 12.3.2 to 12.4.0: 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. +HTTP: + - Added support for persistent HTTP connections. To enable persistent + HTTP connections configure the keep alive time between HTTP requests. The + keep alive time between HTTP requests is configured in http.conf with the + session_keep_alive parameter. + From 12.3.0 to 12.3.1: - MixMonitor AMI actions now require users to have authorization classes. diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index ab6df48381..62164104d2 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -847,6 +847,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_setup_ack = 1, #if defined(HAVE_PRI_CCSS) .cc_ptmp_recall_mode = 1,/* specificRecall */ @@ -12148,6 +12149,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)); @@ -17636,6 +17638,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 57c518c886..63cf776da2 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -1629,6 +1629,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; @@ -1644,6 +1647,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; @@ -7489,8 +7495,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) */ ) { /* @@ -8120,7 +8137,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 ad6c4c5483..2517730f20 100644 --- a/channels/sig_pri.h +++ b/channels/sig_pri.h @@ -345,6 +345,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; @@ -483,6 +487,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 12490fc926..bba9e456e6 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 yes in current release branches for backward compatibility. +; +;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