From: sungtae kim Date: Tue, 23 Jun 2020 23:27:47 +0000 (+0200) Subject: res_pjsip.c: Added disable_rport option for pjsip.conf X-Git-Tag: 13.35.0-rc1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52e1e362f01360c8d66fe30b635cdedf9d11696a;p=thirdparty%2Fasterisk.git res_pjsip.c: Added disable_rport option for pjsip.conf 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 --- diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample index fd2d7423ac..00da05d0e1 100644 --- a/configs/samples/pjsip.conf.sample +++ b/configs/samples/pjsip.conf.sample @@ -1008,6 +1008,7 @@ ; 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 index 0000000000..c0e9df74bd --- /dev/null +++ b/contrib/ast-db-manage/config/versions/79290b511e4b_pjsip_add_disable_rport.py @@ -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 index 0000000000..a565e2011e --- /dev/null +++ b/doc/CHANGES-staging/res_pjsip_add_disable_rport_system_config.txt @@ -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 diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 0b7b63480f..10cb29c929 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -1699,6 +1699,12 @@ + + Disable the use of rport in outgoing requests. + + Remove "rport" parameter from the outgoing requests. + + Must be of type 'system' UNLESS the object name is 'system'. diff --git a/res/res_pjsip/config_system.c b/res/res_pjsip/config_system.c index 716a6da61b..e16738f610 100644 --- a/res/res_pjsip/config_system.c +++ b/res/res_pjsip/config_system.c @@ -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);