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
18.0
sungtae kim 5 years ago
parent d093e44b1e
commit 81b5e4a73f

@ -1089,6 +1089,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=========================

@ -0,0 +1,39 @@
"""pjsip add disable_rport
Revision ID: 79290b511e4b
Revises: fbb7766f17bc
Create Date: 2020-06-25 22:21:37.529880
"""
# revision identifiers, used by Alembic.
revision = '79290b511e4b'
down_revision = 'fbb7766f17bc'
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')

@ -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.

@ -1831,6 +1831,12 @@
</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>

@ -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);

Loading…
Cancel
Save