]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
don't send presence for hangup if you never sent it for early in presence_disable_ear...
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 10 Apr 2013 03:32:24 +0000 (22:32 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 10 Apr 2013 03:32:24 +0000 (22:32 -0500)
src/mod/endpoints/mod_sofia/sofia_presence.c

index 91c67011745225318825757fca7f42f6fb952673..dbcb5c05b9790740428b639690b2023af3b2ca2c 100644 (file)
@@ -2700,13 +2700,18 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char *
                const char *to_user = switch_str_nil(switch_event_get_header(helper->event, "variable_sip_to_user"));
                const char *from_user = switch_str_nil(switch_event_get_header(helper->event, "variable_sip_from_user"));
                const char *disable_early = switch_str_nil(switch_event_get_header(helper->event, "variable_presence_disable_early"));
+               const char *answer_epoch = switch_str_nil(switch_event_get_header(helper->event, "variable_answer_epoch"));
+               int answered = 0;
                char *clean_to_user = NULL;
                char *clean_from_user = NULL;
                int force_status = 0;
-               
-               char *call_info_state = switch_event_get_header(helper->event, "presence-call-info-state");
                int term = 0;
 
+               if (answer_epoch) {
+                       answered = atoi(answer_epoch);
+               }
+
+
                if (user_agent && switch_stristr("snom", user_agent) && uuid) {
                        default_dialog = "full" ;
                }
@@ -2845,7 +2850,8 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char *
 
 
                        if ((sofia_test_pflag(profile, PFLAG_PRESENCE_DISABLE_EARLY) || switch_true(disable_early)) && 
-                               (!zstr(call_info_state) && (!strcasecmp(call_info_state, "alterting") || !strcasecmp(call_info_state, "progressing")))) {
+                               ((!zstr(astate) && (!strcasecmp(astate, "early") || !strcasecmp(astate, "ringing") || (!strcasecmp(astate, "terminated") && !answered))))) {
+                               switch_safe_free(stream.data);
                                goto end;
                        }