]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
tweak fifo and add app_flags
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 22 Jan 2009 14:01:15 +0000 (14:01 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 22 Jan 2009 14:01:15 +0000 (14:01 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11356 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_channel.h
src/include/switch_types.h
src/mod/applications/mod_fifo/mod_fifo.c
src/switch_channel.c

index 00e6afedb22bd460f6f89e77c1835f04c3c17204..7cbcc9c4799fe7243740470327329ab0410d5520 100644 (file)
@@ -504,6 +504,10 @@ SWITCH_DECLARE(void) switch_channel_set_private_flag(switch_channel_t *channel,
 SWITCH_DECLARE(void) switch_channel_clear_private_flag(switch_channel_t *channel, uint32_t flags);
 SWITCH_DECLARE(int) switch_channel_test_private_flag(switch_channel_t *channel, uint32_t flags);
 
+SWITCH_DECLARE(void) switch_channel_set_app_flag(switch_channel_t *channel, uint32_t flags);
+SWITCH_DECLARE(void) switch_channel_clear_app_flag(switch_channel_t *channel, uint32_t flags);
+SWITCH_DECLARE(int) switch_channel_test_app_flag(switch_channel_t *channel, uint32_t flags);
+
 /** @} */
 
 SWITCH_END_EXTERN_C
index 6ab295a556dd8c7b8a5621d6cd021c9320d865e1..ee4ddf83923435c885e4e608c5466f1cd2984339 100644 (file)
@@ -846,6 +846,12 @@ typedef enum {
        CF_FLAG_MAX
 } switch_channel_flag_t;
 
+
+typedef enum {
+       CF_APP_TAGGED = (1 << 0)
+} switch_channel_app_flag_t;
+
+
 /*!
   \enum switch_frame_flag_t
   \brief Frame Flags
index 85f07b4597b4fd4de9a3056ab5a65974d5c22c76..d21449f45772d139dadaa48a762e2f59ef4e37f0 100644 (file)
@@ -42,7 +42,6 @@ SWITCH_MODULE_DEFINITION(mod_fifo, mod_fifo_load, mod_fifo_shutdown, NULL);
 static switch_status_t load_config(int reload, int del_all);
 #define MAX_PRI 10
 
-
 struct fifo_node {
        char *name;
        switch_mutex_t *mutex;
@@ -847,8 +846,9 @@ SWITCH_STANDARD_APP(fifo_function)
                switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm);
                switch_channel_set_variable(channel, "fifo_status", "WAITING");
                switch_channel_set_variable(channel, "fifo_timestamp", date);
+               switch_channel_set_variable(channel, "fifo_serviced_uuid", NULL);
 
-               switch_channel_set_flag(channel, CF_TAGGED);
+               switch_channel_set_app_flag(channel, CF_APP_TAGGED);
 
                if (chime_list) {
                        char *list_dup = switch_core_session_strdup(session, chime_list);
@@ -878,7 +878,6 @@ SWITCH_STANDARD_APP(fifo_function)
                        }
 
                        if ((serviced_uuid = switch_channel_get_variable(channel, "fifo_serviced_uuid"))) {
-                               switch_channel_set_variable(channel, "fifo_serviced_uuid", NULL);
                                break;
                        }
 
@@ -921,7 +920,7 @@ SWITCH_STANDARD_APP(fifo_function)
                        }
                }
 
-               switch_channel_clear_flag(channel, CF_TAGGED);
+               switch_channel_clear_app_flag(channel, CF_APP_TAGGED);
 
          abort:
 
@@ -1176,7 +1175,7 @@ SWITCH_STANDARD_APP(fifo_function)
 
                                switch_channel_set_flag(other_channel, CF_BREAK);
 
-                               while (switch_channel_ready(channel) && switch_channel_ready(other_channel) && switch_channel_test_flag(other_channel, CF_TAGGED)) {
+                               while (switch_channel_ready(channel) && switch_channel_ready(other_channel) && switch_channel_test_app_flag(other_channel, CF_APP_TAGGED)) {
                                        status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
                                        if (!SWITCH_READ_ACCEPTABLE(status)) {
                                                break;
index 36893d49d8ac6275cb4ca3bcf491a55506a2285f..18cfaa0fb462af36812e43a9b4e5a73af7fdc323 100644 (file)
@@ -118,6 +118,7 @@ struct switch_channel {
        uint8_t flags[CF_FLAG_MAX];
        uint8_t state_flags[CF_FLAG_MAX];
        uint32_t private_flags;
+       uint32_t app_flags;
        switch_caller_profile_t *caller_profile;
        const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS];
        int state_handler_index;
@@ -789,6 +790,32 @@ SWITCH_DECLARE(int) switch_channel_test_private_flag(switch_channel_t *channel,
        return (channel->private_flags & flags);
 }
 
+SWITCH_DECLARE(void) switch_channel_set_app_flag(switch_channel_t *channel, uint32_t flags)
+{
+       switch_assert(channel != NULL);
+       switch_mutex_lock(channel->flag_mutex);
+       channel->app_flags |= flags;
+       switch_mutex_unlock(channel->flag_mutex);
+}
+
+SWITCH_DECLARE(void) switch_channel_clear_app_flag(switch_channel_t *channel, uint32_t flags)
+{
+       switch_assert(channel != NULL);
+       switch_mutex_lock(channel->flag_mutex);
+       if (!flags) {
+               channel->app_flags = 0;
+       } else {
+               channel->app_flags &= ~flags;
+       }
+       switch_mutex_unlock(channel->flag_mutex);
+}
+
+SWITCH_DECLARE(int) switch_channel_test_app_flag(switch_channel_t *channel, uint32_t flags)
+{
+       switch_assert(channel != NULL);
+       return (channel->app_flags & flags);
+}
+
 SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flag)
 {
        switch_assert(channel != NULL);