]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7764 #resolve
authorLuis Azedo <luis@2600hz.com>
Thu, 2 Apr 2015 23:50:56 +0000 (00:50 +0100)
committerLuis Azedo <luis@2600hz.com>
Thu, 2 Jul 2015 17:53:44 +0000 (18:53 +0100)
add sms delivery report event to mod_sms

src/mod/applications/mod_sms/mod_sms.c

index 2283e5d3a28d3a29c2a99fc62bf9f7c87bb1350d..4529244b0d879fca819195a4e5b6fe33c2a969e2 100644 (file)
@@ -32,6 +32,7 @@
 #include <switch.h>
 #define SMS_CHAT_PROTO "GLOBAL_SMS"
 #define MY_EVENT_SEND_MESSAGE "SMS::SEND_MESSAGE"
+#define MY_EVENT_DELIVERY_REPORT "SMS::DELIVERY_REPORT"
 
 /* Prototypes */
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_sms_shutdown);
@@ -40,6 +41,35 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_sms_load);
 SWITCH_MODULE_DEFINITION(mod_sms, mod_sms_load, mod_sms_shutdown, NULL);
 
 
+static void send_report(switch_event_t *event, const char * Status) {
+       switch_event_t *report = NULL;
+       switch_event_header_t *header;
+
+       if (switch_event_create_subclass(&report, SWITCH_EVENT_CUSTOM, MY_EVENT_DELIVERY_REPORT) == SWITCH_STATUS_SUCCESS) {
+
+               switch_event_add_header_string(report, SWITCH_STACK_BOTTOM, "Status", Status);
+
+
+               for (header = event->headers; header; header = header->next) {
+                       if (!strcmp(header->name, "Event-Subclass")) {
+                               continue;
+                       }
+                       if (!strcmp(header->name, "Event-Name")) {
+                               continue;
+                       }
+               if (header->idx) {
+                   int i;
+                   for (i = 0; i < header->idx; i++) {
+                       switch_event_add_header_string(report, SWITCH_STACK_PUSH, header->name, header->array[i]);
+                   }
+               } else {
+                   switch_event_add_header_string(report, SWITCH_STACK_BOTTOM, header->name, header->value);
+               }
+               }
+               switch_event_fire(&report);
+       }
+}
+
 static void event_handler(switch_event_t *event) 
 {
        const char *dest_proto = switch_event_get_header(event, "dest_proto");
@@ -52,13 +82,15 @@ static void event_handler(switch_event_t *event)
 
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Delivery Failure\n");
                DUMP_EVENT(event);
-
+               send_report(event, "Failure");
                return;
        } else if ( check_failure && switch_false(check_failure) ) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SMS Delivery Success\n");
+               send_report(event, "Success");
                return;
        } else if ( check_nonblocking && switch_true(check_nonblocking) ) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SMS Delivery assumed successful due to being sent in non-blocking manner\n");
+               send_report(event, "Accepted");
                return;
        }