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]);