diff --git a/CHANGES b/CHANGES
index 36aabc7286..52e8f6681f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -106,6 +106,18 @@ res_musiconhold
over the channel-set musicclass. This allows separate hold-music from
application (e.g. Queue or Dial) specified music.
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 13.3.0 to Asterisk 13.4.0 ------------
+------------------------------------------------------------------------------
+
+chan_pjsip
+------------------
+ * New 'rpid_immediate' option to control if connected line update information
+ goes to the caller immediately or waits for another reason to send the
+ connected line information update. See the online option documentation for
+ more information. Defaults to 'no' as setting it to 'yes' can result in
+ many unnecessary messages being sent to the caller.
+
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.2.0 to Asterisk 13.3.0 ------------
------------------------------------------------------------------------------
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 11acdffe16..8d9193f933 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -1117,7 +1117,8 @@ static int update_connected_line_information(void *data)
ast_sip_session_refresh(session, NULL, NULL, NULL, method, generate_new_sdp);
}
- } else if (session->inv_session->state != PJSIP_INV_STATE_DISCONNECTED
+ } else if (session->endpoint->id.rpid_immediate
+ && session->inv_session->state != PJSIP_INV_STATE_DISCONNECTED
&& is_colp_update_allowed(session)) {
int response_code = 0;
diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample
index ba8bf751ba..d3bb518f15 100644
--- a/configs/samples/pjsip.conf.sample
+++ b/configs/samples/pjsip.conf.sample
@@ -637,6 +637,7 @@
; information to the called user agent (default: "yes")
;send_pai=no ; Send the P Asserted Identity header (default: "no")
;send_rpid=no ; Send the Remote Party ID header (default: "no")
+;rpid_immediate=no ; Send connected line updates on unanswered incoming calls immediately. (default: "no")
;timers_min_se=90 ; Minimum session timers expiration period (default:
; "90")
;timers=yes ; Session timers for SIP packets (default: "yes")
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index 57c1a598d8..442ee72f77 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -415,6 +415,8 @@ struct ast_sip_endpoint_id_configuration {
unsigned int send_pai;
/*! Do we send Remote-Party-ID headers to this endpoint? */
unsigned int send_rpid;
+ /*! Do we send messages for connected line updates for unanswered incoming calls immediately to this endpoint? */
+ unsigned int rpid_immediate;
/*! Do we add Diversion headers to applicable outgoing requests/responses? */
unsigned int send_diversion;
/*! When performing connected line update, which method should be used */
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 1d6af27a16..aa6a500cdc 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -199,7 +199,7 @@
This setting allows to choose the DTMF mode for endpoint communication.
- DTMF is sent out of band of the main audio stream.This
+ DTMF is sent out of band of the main audio stream. This
supercedes the older RFC-2833 used within
the older chan_sip.
@@ -316,6 +316,27 @@
Send the Remote-Party-ID header
+
+ Immediately send connected line updates on unanswered incoming calls.
+
+ When enabled, immediately send 180 Ringing
+ or 183 Progress response messages to the
+ caller if the connected line information is updated before
+ the call is answered. This can send a 180 Ringing
+ response before the call has even reached the far end. The
+ caller can start hearing ringback before the far end even gets
+ the call. Many phones tend to grab the first connected line
+ information and refuse to update the display if it changes. The
+ first information is not likely to be correct if the call
+ goes to an endpoint not under the control of this Asterisk
+ box.
+ When disabled, a connected line update must wait for
+ another reason to send a message with the connected line
+ information to the caller before the call is answered. You can
+ trigger the sending of the information by using an appropriate
+ dialplan application such as Ringing.
+
+
Minimum session timers expiration period
diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c
index ceb90a008e..5a4741d906 100644
--- a/res/res_pjsip/pjsip_configuration.c
+++ b/res/res_pjsip/pjsip_configuration.c
@@ -1710,6 +1710,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "trust_id_outbound", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.trust_outbound));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_pai", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_pai));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_rpid", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_rpid));
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "rpid_immediate", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.rpid_immediate));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_diversion", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_diversion));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "mailboxes", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, subscription.mwi.mailboxes));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "aggregate_mwi", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, subscription.mwi.aggregate));