]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_sofia] Add preliminary handing for SHAKEN/STIR via SIP Identity Header 630/head
authorKen Rice <krice@freeswitch.org>
Wed, 13 May 2020 09:06:11 +0000 (12:06 +0300)
committerAndrey Volk <andywolk@gmail.com>
Fri, 15 Jan 2021 13:44:58 +0000 (16:44 +0300)
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index 1f003c9aa96d8313a72d5b2e3411b437d4726683..88c8fe98bd31abaf0cde44840f70308d3fc975a7 100644 (file)
@@ -11315,6 +11315,10 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
                        }
                }
 
+               if (sip->sip_identity && sip->sip_identity->id_value) {
+                       switch_channel_set_variable(channel, "sip_h_identity", sip->sip_identity->id_value);
+               }
+
                /* Loop thru unknown Headers Here so we can do something with them */
                for (un = sip->sip_unknown; un; un = un->un_next) {
                        if (!strncasecmp(un->un_name, "Accept-Language", 15)) {
index 27171890ddec1b8a43d656753873771e7c4d7d05..48339d5b898c5be9f998c4cdafbaec68449b1816 100644 (file)
@@ -1030,6 +1030,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
        char *alert_info = NULL;
        const char *max_forwards = NULL;
        const char *alertbuf;
+       const char *identity = NULL;
        private_object_t *tech_pvt = switch_core_session_get_private(session);
        switch_channel_t *channel = switch_core_session_get_channel(session);
        switch_caller_profile_t *caller_profile;
@@ -1122,6 +1123,8 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                alert_info = switch_core_session_sprintf(tech_pvt->session, "Alert-Info: %s", alertbuf);
        }
 
+       identity = switch_channel_get_variable(channel, "sip_h_identity");
+
        max_forwards = switch_channel_get_variable(channel, SWITCH_MAX_FORWARDS_VARIABLE);
 
        if ((status = switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0)) != SWITCH_STATUS_SUCCESS) {
@@ -1651,6 +1654,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                                   TAG_IF(!zstr(tech_pvt->preferred_id), SIPTAG_P_PREFERRED_IDENTITY_STR(tech_pvt->preferred_id)),
                                   TAG_IF(!zstr(tech_pvt->asserted_id), SIPTAG_P_ASSERTED_IDENTITY_STR(tech_pvt->asserted_id)),
                                   TAG_IF(!zstr(tech_pvt->privacy), SIPTAG_PRIVACY_STR(tech_pvt->privacy)),
+                                  TAG_IF(!zstr(identity), SIPTAG_IDENTITY_STR(identity)),
                                   TAG_IF(!zstr(alert_info), SIPTAG_HEADER_STR(alert_info)),
                                   TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
                                   TAG_IF(sofia_test_pflag(tech_pvt->profile, PFLAG_PASS_CALLEE_ID), SIPTAG_HEADER_STR("X-FS-Support: " FREESWITCH_SUPPORT)),
@@ -1693,6 +1697,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                                   TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
                                   TAG_IF(sofia_test_pflag(tech_pvt->profile, PFLAG_PASS_CALLEE_ID), SIPTAG_HEADER_STR("X-FS-Support: " FREESWITCH_SUPPORT)),
                                   TAG_IF(!zstr(max_forwards), SIPTAG_MAX_FORWARDS_STR(max_forwards)),
+                                  TAG_IF(!zstr(identity), SIPTAG_IDENTITY_STR(identity)),
                                   TAG_IF(!zstr(route_uri), NUTAG_PROXY(route_uri)),
                                   TAG_IF(!zstr(route), SIPTAG_ROUTE_STR(route)),
                                   TAG_IF(!zstr(invite_route_uri), NUTAG_INITIAL_ROUTE_STR(invite_route_uri)),