]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix MODEVENT-34
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 12 Dec 2008 15:44:37 +0000 (15:44 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 12 Dec 2008 15:44:37 +0000 (15:44 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10731 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/event_handlers/mod_event_socket/mod_event_socket.c

index 8f03a70de6d74bf8a7950e3aaeaeda2de7d7db64..9aa285056d78cf740c4536110ab5eb0af7b29833 100644 (file)
@@ -48,7 +48,8 @@ typedef enum {
        LFLAG_MYEVENTS = (1 << 5),
        LFLAG_SESSION = (1 << 6),
        LFLAG_ASYNC = (1 << 7),
-       LFLAG_STATEFUL = (1 << 8)
+       LFLAG_STATEFUL = (1 << 8),
+       LFLAG_OUTBOUND = (1 << 9)
 } event_flag_t;
 
 typedef enum {
@@ -403,6 +404,7 @@ SWITCH_STANDARD_APP(socket_function)
 
        switch_core_hash_init(&listener->event_hash, listener->pool);
        switch_set_flag(listener, LFLAG_AUTHED);
+       switch_set_flag(listener, LFLAG_OUTBOUND);
        for (x = 1; x < argc; x++) {
                if (argv[x] && !strcasecmp(argv[x], "full")) {
                        switch_set_flag(listener, LFLAG_FULL);
@@ -1294,39 +1296,12 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
                        switch_snprintf(reply, reply_len, "+OK Events Enabled");
                        goto done;
                }
-
-               if (!switch_test_flag(listener, LFLAG_FULL)) {
-                       goto done;
-               }
        }
 
-       if (!strncasecmp(cmd, "sendevent", 9)) {
-               char *ename;
-               strip_cr(cmd);
-
-               ename = cmd + 9;
 
-               while (ename && (*ename == '\t' || *ename == ' ')) {
-                       ++ename;
-               }
-
-               if (ename && (*ename == '\r' || *ename == '\n')) {
-                       ename = NULL;
-               }
-
-               if (ename) {
-                       switch_event_types_t etype;
-                       if (switch_name_event(ename, &etype) == SWITCH_STATUS_SUCCESS) {
-                               (*event)->event_id = etype;
-                       }
-               }
-
-               switch_event_fire(event);
-               switch_snprintf(reply, reply_len, "+OK");
-               goto done;
-       } else if (!strncasecmp(cmd, "sendmsg", 7)) {
+       if (!strncasecmp(cmd, "sendmsg", 7)) {
                switch_core_session_t *session;
-               char *uuid = cmd + 8;
+               char *uuid = cmd + 7;
 
                if (uuid) {
                        while (*uuid == ' ') {
@@ -1343,7 +1318,7 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
                if (switch_strlen_zero(uuid)) {
                        uuid = switch_event_get_header(*event, "session-id");
                }
-               
+
                if (switch_strlen_zero(uuid) && listener->session) {
                        if (switch_test_flag(listener, LFLAG_ASYNC)) {
                                if ((status = switch_core_session_queue_private_event(listener->session, event)) == SWITCH_STATUS_SUCCESS) {
@@ -1370,6 +1345,37 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
                
                goto done;
 
+       }
+       
+       if (switch_test_flag(listener, LFLAG_OUTBOUND) && !switch_test_flag(listener, LFLAG_FULL)) {
+               goto done;
+       }
+
+
+       if (!strncasecmp(cmd, "sendevent", 9)) {
+               char *ename;
+               strip_cr(cmd);
+
+               ename = cmd + 9;
+
+               while (ename && (*ename == '\t' || *ename == ' ')) {
+                       ++ename;
+               }
+
+               if (ename && (*ename == '\r' || *ename == '\n')) {
+                       ename = NULL;
+               }
+
+               if (ename) {
+                       switch_event_types_t etype;
+                       if (switch_name_event(ename, &etype) == SWITCH_STATUS_SUCCESS) {
+                               (*event)->event_id = etype;
+                       }
+               }
+
+               switch_event_fire(event);
+               switch_snprintf(reply, reply_len, "+OK");
+               goto done;
        } else if (!strncasecmp(cmd, "api ", 4)) {
                struct api_command_struct acs = { 0 };
                char *api_cmd = cmd + 4;
@@ -1965,6 +1971,7 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime)
                listener->pool = listener_pool;
                listener_pool = NULL;
                listener->format = EVENT_FORMAT_PLAIN;
+               switch_set_flag(listener, LFLAG_FULL);
                switch_mutex_init(&listener->flag_mutex, SWITCH_MUTEX_NESTED, listener->pool);
                switch_mutex_init(&listener->filter_mutex, SWITCH_MUTEX_NESTED, listener->pool);