fix issue where clearing a single realm does not completely clear
This commit is contained in:
parent
915b96ea8a
commit
d2710422ab
|
@ -896,6 +896,7 @@ SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_exists(const char *uuid);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SWITCH_DECLARE(const char *) switch_ivr_dmachine_get_name(switch_ivr_dmachine_t *dmachine);
|
||||||
SWITCH_DECLARE(void) switch_ivr_dmachine_set_match_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t match_callback);
|
SWITCH_DECLARE(void) switch_ivr_dmachine_set_match_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t match_callback);
|
||||||
SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t nonmatch_callback);
|
SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t nonmatch_callback);
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p,
|
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p,
|
||||||
|
|
|
@ -247,6 +247,7 @@ SWITCH_STANDARD_APP(clear_digit_action_function)
|
||||||
|
|
||||||
if ((dmachine = switch_core_session_get_dmachine(session, target))) {
|
if ((dmachine = switch_core_session_get_dmachine(session, target))) {
|
||||||
if (zstr(realm) || !strcasecmp(realm, "all")) {
|
if (zstr(realm) || !strcasecmp(realm, "all")) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: Clearing all realms\n", switch_ivr_dmachine_get_name(dmachine));
|
||||||
switch_core_session_set_dmachine(session, NULL, target);
|
switch_core_session_set_dmachine(session, NULL, target);
|
||||||
switch_ivr_dmachine_destroy(&dmachine);
|
switch_ivr_dmachine_destroy(&dmachine);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -105,6 +105,11 @@ SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SWITCH_DECLARE(const char *) switch_ivr_dmachine_get_name(switch_ivr_dmachine_t *dmachine)
|
||||||
|
{
|
||||||
|
return (const char *) dmachine->name;
|
||||||
|
}
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p,
|
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p,
|
||||||
const char *name,
|
const char *name,
|
||||||
switch_memory_pool_t *pool,
|
switch_memory_pool_t *pool,
|
||||||
|
@ -179,23 +184,35 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_set_realm(switch_ivr_dmachin
|
||||||
dm_binding_head_t *headp = switch_core_hash_find(dmachine->binding_hash, realm);
|
dm_binding_head_t *headp = switch_core_hash_find(dmachine->binding_hash, realm);
|
||||||
|
|
||||||
if (headp) {
|
if (headp) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: Setting realm to %s\n", dmachine->name, realm);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: Setting realm to '%s'\n", dmachine->name, realm);
|
||||||
dmachine->realm = headp;
|
dmachine->realm = headp;
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Digit parser %s: Error Setting realm to %s\n", dmachine->name, realm);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Digit parser %s: Error Setting realm to '%s'\n", dmachine->name, realm);
|
||||||
|
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_clear_realm(switch_ivr_dmachine_t *dmachine, const char *realm)
|
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_clear_realm(switch_ivr_dmachine_t *dmachine, const char *realm)
|
||||||
{
|
{
|
||||||
|
dm_binding_head_t *headp;
|
||||||
|
|
||||||
if (zstr(realm)) {
|
if (zstr(realm)) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Digit parser %s: Error unknown realm: %s\n", dmachine->name, realm);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Digit parser %s: Error unknown realm: '%s'\n", dmachine->name, realm);
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
headp = switch_core_hash_find(dmachine->binding_hash, realm);
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: Clearing realm '%s'\n", dmachine->name, realm);
|
||||||
|
|
||||||
|
if (headp == dmachine->realm) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
|
||||||
|
"Digit parser %s: '%s' was the active realm, no realm currently selected.\n", dmachine->name, realm);
|
||||||
|
dmachine->realm = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* pool alloc'd just ditch it and it will give back the memory when we destroy ourselves */
|
/* pool alloc'd just ditch it and it will give back the memory when we destroy ourselves */
|
||||||
switch_core_hash_delete(dmachine->binding_hash, realm);
|
switch_core_hash_delete(dmachine->binding_hash, realm);
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue