diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h index 9299c584d9..06679f53d3 100644 --- a/src/include/switch_ivr.h +++ b/src/include/switch_ivr.h @@ -927,6 +927,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *sessi SWITCH_DECLARE(switch_status_t) switch_ivr_sound_test(switch_core_session_t *session); SWITCH_DECLARE(void) switch_process_import(switch_core_session_t *session, switch_channel_t *peer_channel, const char *varname, const char *prefix); SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_exists(const char *uuid); +SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_force_exists(const char *uuid); diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 3d8b43564e..e0c60ee584 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -1755,7 +1755,8 @@ static char *parse_presence_data_cols(switch_event_t *event) #define MAX_SQL 5 -#define new_sql() switch_assert(sql_idx+1 < MAX_SQL); if (exists) sql[sql_idx++] +#define new_sql() switch_assert(sql_idx+1 < MAX_SQL); if (exists) sql[sql_idx++] +#define new_sql_f() switch_assert(sql_idx+1 < MAX_SQL); if (force_exists) sql[sql_idx++] static void core_event_handler(switch_event_t *event) { @@ -1763,6 +1764,7 @@ static void core_event_handler(switch_event_t *event) int sql_idx = 0; char *extra_cols; int exists = 1; + int force_exists = 1; char *uuid = NULL; switch_assert(event); @@ -1784,7 +1786,10 @@ static void core_event_handler(switch_event_t *event) case SWITCH_EVENT_CALL_SECURE: { if ((uuid = switch_event_get_header(event, "unique-id"))) { - exists = switch_ivr_uuid_exists(uuid); + force_exists = exists = switch_ivr_uuid_exists(uuid); + if (!exists) { + force_exists = switch_ivr_uuid_force_exists(uuid); + } } } break; @@ -2033,7 +2038,7 @@ static void core_event_handler(switch_event_t *event) } break; default: - new_sql() = switch_mprintf("update channels set state='%s' where uuid='%s'", + new_sql_f() = switch_mprintf("update channels set state='%s' where uuid='%s'", switch_event_get_header_nil(event, "channel-state"), switch_event_get_header_nil(event, "unique-id")); break; diff --git a/src/switch_ivr.c b/src/switch_ivr.c index df5af62391..eb8d4ab9e6 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -3209,6 +3209,19 @@ SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_exists(const char *uuid) return exists; } +SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_force_exists(const char *uuid) +{ + switch_bool_t exists = SWITCH_FALSE; + switch_core_session_t *psession = NULL; + + if ((psession = switch_core_session_force_locate(uuid))) { + switch_core_session_rwunlock(psession); + exists = 1; + } + + return exists; +} + SWITCH_DECLARE(switch_status_t) switch_ivr_process_fh(switch_core_session_t *session, const char *cmd, switch_file_handle_t *fhp) { if (zstr(cmd)) {