]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10067: [mod_sofia] add update-refresher profile param and sip_update_refresher...
authorMike Jerris <mike@jerris.com>
Fri, 3 Mar 2017 17:01:12 +0000 (11:01 -0600)
committerMike Jerris <mike@jerris.com>
Tue, 7 Mar 2017 19:44:27 +0000 (13:44 -0600)
Conflicts:
src/mod/endpoints/mod_sofia/mod_sofia.h

src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index b9de3efffa9b6758d219bcd28c0a65e84a3d0f03..55505056c43a8404d1e071f0077fca8cb5d6da02 100644 (file)
@@ -900,10 +900,14 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
 
                if ((tech_pvt->session_timeout = session_timeout)) {
                        tech_pvt->session_refresher = switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND ? nua_local_refresher : nua_remote_refresher;
+                       if (sofia_test_pflag(tech_pvt->profile, PFLAG_UPDATE_REFRESHER) || switch_channel_var_true(tech_pvt->channel, "sip_update_refresher")) {
+                               tech_pvt->update_refresher = 1;
+                       }
                } else {
                        tech_pvt->session_refresher = nua_no_refresher;
                }
 
+
                if (sofia_use_soa(tech_pvt)) {
                        nua_respond(tech_pvt->nh, SIP_200_OK,
                                                NUTAG_AUTOANSWER(0),
@@ -912,6 +916,7 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
                                                TAG_IF(cid, SIPTAG_HEADER_STR(cid)),
                                                NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                                NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                               NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                                SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
                                                SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
                                                SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
@@ -931,6 +936,7 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
                                                TAG_IF(cid, SIPTAG_HEADER_STR(cid)),
                                                NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                                NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                               NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                                SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
                                                SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
                                                SIPTAG_CONTENT_TYPE_STR("application/sdp"),
@@ -1884,6 +1890,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
                                                        nua_update(tech_pvt->nh,
                                                                           NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                                                           NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                                                          NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                                                           TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
                                                                           TAG_IF(!zstr(tech_pvt->route_uri), NUTAG_PROXY(tech_pvt->route_uri)),
                                                                           TAG_IF(!zstr_buf(message), SIPTAG_HEADER_STR(message)),
@@ -1899,6 +1906,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
                                                        nua_update(tech_pvt->nh,
                                                                           NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                                                           NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                                                          NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                                                           TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
                                                                           TAG_IF(!zstr(tech_pvt->route_uri), NUTAG_PROXY(tech_pvt->route_uri)),
                                                                           TAG_IF(!zstr_buf(message), SIPTAG_HEADER_STR(message)),
@@ -1957,6 +1965,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
                                                nua_update(tech_pvt->nh,
                                                                   NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                                                   NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                                                  NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                                                   TAG_IF(!zstr(tech_pvt->route_uri), NUTAG_PROXY(tech_pvt->route_uri)),
                                                                   TAG_IF(!zstr_buf(message), SIPTAG_HEADER_STR(message)),
                                                                   TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)), TAG_END());
index 78a940110eff8ac82d82a450175fca9719189408..9ecdadb45841863d3a9785f579cfcee4500cf8f7 100644 (file)
@@ -296,6 +296,7 @@ typedef enum {
        PFLAG_PROXY_HOLD,
        PFLAG_PROXY_INFO,
        PFLAG_PROXY_MESSAGE,
+       PFLAG_UPDATE_REFRESHER,
 
        /* No new flags below this line */
        PFLAG_MAX
@@ -832,6 +833,7 @@ struct private_object {
        sofia_cid_type_t cid_type;
        uint32_t session_timeout;
        enum nua_session_refresher session_refresher;
+       int update_refresher;
        char **watch_headers;
        char *respond_phrase;
        int respond_code;
index 8adf94f8fdeb0020106de11cb3fae90d7449b949..4f4ec08dddafe216b5e45957ef002bde12e2f866 100644 (file)
@@ -5096,6 +5096,12 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
                                                } else {
                                                        sofia_clear_pflag(profile, PFLAG_PRESENCE_PRIVACY);
                                                }
+                                       } else if (!strcasecmp(var, "update-refresher")) {
+                                               if (switch_true(val)) {
+                                                       sofia_set_pflag(profile, PFLAG_UPDATE_REFRESHER);
+                                               } else {
+                                                       sofia_clear_pflag(profile, PFLAG_UPDATE_REFRESHER);
+                                               }
                                        } else if (!strcasecmp(var, "manage-shared-appearance")) {
                                                if (switch_true(val)) {
                                                        sofia_set_pflag(profile, PFLAG_MANAGE_SHARED_APPEARANCE);
index 3302d20cd095dd6bd2dccd1ed9822455608a1dad..e56dd4847023540fd8f44652a411b0cdb6897a49 100644 (file)
@@ -1285,11 +1285,13 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
 
        if ((tech_pvt->session_timeout = session_timeout)) {
                tech_pvt->session_refresher = switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND ? nua_local_refresher : nua_remote_refresher;
+               if (sofia_test_pflag(tech_pvt->profile, PFLAG_UPDATE_REFRESHER) || switch_channel_var_true(tech_pvt->channel, "sip_update_refresher")) {
+                       tech_pvt->update_refresher = 1;
+               }
        } else {
                tech_pvt->session_refresher = nua_no_refresher;
        }
 
-
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "%s sending invite version: %s\nLocal SDP:\n%s\n",
                                          switch_channel_get_name(tech_pvt->channel), switch_version_full_human(), 
                                          tech_pvt->mparams.local_sdp_str ? tech_pvt->mparams.local_sdp_str : "NO SDP PRESENT\n");
@@ -1313,6 +1315,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                                   NUTAG_AUTOACK(0),
                                   NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                   NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                  NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                   TAG_IF(sofia_test_flag(tech_pvt, TFLAG_RECOVERED), NUTAG_INVITE_TIMER(UINT_MAX)),
                                   TAG_IF(invite_full_from, SIPTAG_FROM_STR(invite_full_from)),
                                   TAG_IF(invite_full_to, SIPTAG_TO_STR(invite_full_to)),
@@ -1349,6 +1352,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                                   NUTAG_AUTOACK(0),
                                   NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
                                   NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
+                                  NUTAG_UPDATE_REFRESH(tech_pvt->update_refresher),
                                   TAG_IF(sofia_test_flag(tech_pvt, TFLAG_RECOVERED), NUTAG_INVITE_TIMER(UINT_MAX)),
                                   TAG_IF(invite_full_from, SIPTAG_FROM_STR(invite_full_from)),
                                   TAG_IF(invite_full_to, SIPTAG_TO_STR(invite_full_to)),