]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip.c: Added disable_rport option for pjsip.conf
authorsungtae kim <pchero21@gmail.com>
Tue, 23 Jun 2020 23:27:47 +0000 (01:27 +0200)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Tue, 7 Jul 2020 14:01:43 +0000 (09:01 -0500)
Currently when the pjsip making an outgoing request, it keep adding the
rport parameter in a request message as a default.

This causes unexpected rport handle at the other end.

Added option for disable this behaviour in the pjsip.conf.

This is a system option, but working as a gloabl option.

ASTERISK-28959

Change-Id: I9596675e52a742774738b5aad5d1fec32f477abc

configs/samples/pjsip.conf.sample
contrib/ast-db-manage/config/versions/79290b511e4b_pjsip_add_disable_rport.py [new file with mode: 0644]
doc/CHANGES-staging/res_pjsip_add_disable_rport_system_config.txt [new file with mode: 0644]
res/res_pjsip.c
res/res_pjsip/config_system.c

index fd2d7423acf2265163bc961c1f838775acb507e7..00da05d0e1a85e610b11260d1d3b57148b89d4ef 100644 (file)
                            ; This option must also be enabled on endpoints that
                            ; require this functionality.
                            ; (default: no)
+;disable_rport=no ; Disable the use of "rport" in outgoing requests.
 ;type=  ; Must be of type system (default: "")
 
 ;==========================GLOBAL SECTION OPTIONS=========================
diff --git a/contrib/ast-db-manage/config/versions/79290b511e4b_pjsip_add_disable_rport.py b/contrib/ast-db-manage/config/versions/79290b511e4b_pjsip_add_disable_rport.py
new file mode 100644 (file)
index 0000000..c0e9df7
--- /dev/null
@@ -0,0 +1,39 @@
+"""pjsip add disable_rport
+
+Revision ID: 79290b511e4b
+Revises: 339e1dfa644d
+Create Date: 2020-06-25 22:21:37.529880
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '79290b511e4b'
+down_revision = '339e1dfa644d'
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects.postgresql import ENUM
+
+AST_BOOL_NAME = 'ast_bool_values'
+# We'll just ignore the n/y and f/t abbreviations as Asterisk does not write
+# those aliases.
+AST_BOOL_VALUES = [ '0', '1',
+                    'off', 'on',
+                    'false', 'true',
+                    'no', 'yes' ]
+
+
+def upgrade():
+    ############################# Enums ##############################
+
+    # ast_bool_values has already been created, so use postgres enum object
+    # type to get around "already created" issue - works okay with mysql
+    ast_bool_values = ENUM(*AST_BOOL_VALUES, name=AST_BOOL_NAME, create_type=False)
+
+    op.add_column('ps_systems', sa.Column('disable_rport', ast_bool_values))
+
+
+def downgrade():
+    if op.get_context().bind.dialect.name == 'mssql':
+        op.drop_constraint('ck_ps_systems_disable_rport_ast_bool_values','ps_systems')
+    op.drop_column('ps_systems', 'disable_rport')
diff --git a/doc/CHANGES-staging/res_pjsip_add_disable_rport_system_config.txt b/doc/CHANGES-staging/res_pjsip_add_disable_rport_system_config.txt
new file mode 100644 (file)
index 0000000..a565e20
--- /dev/null
@@ -0,0 +1,9 @@
+Subject: res_pjsip
+
+Added a new PJSIP system setting called disable_rport.
+Default is no to keep support working as before.
+
+If it is false (default) it adds the 'rport' parameter in the outgoing request message.
+If it is true it does not add the 'rport' parameter in the outgoing request message.
+
+This is a system option, but working as a global option.
\ No newline at end of file
index 0b7b63480f5da52e2ee303caef9e53cc806e8800..10cb29c92985c842e49713c36d62fad3c9057b2b 100644 (file)
                                                </para></note>
                                        </description>
                                </configOption>
+                               <configOption name="disable_rport" default="no">
+                                       <synopsis>Disable the use of rport in outgoing requests.</synopsis>
+                                       <description><para>
+                                               Remove "rport" parameter from the outgoing requests.
+                                       </para></description>
+                               </configOption>
                                <configOption name="type">
                                        <synopsis>Must be of type 'system' UNLESS the object name is 'system'.</synopsis>
                                </configOption>
index 716a6da61bec6d46d8b0a21a0dab42bf4064f400..e16738f610532860cc5040c053565220f69d873c 100644 (file)
@@ -59,6 +59,8 @@ struct system_config {
         */
        unsigned int follow_early_media_fork;
        unsigned int accept_multiple_sdp_answers;
+       /*! Disable the use of rport in outgoing requests */
+       unsigned int disable_rport;
 };
 
 static struct ast_threadpool_options sip_threadpool_options = {
@@ -131,6 +133,8 @@ static int system_apply(const struct ast_sorcery *sorcery, void *obj)
        pjsip_cfg()->endpt.disable_tcp_switch =
                system->disable_tcp_switch ? PJ_TRUE : PJ_FALSE;
 
+       pjsip_cfg()->endpt.disable_rport = system->disable_rport ? PJ_TRUE : PJ_FALSE;
+
        return 0;
 }
 
@@ -209,6 +213,8 @@ int ast_sip_initialize_system(void)
                        OPT_BOOL_T, 1, FLDSET(struct system_config, follow_early_media_fork));
        ast_sorcery_object_field_register(system_sorcery, "system", "accept_multiple_sdp_answers", "no",
                        OPT_BOOL_T, 1, FLDSET(struct system_config, accept_multiple_sdp_answers));
+       ast_sorcery_object_field_register(system_sorcery, "system", "disable_rport", "no",
+                       OPT_BOOL_T, 1, FLDSET(struct system_config, disable_rport));
 
        ast_sorcery_load(system_sorcery);