]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
put presence data in state events
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 1 Jun 2012 18:21:12 +0000 (13:21 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 1 Jun 2012 18:21:12 +0000 (13:21 -0500)
src/switch_channel.c
src/switch_core_sqldb.c

index 138123f3eb20118a3da677b35144294817990d59..94c9a35cfe7608251dd527d677b93ea7b861c742 100644 (file)
@@ -1928,6 +1928,8 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_running_state(
                        if (state == CS_ROUTING) {
                                switch_channel_event_set_data(channel, event);
                        } else {
+                               const char *v;
+                               
                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-State", switch_channel_state_name(state));
                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", switch_channel_callstate2str(channel->callstate));
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-State-Number", "%d", state);
@@ -1951,6 +1953,21 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_running_state(
                                } else {
                                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "ringing");
                                }
+
+
+                               if ((v = switch_channel_get_variable(channel, "presence_id"))) {
+                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Presence-ID", v);
+                               }
+                               
+                               if ((v = switch_channel_get_variable(channel, "presence_data"))) {
+                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Presence-Data", v);
+                               }
+                               
+                               if ((v = switch_channel_get_variable(channel, "presence_data_cols"))) {
+                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Presence-Data-Cols", v);
+                                       switch_event_add_presence_data_cols(channel, event, "PD-");
+                               }
+                               
                        }
                        switch_event_fire(&event);
                }
index 9b40674065605d021ed7350bf2ea062ca2a29e8d..eea6a4372d651818d907a2cb567c1c55248f6b66 100644 (file)
@@ -1407,6 +1407,20 @@ static void core_event_handler(switch_event_t *event)
                        case CS_DESTROY:
                        case CS_REPORTING:
                                break;
+                       case CS_EXECUTE:
+                               if ((extra_cols = parse_presence_data_cols(event))) {
+                                       new_sql() = switch_mprintf("update channels set state='%s',%s where uuid='%q'",
+                                                                                          switch_event_get_header_nil(event, "channel-state"),
+                                                                                          extra_cols,
+                                                                                          switch_event_get_header_nil(event, "unique-id"));
+                                       free(extra_cols);
+                                       
+                               } else {
+                                       new_sql() = switch_mprintf("update channels set state='%s' where uuid='%s'",
+                                                                                          switch_event_get_header_nil(event, "channel-state"),
+                                                                                          switch_event_get_header_nil(event, "unique-id"));
+                               }
+                               break;
                        case CS_ROUTING:
                                if ((extra_cols = parse_presence_data_cols(event))) {
                                        new_sql() = switch_mprintf("update channels set state='%s',cid_name='%q',cid_num='%q',callee_name='%q',callee_num='%q',"