summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES12
-rw-r--r--channels/chan_pjsip.c3
-rw-r--r--configs/samples/pjsip.conf.sample1
-rwxr-xr-xcontrib/ast-db-manage/config/versions/23530d604b96_add_rpid_immediate.py48
-rw-r--r--include/asterisk/res_pjsip.h2
-rw-r--r--res/res_pjsip.c23
-rw-r--r--res/res_pjsip/pjsip_configuration.c1
7 files changed, 88 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 6d2e9c730..6158f544c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,18 @@
==============================================================================
------------------------------------------------------------------------------
+--- 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 675a9f9c4..c4cdca83a 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->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 af417cd1b..3def59331 100644
--- a/configs/samples/pjsip.conf.sample
+++ b/configs/samples/pjsip.conf.sample
@@ -628,6 +628,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/contrib/ast-db-manage/config/versions/23530d604b96_add_rpid_immediate.py b/contrib/ast-db-manage/config/versions/23530d604b96_add_rpid_immediate.py
new file mode 100755
index 000000000..dc0c01c24
--- /dev/null
+++ b/contrib/ast-db-manage/config/versions/23530d604b96_add_rpid_immediate.py
@@ -0,0 +1,48 @@
+#
+# Asterisk -- An open source telephony toolkit.
+#
+# Copyright (C) 2015, Richard Mudgett
+#
+# Richard Mudgett <rmudgett@digium.com>
+#
+# See http://www.asterisk.org for more information about
+# the Asterisk project. Please do not directly contact
+# any of the maintainers of this project for assistance;
+# the project provides a web site, mailing lists and IRC
+# channels for your use.
+#
+# This program is free software, distributed under the terms of
+# the GNU General Public License Version 2. See the LICENSE file
+# at the top of the source tree.
+#
+
+"""add rpid_immediate
+
+Revision ID: 23530d604b96
+Revises: 45e3f47c6c44
+Create Date: 2015-03-18 17:41:58.055412
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '23530d604b96'
+down_revision = '45e3f47c6c44'
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects.postgresql import ENUM
+
+YESNO_NAME = 'yesno_values'
+YESNO_VALUES = ['yes', 'no']
+
+def upgrade():
+ ############################# Enums ##############################
+
+ # yesno_values have already been created, so use postgres enum object
+ # type to get around "already created" issue - works okay with mysql
+ yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
+
+ op.add_column('ps_endpoints', sa.Column('rpid_immediate', yesno_values))
+
+def downgrade():
+ op.drop_column('ps_endpoints', 'rpid_immediate')
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index 70e9c3064..523b1b4ce 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -613,6 +613,8 @@ struct ast_sip_endpoint {
struct ast_variable *channel_vars;
/*! Whether to place a 'user=phone' parameter into the request URI if user is a number */
unsigned int usereqphone;
+ /*! Do we send messages for connected line updates for unanswered incoming calls immediately to this endpoint? */
+ unsigned int rpid_immediate;
};
/*!
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 1d57a072b..316a9472e 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -199,7 +199,7 @@
<para>This setting allows to choose the DTMF mode for endpoint communication.</para>
<enumlist>
<enum name="rfc4733">
- <para>DTMF is sent out of band of the main audio stream.This
+ <para>DTMF is sent out of band of the main audio stream. This
supercedes the older <emphasis>RFC-2833</emphasis> used within
the older <literal>chan_sip</literal>.</para>
</enum>
@@ -316,6 +316,27 @@
<configOption name="send_rpid" default="no">
<synopsis>Send the Remote-Party-ID header</synopsis>
</configOption>
+ <configOption name="rpid_immediate" default="no">
+ <synopsis>Immediately send connected line updates on unanswered incoming calls.</synopsis>
+ <description>
+ <para>When enabled, immediately send <emphasis>180 Ringing</emphasis>
+ or <emphasis>183 Progress</emphasis> response messages to the
+ caller if the connected line information is updated before
+ the call is answered. This can send a <emphasis>180 Ringing</emphasis>
+ 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.</para>
+ <para>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 <emphasis>Ringing</emphasis>.</para>
+ </description>
+ </configOption>
<configOption name="timers_min_se" default="90">
<synopsis>Minimum session timers expiration period</synopsis>
<description><para>
diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c
index e4ec03c11..4d8fd0a24 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, 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));