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);
#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)
{
int sql_idx = 0;
char *extra_cols;
int exists = 1;
+ int force_exists = 1;
char *uuid = NULL;
switch_assert(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;
}
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;
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)) {