<p>George Joseph has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/12799">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip: Add "send_cid_in_contact_user" option to endpoint<br><br>A new option "send_cid_in_contact_user" has been added to endpoint.<br>Some Public Service Access Points (PSAPs) require that the<br>caller id be sent in the user portion of the Contact header.<br>If set to yes, we send the callerid number regardless of any<br>privacy settings that might be in effect.<br><br>Change-Id: Ic2ca721f7bb5fab39c80907a33e16d4f94097f91<br>---<br>M channels/chan_pjsip.c<br>M configs/samples/pjsip.conf.sample<br>A contrib/ast-db-manage/config/versions/bbcf3b472a11_add_send_cid_in_contact_user_to_endpoint.py<br>A doc/CHANGES-staging/send_cid_in_contact_user.txt<br>M include/asterisk/res_pjsip.h<br>M include/asterisk/res_pjsip_session.h<br>M res/res_pjsip.c<br>M res/res_pjsip/pjsip_configuration.c<br>M res/res_pjsip_session.c<br>M res/res_pjsip_session.exports.in<br>10 files changed, 88 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/99/12799/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c</span><br><span>index b0d5fda..9bfc175 100644</span><br><span>--- a/channels/chan_pjsip.c</span><br><span>+++ b/channels/chan_pjsip.c</span><br><span>@@ -2279,6 +2279,14 @@</span><br><span>                return NULL;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (session->endpoint->id.send_cid_in_contact_user && requestor) {</span><br><span style="color: hsl(120, 100%, 40%);">+              struct ast_party_caller *caller = ast_channel_caller((struct ast_channel *)requestor);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              if (caller) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 ast_sip_session_set_local_contact_user(session, caller->id.number.str);</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return session->channel;</span><br><span> }</span><br><span> </span><br><span>diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample</span><br><span>index bbd0317..ff8a017 100644</span><br><span>--- a/configs/samples/pjsip.conf.sample</span><br><span>+++ b/configs/samples/pjsip.conf.sample</span><br><span>@@ -667,6 +667,11 @@</span><br><span> ;send_pai=no    ; Send the P Asserted Identity header (default: "no")</span><br><span> ;send_rpid=no   ; Send the Remote Party ID header (default: "no")</span><br><span> ;rpid_immediate=no      ; Send connected line updates on unanswered incoming calls immediately. (default: "no")</span><br><span style="color: hsl(120, 100%, 40%);">+;send_cid_in_contact_user=no ; Send the CallerID number in the user part of the Contact URI.</span><br><span style="color: hsl(120, 100%, 40%);">+                ; Some Public Service Access Points (PSAPs) require that the</span><br><span style="color: hsl(120, 100%, 40%);">+                ; caller id be sent in the user portion of the Contact header.</span><br><span style="color: hsl(120, 100%, 40%);">+                ; If set to yes, we send the callerid number regardless of any</span><br><span style="color: hsl(120, 100%, 40%);">+                ; privacy settings that might be in effect.</span><br><span> ;timers_min_se=90       ; Minimum session timers expiration period (default:</span><br><span>                         ; "90")</span><br><span> ;timers=yes     ; Session timers for SIP packets (default: "yes")</span><br><span>diff --git a/contrib/ast-db-manage/config/versions/bbcf3b472a11_add_send_cid_in_contact_user_to_endpoint.py b/contrib/ast-db-manage/config/versions/bbcf3b472a11_add_send_cid_in_contact_user_to_endpoint.py</span><br><span>new file mode 100644</span><br><span>index 0000000..445238b</span><br><span>--- /dev/null</span><br><span>+++ b/contrib/ast-db-manage/config/versions/bbcf3b472a11_add_send_cid_in_contact_user_to_endpoint.py</span><br><span>@@ -0,0 +1,32 @@</span><br><span style="color: hsl(120, 100%, 40%);">+"""Add send_cid_in_contact_user to endpoint</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Revision ID: bbcf3b472a11</span><br><span style="color: hsl(120, 100%, 40%);">+Revises: 3a094a18e75b</span><br><span style="color: hsl(120, 100%, 40%);">+Create Date: 2019-08-26 11:25:55.775327</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+"""</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# revision identifiers, used by Alembic.</span><br><span style="color: hsl(120, 100%, 40%);">+revision = 'bbcf3b472a11'</span><br><span style="color: hsl(120, 100%, 40%);">+down_revision = '3a094a18e75b'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+from alembic import op</span><br><span style="color: hsl(120, 100%, 40%);">+import sqlalchemy as sa</span><br><span style="color: hsl(120, 100%, 40%);">+from sqlalchemy.dialects.postgresql import ENUM</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+YESNO_NAME = 'yesno_values'</span><br><span style="color: hsl(120, 100%, 40%);">+YESNO_VALUES = ['yes', 'no']</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def upgrade():</span><br><span style="color: hsl(120, 100%, 40%);">+    ############################# Enums ##############################</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    # yesno_values have already been created, so use postgres enum object</span><br><span style="color: hsl(120, 100%, 40%);">+    # type to get around "already created" issue - works okay with mysql</span><br><span style="color: hsl(120, 100%, 40%);">+    yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    op.add_column('ps_endpoints', sa.Column('send_cid_in_contact_user', yesno_values))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def downgrade():</span><br><span style="color: hsl(120, 100%, 40%);">+    if op.get_context().bind.dialect.name == 'mssql':</span><br><span style="color: hsl(120, 100%, 40%);">+        op.drop_constraint('ck_ps_endpoints_send_cid_in_contact_user_yesno_values','ps_endpoints')</span><br><span style="color: hsl(120, 100%, 40%);">+    op.drop_column('ps_endpoints', 'send_cid_in_contact_user')</span><br><span>diff --git a/doc/CHANGES-staging/send_cid_in_contact_user.txt b/doc/CHANGES-staging/send_cid_in_contact_user.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..a38359e</span><br><span>--- /dev/null</span><br><span>+++ b/doc/CHANGES-staging/send_cid_in_contact_user.txt</span><br><span>@@ -0,0 +1,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: res_pjsip</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+A new option "send_cid_in_contact_user" has been added to endpoint.</span><br><span style="color: hsl(120, 100%, 40%);">+Some Public Service Access Points (PSAPs) require that the</span><br><span style="color: hsl(120, 100%, 40%);">+caller id be sent in the user portion of the Contact header.</span><br><span style="color: hsl(120, 100%, 40%);">+If set to yes, we send the callerid number regardless of any</span><br><span style="color: hsl(120, 100%, 40%);">+privacy settings that might be in effect.</span><br><span>diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h</span><br><span>index 5e8dd3a..913962e 100644</span><br><span>--- a/include/asterisk/res_pjsip.h</span><br><span>+++ b/include/asterisk/res_pjsip.h</span><br><span>@@ -562,6 +562,8 @@</span><br><span>    unsigned int send_diversion;</span><br><span>         /*! When performing connected line update, which method should be used */</span><br><span>    enum ast_sip_session_refresh_method refresh_method;</span><br><span style="color: hsl(120, 100%, 40%);">+   /*! Do we send the callerid number as the contact user on requests? */</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int send_cid_in_contact_user;</span><br><span> };</span><br><span> </span><br><span> /*!</span><br><span>diff --git a/include/asterisk/res_pjsip_session.h b/include/asterisk/res_pjsip_session.h</span><br><span>index e2d4fcd..749b5bb 100644</span><br><span>--- a/include/asterisk/res_pjsip_session.h</span><br><span>+++ b/include/asterisk/res_pjsip_session.h</span><br><span>@@ -733,4 +733,18 @@</span><br><span>          }                                                       \</span><br><span>    } while(0)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Sets the Contact URI user in outgoing requests</span><br><span style="color: hsl(120, 100%, 40%);">+ * \since 13,29.0</span><br><span style="color: hsl(120, 100%, 40%);">+ * \since 16.6.0</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param session The UAC session which needs the contact user set</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param contact_user The new value to set the user portion of the contact to</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 0 Successfully updated the SDP answer</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval -1 Failure to updated the SDP answer</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_sip_session_set_local_contact_user(struct ast_sip_session *session, const char *contact_user);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif /* _RES_PJSIP_SESSION_H */</span><br><span>diff --git a/res/res_pjsip.c b/res/res_pjsip.c</span><br><span>index c41b545..56d14e9 100644</span><br><span>--- a/res/res_pjsip.c</span><br><span>+++ b/res/res_pjsip.c</span><br><span>@@ -452,6 +452,14 @@</span><br><span>                                            dialplan application such as <emphasis>Ringing</emphasis>.</para></span><br><span>                                  </description></span><br><span>                                 </configOption></span><br><span style="color: hsl(120, 100%, 40%);">+                         <configOption name="send_cid_in_contact_user" default="no"></span><br><span style="color: hsl(120, 100%, 40%);">+                                 <synopsis>Send the CallerID number in the user part of the Contact URI</synopsis></span><br><span style="color: hsl(120, 100%, 40%);">+                                 <description><para>Some Public Service Access Points (PSAPs) require that the</span><br><span style="color: hsl(120, 100%, 40%);">+                                     caller id be sent in the user portion of the Contact header.</span><br><span style="color: hsl(120, 100%, 40%);">+                                  If set to yes, we send the callerid number regardless of any</span><br><span style="color: hsl(120, 100%, 40%);">+                                  privacy settings that might be in effect. </para></span><br><span style="color: hsl(120, 100%, 40%);">+                                       </description></span><br><span style="color: hsl(120, 100%, 40%);">+                          </configOption></span><br><span>                                <configOption name="timers_min_se" default="90"></span><br><span>                                   <synopsis>Minimum session timers expiration period</synopsis></span><br><span>                                    <description><para></span><br><span>diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c</span><br><span>index 4f7beb6..f771722 100644</span><br><span>--- a/res/res_pjsip/pjsip_configuration.c</span><br><span>+++ b/res/res_pjsip/pjsip_configuration.c</span><br><span>@@ -1825,6 +1825,7 @@</span><br><span>     ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_rpid", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_rpid));</span><br><span>   ast_sorcery_object_field_register(sip_sorcery, "endpoint", "rpid_immediate", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, rpid_immediate));</span><br><span>    ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_diversion", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_diversion));</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_cid_in_contact_user", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_cid_in_contact_user));</span><br><span>     ast_sorcery_object_field_register(sip_sorcery, "endpoint", "mailboxes", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, subscription.mwi.mailboxes));</span><br><span>     ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "voicemail_extension", "", voicemail_extension_handler, voicemail_extension_to_str, NULL, 0, 0);</span><br><span>     ast_sorcery_object_field_register(sip_sorcery, "endpoint", "aggregate_mwi", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, subscription.mwi.aggregate));</span><br><span>diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c</span><br><span>index 0cc514a..f899162 100644</span><br><span>--- a/res/res_pjsip_session.c</span><br><span>+++ b/res/res_pjsip_session.c</span><br><span>@@ -1803,6 +1803,16 @@</span><br><span>      return ret_session;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int ast_sip_session_set_local_contact_user(struct ast_sip_session *session, const char *contact_user)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        if (contact_user && session->inv_session && session->inv_session->role == PJSIP_ROLE_UAC) {</span><br><span style="color: hsl(120, 100%, 40%);">+          pjsip_sip_uri *sip_uri = pjsip_uri_get_uri(session->inv_session->dlg->local.contact->uri);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              pj_strdup2(session->inv_session->dlg->pool, &sip_uri->user, contact_user);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int session_end(void *vsession);</span><br><span> static int session_end_completion(void *vsession);</span><br><span> </span><br><span>diff --git a/res/res_pjsip_session.exports.in b/res/res_pjsip_session.exports.in</span><br><span>index 5bc0bf4..c0d220f 100644</span><br><span>--- a/res/res_pjsip_session.exports.in</span><br><span>+++ b/res/res_pjsip_session.exports.in</span><br><span>@@ -19,6 +19,7 @@</span><br><span>                 LINKER_SYMBOL_PREFIXast_sip_session_send_request;</span><br><span>            LINKER_SYMBOL_PREFIXast_sip_session_create_invite;</span><br><span>           LINKER_SYMBOL_PREFIXast_sip_session_create_outgoing;</span><br><span style="color: hsl(120, 100%, 40%);">+          LINKER_SYMBOL_PREFIXast_sip_session_set_local_contact_user;</span><br><span>          LINKER_SYMBOL_PREFIXast_sip_session_suspend;</span><br><span>                 LINKER_SYMBOL_PREFIXast_sip_session_unsuspend;</span><br><span>               LINKER_SYMBOL_PREFIXast_sip_dialog_get_session;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/12799">change 12799</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/12799"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-Change-Id: Ic2ca721f7bb5fab39c80907a33e16d4f94097f91 </div>
<div style="display:none"> Gerrit-Change-Number: 12799 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>