diff options
-rw-r--r-- | CHANGES | 12 | ||||
-rw-r--r-- | channels/chan_pjsip.c | 3 | ||||
-rw-r--r-- | configs/samples/pjsip.conf.sample | 1 | ||||
-rwxr-xr-x | contrib/ast-db-manage/config/versions/23530d604b96_add_rpid_immediate.py | 48 | ||||
-rw-r--r-- | include/asterisk/res_pjsip.h | 2 | ||||
-rw-r--r-- | res/res_pjsip.c | 23 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_configuration.c | 1 |
7 files changed, 88 insertions, 2 deletions
@@ -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)); |