From: William King Date: Wed, 16 Oct 2013 02:09:39 +0000 (-0700) Subject: In a case where calls to phones with presence enabled as well as presence disabled, X-Git-Tag: v1.4.1~11^2~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00c46450ffe202ed090f6cfa1a1b4e98a55d0929;p=thirdparty%2Ffreeswitch.git In a case where calls to phones with presence enabled as well as presence disabled, there were cases where the presence enabled calls weren't turning off lights due to the fact that there were calls still up on the phone(though those calls had presence disabled). --- diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 11228355bf..ef998c9c88 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -644,15 +644,31 @@ static void actual_sofia_presence_mwi_event_handler(switch_event_t *event) static int sofia_presence_dialog_callback(void *pArg, int argc, char **argv, char **columnNames) { struct dialog_helper *helper = (struct dialog_helper *) pArg; + switch_core_session_t *session = NULL; + switch_channel_t *channel = NULL; + int done = 0; if (argc >= 4) { if (argc == 5 && !zstr(argv[4])) { - if (!switch_ivr_uuid_exists(argv[4])) { + if ((session = switch_core_session_locate(argv[4]))) { + channel = switch_core_session_get_channel(session); + + if (!switch_channel_test_flag(channel, CF_ANSWERED) && + switch_true(switch_channel_get_variable_dup(channel, "presence_disable_early", SWITCH_FALSE, -1))) { + done++; + } + + switch_core_session_rwunlock(session); + } else { return 0; } } + if (done) { + return 0; + } + if (mod_sofia_globals.debug_presence > 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "CHECK DIALOG state[%s] status[%s] rpid[%s] pres[%s] uuid[%s]\n", argv[0], argv[1], argv[2], argv[3], argv[4]);