[Asterisk-code-review] pjsip: new endpoint's options to control Connected Line updates (asterisk[master])
Alexei Gradinari
asteriskteam at digium.com
Mon Oct 22 11:52:50 CDT 2018
Alexei Gradinari has uploaded this change for review. ( https://gerrit.asterisk.org/10524
Change subject: pjsip: new endpoint's options to control Connected Line updates
......................................................................
pjsip: new endpoint's options to control Connected Line updates
This patch adds new options 'trust_connected_line' and 'send_connected_line'
to the endpoint.
The option 'trust_connected_line' is to control if connected line updates
are accepted from this endpoint.
The option 'send_connected_line' is to control if connected line updates
can be sent to this endpoint.
The default value is 'yes' for both options.
Change-Id: I0a3d144599fa9bb5f1131e53dde4099550e68b24
---
M CHANGES
M channels/chan_pjsip.c
M configs/samples/pjsip.conf.sample
A contrib/ast-db-manage/config/versions/1ac563b350a8_add_pjsip_trust_send__connected_line.py
M include/asterisk/res_pjsip.h
M res/res_pjsip.c
M res/res_pjsip/pjsip_configuration.c
M res/res_pjsip_caller_id.c
8 files changed, 74 insertions(+), 3 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/24/10524/1
diff --git a/CHANGES b/CHANGES
index bd1a7a7..e00c16f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,15 @@
--- Functionality changes from Asterisk 16.0.0 to Asterisk 16.1.0 ------------
------------------------------------------------------------------------------
+res_pjsip
+------------------
+ * New options 'trust_connected_line' and 'send_connected_line' have been
+ added to the endpoint. The option 'trust_connected_line' is to control
+ if connected line updates are accepted from this endpoint.
+ The option 'send_connected_line' is to control if connected line updates
+ can be sent to this endpoint.
+ The default value is 'yes' for both options.
+
res_rtp_asterisk
------------------
* The existing strictrtp option in rtp.conf has a new choice availabe, called
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 21941eb..c28d8ca 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -1380,7 +1380,8 @@
struct ast_party_id connected_id;
int update_allowed = 0;
- if (!session->endpoint->id.send_pai && !session->endpoint->id.send_rpid) {
+ if (!session->endpoint->id.send_connected_line
+ || (!session->endpoint->id.send_pai && !session->endpoint->id.send_rpid)) {
return 0;
}
diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample
index fa16557..969fdeb 100644
--- a/configs/samples/pjsip.conf.sample
+++ b/configs/samples/pjsip.conf.sample
@@ -608,6 +608,10 @@
;direct_media_glare_mitigation=none ; Mitigation of direct media re INVITE
; glare (default: "none")
;direct_media_method=invite ; Direct Media method type (default: "invite")
+;trust_connected_line=yes ; Accept Connected Line updates from this endpoint
+ ; (default: "yes")
+;send_connected_line=yes ; Send Connected Line updates to this endpoint
+ ; (default: "yes")
;connected_line_method=invite ; Connected line method type.
; When set to "invite", check the remote's
; Allow header and if UPDATE is allowed, send
diff --git a/contrib/ast-db-manage/config/versions/1ac563b350a8_add_pjsip_trust_send__connected_line.py b/contrib/ast-db-manage/config/versions/1ac563b350a8_add_pjsip_trust_send__connected_line.py
new file mode 100644
index 0000000..b05229c
--- /dev/null
+++ b/contrib/ast-db-manage/config/versions/1ac563b350a8_add_pjsip_trust_send__connected_line.py
@@ -0,0 +1,35 @@
+"""add pjsip trust/send _connected_line
+
+Revision ID: 1ac563b350a8
+Revises: 7f85dd44c775
+Create Date: 2018-10-12 17:10:34.530282
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '1ac563b350a8'
+down_revision = '7f85dd44c775'
+
+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('trust_connected_line', yesno_values))
+ op.add_column('ps_endpoints', sa.Column('send_connected_line', yesno_values))
+
+def downgrade():
+ if op.get_context().bind.dialect.name == 'mssql':
+ op.drop_constraint('ck_ps_endpoints_trust_connected_line_yesno_values','ps_endpoints')
+ op.drop_constraint('ck_ps_endpoints_send_connected_line_yesno_values','ps_endpoints')
+ op.drop_column('ps_endpoints', 'trust_connected_line')
+ op.drop_column('ps_endpoints', 'send_connected_line')
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index b323bc1..2766602 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -568,6 +568,10 @@
unsigned int send_diversion;
/*! When performing connected line update, which method should be used */
enum ast_sip_session_refresh_method refresh_method;
+ /*! Do we accept connected line updates from this endpoint? */
+ unsigned int trust_connected_line;
+ /*! Do we send connected line updates to this endpoint? */
+ unsigned int send_connected_line;
};
/*!
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index c2e77cb..f5b8cf6 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -189,6 +189,12 @@
</enumlist>
</description>
</configOption>
+ <configOption name="trust_connected_line">
+ <synopsis>Accept Connected Line updates from this endpoint</synopsis>
+ </configOption>
+ <configOption name="send_connected_line">
+ <synopsis>Send Connected Line updates to this endpoint</synopsis>
+ </configOption>
<configOption name="connected_line_method" default="invite">
<synopsis>Connected line method type</synopsis>
<description>
@@ -2173,6 +2179,12 @@
<parameter name="DirectMediaMethod">
<para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='direct_media_method']/synopsis/node())"/></para>
</parameter>
+ <parameter name="TrustConnectedLine">
+ <para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='trust_connected_line']/synopsis/node())"/></para>
+ </parameter>
+ <parameter name="SendConnectedLine">
+ <para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='send_connected_line']/synopsis/node())"/></para>
+ </parameter>
<parameter name="ConnectedLineMethod">
<para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='connected_line_method']/synopsis/node())"/></para>
</parameter>
diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c
index ee37fc2..41195be 100644
--- a/res/res_pjsip/pjsip_configuration.c
+++ b/res/res_pjsip/pjsip_configuration.c
@@ -1819,6 +1819,8 @@
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "identify_by", "username,ip", ident_handler, ident_to_str, NULL, 0, 0);
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "direct_media", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.direct_media.enabled));
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "direct_media_method", "invite", direct_media_method_handler, direct_media_method_to_str, NULL, 0, 0);
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "trust_connected_line", "yes", OPT_YESNO_T, 1, FLDSET(struct ast_sip_endpoint, id.trust_connected_line));
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_connected_line", "yes", OPT_YESNO_T, 1, FLDSET(struct ast_sip_endpoint, id.send_connected_line));
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "connected_line_method", "invite", connected_line_method_handler, connected_line_method_to_str, NULL, 0, 0);
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "direct_media_glare_mitigation", "none", direct_media_glare_mitigation_handler, direct_media_glare_mitigation_to_str, NULL, 0, 0);
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "disable_direct_media_on_nat", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.direct_media.disable_on_nat));
diff --git a/res/res_pjsip_caller_id.c b/res/res_pjsip_caller_id.c
index 2481a3f..dfe6ce5 100644
--- a/res/res_pjsip_caller_id.c
+++ b/res/res_pjsip_caller_id.c
@@ -341,7 +341,8 @@
{
struct ast_party_id id;
- if (!session->endpoint->id.trust_inbound) {
+ if (!session->endpoint->id.trust_connected_line
+ || !session->endpoint->id.trust_inbound) {
return;
}
@@ -749,7 +750,10 @@
struct ast_party_id effective_id;
struct ast_party_id connected_id;
- if (!session->channel) {
+ if (!session->channel
+ || (!session->endpoint->id.send_connected_line
+ && session->inv_session
+ && session->inv_session->state >= PJSIP_INV_STATE_EARLY)) {
return;
}
--
To view, visit https://gerrit.asterisk.org/10524
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0a3d144599fa9bb5f1131e53dde4099550e68b24
Gerrit-Change-Number: 10524
Gerrit-PatchSet: 1
Gerrit-Owner: Alexei Gradinari <alex2grad at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20181022/5629e37d/attachment-0001.html>
More information about the asterisk-code-review
mailing list