From a47321f0fdef0079ff911336c3527a8a710711f3 Mon Sep 17 00:00:00 2001 From: William King Date: Wed, 14 Nov 2012 16:48:21 -0800 Subject: [PATCH] Differentiate when the sms message successfully matched an extension in the chatplan, and when it fell through. --- src/mod/applications/mod_sms/mod_sms.c | 7 ++++--- src/switch_loadable_module.c | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/mod/applications/mod_sms/mod_sms.c b/src/mod/applications/mod_sms/mod_sms.c index d90896f74d..15d0de6233 100644 --- a/src/mod/applications/mod_sms/mod_sms.c +++ b/src/mod/applications/mod_sms/mod_sms.c @@ -395,7 +395,7 @@ static switch_event_t *chatplan_hunt(switch_event_t *event) static switch_status_t chat_send(switch_event_t *message_event) { - switch_status_t status = SWITCH_STATUS_SUCCESS; + switch_status_t status = SWITCH_STATUS_BREAK; switch_event_t *exten; int forwards = 0; const char *var; @@ -428,14 +428,15 @@ static switch_status_t chat_send(switch_event_t *message_event) for (hp = exten->headers; hp; hp = hp->next) { status = switch_core_execute_chat_app(message_event, hp->name, hp->value); if (!SWITCH_READ_ACCEPTABLE(status)) { + status = SWITCH_STATUS_SUCCESS; break; } } switch_event_destroy(&exten); - status = SWITCH_STATUS_BREAK; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SMS chatplan no actions found\n"); } - return status; diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index a94c274b6d..d63ff074f1 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -564,12 +564,21 @@ static switch_status_t do_chat_send(switch_event_t *message_event) if ((ci = (switch_chat_interface_t *) val)) { if (ci->chat_send && !strncasecmp(ci->interface_name, "GLOBAL_", 7)) { status = ci->chat_send(message_event); - if (status == SWITCH_STATUS_BREAK) { + if (status == SWITCH_STATUS_SUCCESS) { + /* The event was handled by an extension in the chatplan, + * so the event will be duplicated, modified and queued again, + * but it won't be processed by the chatplan again. + * So this copy of the event can be destroyed by the caller. + */ + switch_mutex_unlock(loadable_modules.mutex); + return SWITCH_STATUS_SUCCESS; + } else if (status == SWITCH_STATUS_BREAK) { + /* The event went through the chatplan, but no extension matched + * to handle the sms messsage. It'll be attempted to be delivered + * directly, and unless that works the sms delivery will have failed. + */ do_skip = 1; - status = SWITCH_STATUS_SUCCESS; - } - - if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) { + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Chat Interface Error [%s]!\n", dest_proto); break; }