diff --git a/src/include/switch_caller.h b/src/include/switch_caller.h index b248bf1eb1..738685caae 100644 --- a/src/include/switch_caller.h +++ b/src/include/switch_caller.h @@ -92,6 +92,7 @@ extern "C" { SWITCH_DECLARE(switch_caller_profile *) switch_caller_profile_clone(switch_core_session *session, switch_caller_profile *tocopy); + SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile *caller_profile, switch_event *event); #ifdef __cplusplus diff --git a/src/include/switch_event.h b/src/include/switch_event.h index 21bb02605d..92229fc990 100644 --- a/src/include/switch_event.h +++ b/src/include/switch_event.h @@ -75,7 +75,7 @@ SWITCH_DECLARE(switch_status) switch_event_shutdown(void); SWITCH_DECLARE(switch_status) switch_event_init(switch_memory_pool *pool); SWITCH_DECLARE(switch_status) switch_event_create_subclass(switch_event **event, switch_event_t event_id, char *subclass_name); SWITCH_DECLARE(char *) switch_event_get_header(switch_event *event, char *header_name); -SWITCH_DECLARE(switch_status) switch_event_add_header(switch_event *event, char *header_name, char *fmt, ...); +SWITCH_DECLARE(switch_status) switch_event_add_header(switch_event *event, switch_stack_t stack, char *header_name, char *fmt, ...); SWITCH_DECLARE(void) switch_event_destroy(switch_event **event); SWITCH_DECLARE(switch_status) switch_event_dup(switch_event **event, switch_event *todup); SWITCH_DECLARE(switch_status) switch_event_fire_detailed(char *file, char *func, int line, switch_event **event, void *user_data); @@ -90,5 +90,4 @@ SWITCH_DECLARE(switch_status) switch_event_add_body(switch_event *event, char *f #define switch_event_create(event, id) switch_event_create_subclass(event, id, SWITCH_EVENT_SUBCLASS_ANY) #define switch_event_fire(event) switch_event_fire_detailed(__FILE__, (char * )__FUNCTION__, __LINE__, event, NULL) #define switch_event_fire_data(event, data) switch_event_fire_detailed(__FILE__, (char * )__FUNCTION__, __LINE__, event, data) - #endif diff --git a/src/include/switch_types.h b/src/include/switch_types.h index d155d3925d..087bd82159 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -40,6 +40,11 @@ extern "C" { #define SWITCH_GLOBAL_VERSION "1" #define SWITCH_MAX_CODECS 30 +typedef enum { + SWITCH_STACK_BOTTOM, + SWITCH_STACK_TOP +} switch_stack_t; + typedef enum { SWITCH_STATUS_SUCCESS, SWITCH_STATUS_FALSE, @@ -132,7 +137,6 @@ typedef enum { SWITCH_EVENT_ANSWER_CHAN, SWITCH_EVENT_HANGUP_CHAN, SWITCH_EVENT_STARTUP, - SWITCH_EVENT_EVENT_SHUTDOWN, SWITCH_EVENT_SHUTDOWN, SWITCH_EVENT_ALL } switch_event_t; diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 6cd55afc3d..8fd858a471 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -69,6 +69,7 @@ SWITCH_DECLARE(unsigned int) switch_separate_string(char *buf, char delim, char SWITCH_DECLARE(switch_status) switch_socket_create_pollfd(switch_pollfd_t *poll, switch_socket_t *sock, unsigned int flags, switch_memory_pool *pool); SWITCH_DECLARE(int) switch_socket_waitfor(switch_pollfd_t *poll, int ms); SWITCH_DECLARE(void) switch_swap_linear(int16_t *buf, int len); +SWITCH_DECLARE(char *) switch_cut_path(char *in); #if !defined(switch_strdupa) && defined(__GNUC__) # define switch_strdupa(s) \ diff --git a/src/mod/mod_portaudio/mod_portaudio.c b/src/mod/mod_portaudio/mod_portaudio.c index bfbbf33139..f7fe818d09 100644 --- a/src/mod/mod_portaudio/mod_portaudio.c +++ b/src/mod/mod_portaudio/mod_portaudio.c @@ -271,7 +271,7 @@ static switch_status channel_on_transmit(switch_core_session *session) snprintf(buf, sizeof(buf), "BRRRRING! BRRRRING! call %s\n", tech_pvt->call_id); if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_RINGING) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, "event_info", buf); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_info", buf); switch_event_fire(&event); } diff --git a/src/mod/mod_xmpp_event/mod_xmpp_event.c b/src/mod/mod_xmpp_event/mod_xmpp_event.c index 03ab8d5ff8..76dcb9eca3 100644 --- a/src/mod/mod_xmpp_event/mod_xmpp_event.c +++ b/src/mod/mod_xmpp_event/mod_xmpp_event.c @@ -62,9 +62,14 @@ static void event_handler (switch_event *event) { char buf[1024]; iks *msg; + int loops = 0; - if (!globals.session.authorized) { - return; + while (!globals.session.authorized) { + switch_yield(100000); + if (loops++ > 5) { + switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Nothing to do with this Event!\n"); + return; + } } switch(event->event_id) { diff --git a/src/switch.c b/src/switch.c index 868484f139..7e060969ba 100644 --- a/src/switch.c +++ b/src/switch.c @@ -53,7 +53,7 @@ int main(int argc, char *argv[]) { } if (switch_event_create(&event, SWITCH_EVENT_STARTUP) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, "event_info", "System Ready"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Info", "System Ready"); switch_event_fire(&event); } @@ -63,7 +63,7 @@ int main(int argc, char *argv[]) { switch_console_loop(); if (switch_event_create(&event, SWITCH_EVENT_SHUTDOWN) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, "event_info", "System Shutting Down"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Info", "System Shutting Down"); switch_event_fire(&event); } diff --git a/src/switch_caller.c b/src/switch_caller.c index 54032df92a..dc0be92184 100644 --- a/src/switch_caller.c +++ b/src/switch_caller.c @@ -75,6 +75,33 @@ SWITCH_DECLARE(switch_caller_profile *) switch_caller_profile_clone(switch_core_ return profile; } +SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile *caller_profile, switch_event *event) + +{ + if (caller_profile->dialplan) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Dialplan", caller_profile->dialplan); + } + if (caller_profile->caller_id_name) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Caller-ID-Name", caller_profile->caller_id_name); + } + if (caller_profile->caller_id_number) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Caller-ID-Number", caller_profile->caller_id_number); + } + if (caller_profile->network_addr) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Network-Addr", caller_profile->network_addr); + } + if (caller_profile->ani) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-ANI", caller_profile->ani); + } + if (caller_profile->ani2) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-ANI2", caller_profile->ani2); + } + if (caller_profile->destination_number) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Destination-Number", caller_profile->destination_number); + } + +} + SWITCH_DECLARE(switch_caller_extension *) switch_caller_extension_new(switch_core_session *session, char *extension_name, char *extension_number @@ -117,3 +144,4 @@ SWITCH_DECLARE(void) switch_caller_extension_add_application(switch_core_session } + diff --git a/src/switch_channel.c b/src/switch_channel.c index d5603d929d..44d028719a 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -153,7 +153,7 @@ SWITCH_DECLARE(int) switch_channel_dequeue_dtmf(switch_channel *channel, char *d if (bytes && switch_event_create(&event, SWITCH_EVENT_CHANNEL_ANSWER) == SWITCH_STATUS_SUCCESS) { switch_channel_event_set_data(channel, event); - switch_event_add_header(event, "dtmf_string", dtmf); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-String", dtmf); switch_event_fire(&event); } @@ -405,59 +405,21 @@ SWITCH_DECLARE(void) switch_channel_event_set_data(switch_channel *channel, swit caller_profile = switch_channel_get_caller_profile(channel); originator_caller_profile = switch_channel_get_originator_caller_profile(channel); - switch_event_add_header(event, "channel_state", (char *) switch_channel_state_name(channel->state)); - switch_event_add_header(event, "channel_name", switch_channel_get_name(channel)); - switch_event_add_header(event, "unique_id", switch_core_session_get_uuid(channel->session)); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-State", (char *) switch_channel_state_name(channel->state)); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Name", switch_channel_get_name(channel)); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(channel->session)); /* Index Caller's Profile */ if (caller_profile) { - if (caller_profile->dialplan) { - switch_event_add_header(event, "channel_dialplan", caller_profile->dialplan); - } - if (caller_profile->caller_id_name) { - switch_event_add_header(event, "channel_caller_id_name", caller_profile->caller_id_name); - } - if (caller_profile->caller_id_number) { - switch_event_add_header(event, "channel_caller_id_number", caller_profile->caller_id_number); - } - if (caller_profile->network_addr) { - switch_event_add_header(event, "channel_network_addr", caller_profile->network_addr); - } - if (caller_profile->ani) { - switch_event_add_header(event, "channel_ani", caller_profile->ani); - } - if (caller_profile->ani2) { - switch_event_add_header(event, "channel_ani2", caller_profile->ani2); - } - if (caller_profile->destination_number) { - switch_event_add_header(event, "channel_destination_number", caller_profile->destination_number); - } + switch_caller_profile_event_set_data(caller_profile, event); } + /* Index Originator's Profile */ if (originator_caller_profile) { - if (originator_caller_profile->dialplan) { - switch_event_add_header(event, "channel_dialplan", originator_caller_profile->dialplan); - } - if (originator_caller_profile->caller_id_name) { - switch_event_add_header(event, "channel_caller_id_name", originator_caller_profile->caller_id_name); - } - if (originator_caller_profile->caller_id_number) { - switch_event_add_header(event, "channel_caller_id_number", originator_caller_profile->caller_id_number); - } - if (originator_caller_profile->network_addr) { - switch_event_add_header(event, "channel_network_addr", originator_caller_profile->network_addr); - } - if (originator_caller_profile->ani) { - switch_event_add_header(event, "channel_ani", originator_caller_profile->ani); - } - if (originator_caller_profile->ani2) { - switch_event_add_header(event, "channel_ani2", originator_caller_profile->ani2); - } - if (originator_caller_profile->destination_number) { - switch_event_add_header(event, "channel_destination_number", originator_caller_profile->destination_number); - } + switch_caller_profile_event_set_data(originator_caller_profile, event); } + /* Index Variables */ for (hi = switch_hash_first(switch_core_session_get_pool(channel->session), channel->variables); hi; hi = switch_hash_next(hi)) { char buf[1024]; @@ -465,7 +427,7 @@ SWITCH_DECLARE(void) switch_channel_event_set_data(switch_channel *channel, swit switch_hash_this(hi, &var, NULL, &val); subclass = val; snprintf(buf, sizeof(buf), "variable_%s", (char *) var); - switch_event_add_header(event, buf, (char *) val); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, buf, (char *) val); } diff --git a/src/switch_console.c b/src/switch_console.c index be7d8560e5..96f5c28d5a 100644 --- a/src/switch_console.c +++ b/src/switch_console.c @@ -87,19 +87,12 @@ SWITCH_DECLARE(void) switch_console_printf(switch_text_channel channel, char *fi int ret = 0; va_list ap; FILE *handle; - char *filep = file, *p; + char *filep = switch_cut_path(file); va_start(ap, fmt); handle = switch_core_data_channel(channel); - while((p = strchr(filep, '/'))) { - filep = p + 1; - } - while((p = strchr(filep, '\\'))) { - filep = p + 1; - } - #ifdef HAVE_VASPRINTF ret = vasprintf(&data, fmt, ap); #else @@ -129,10 +122,10 @@ SWITCH_DECLARE(void) switch_console_printf(switch_text_channel channel, char *fi switch_event_running() == SWITCH_STATUS_SUCCESS && switch_event_create(&event, SWITCH_EVENT_LOG) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, "log_data", "%s", data); - switch_event_add_header(event, "log_file", "%s", filep); - switch_event_add_header(event, "log_function", "%s", func); - switch_event_add_header(event, "log_line", "%d", line); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-Data", "%s", data); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-File", "%s", filep); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-Function", "%s", func); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-Line", "%d", line); switch_event_fire(&event); } free(data); diff --git a/src/switch_event.c b/src/switch_event.c index 076007967f..49ad19212c 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -97,7 +97,6 @@ static char *EVENT_NAMES[] = { "ANSWER_CHAN", "HANGUP_CHAN", "STARTUP", - "EVENT_SHUTDOWN", "SHUTDOWN", "ALL" }; @@ -234,13 +233,6 @@ SWITCH_DECLARE(switch_status) switch_event_reserve_subclass_detailed(char *owner SWITCH_DECLARE(switch_status) switch_event_shutdown(void) { - switch_event *event; - - if (switch_event_create(&event, SWITCH_EVENT_EVENT_SHUTDOWN) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, "event_info", "Event System Shutting Down"); - switch_event_fire(&event); - } - THREAD_RUNNING = -1; while(THREAD_RUNNING) { @@ -327,7 +319,7 @@ SWITCH_DECLARE(char *) switch_event_get_header(switch_event *event, char *header return NULL; } -SWITCH_DECLARE(switch_status) switch_event_add_header(switch_event *event, char *header_name, char *fmt, ...) +SWITCH_DECLARE(switch_status) switch_event_add_header(switch_event *event, switch_stack_t stack, char *header_name, char *fmt, ...) { int ret = 0; char data[2048]; @@ -351,15 +343,18 @@ SWITCH_DECLARE(switch_status) switch_event_add_header(switch_event *event, char header->name = DUP(header_name); header->value = DUP(data); - - for (hp = event->headers; hp && hp->next; hp = hp->next); - - if (hp) { - hp->next = header; - } else { + if (stack = SWITCH_STACK_TOP) { + header->next = event->headers; event->headers = header; - } + } else { + for (hp = event->headers; hp && hp->next; hp = hp->next); + if (hp) { + hp->next = header; + } else { + event->headers = header; + } + } return SWITCH_STATUS_SUCCESS; } @@ -444,7 +439,7 @@ SWITCH_DECLARE(switch_status) switch_event_dup(switch_event **event, switch_even SWITCH_DECLARE(switch_status) switch_event_serialize(switch_event *event, char *buf, size_t buflen, char *fmt, ...) { - size_t len; + size_t len = 0; switch_event_header *hp; char *data = NULL, *body = NULL; int ret = 0; @@ -464,12 +459,6 @@ SWITCH_DECLARE(switch_status) switch_event_serialize(switch_event *event, char * } } - snprintf(buf, buflen, "event_name: %s\n", switch_event_name(event->event_id)); - len = strlen(buf); - if (event->subclass) { - snprintf(buf+len, buflen-len, "subclass-name: %s\nowner: %s", event->subclass->name, event->subclass->owner); - } - len = strlen(buf); for (hp = event->headers; hp; hp = hp->next) { snprintf(buf+len, buflen-len, "%s: %s\n", hp->name, hp->value); len = strlen(buf); @@ -518,17 +507,21 @@ SWITCH_DECLARE(switch_status) switch_event_fire_detailed(char *file, char *func, } - switch_rfc822_date(date, switch_time_now()); - switch_event_add_header(*event, "event_date_gmt", date); - + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Calling-Line-Number", "%d", line); + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Calling-Function", func); + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Calling-File", switch_cut_path(file)); switch_time_exp_lt(&tm, switch_time_now()); switch_strftime(date, &retsize, sizeof(date), "%a, %d-%b-%Y %X", &tm); - switch_event_add_header(*event, "event_date_local", date); + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Date-Local", date); + switch_rfc822_date(date, switch_time_now()); + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Date-GMT", date); + if ((*event)->subclass) { + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Subclass", (*event)->subclass->name); + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Subclass-Owner", (*event)->subclass->owner); + } + switch_event_add_header(*event, SWITCH_STACK_TOP, "Event-Name", switch_event_name((*event)->event_id)); + - switch_event_add_header(*event, "event_file", file); - switch_event_add_header(*event, "event_function", func); - switch_event_add_header(*event, "event_line_number", "%d", line); - if (user_data) { (*event)->event_user_data = user_data; } diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 882d7936d2..d35f1b0323 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -422,10 +422,10 @@ SWITCH_DECLARE(switch_status) switch_api_execute(char *cmd, char *arg, char *ret if (switch_event_create(&event, SWITCH_EVENT_API) == SWITCH_STATUS_SUCCESS) { if (cmd) { - switch_event_add_header(event, "re_command", cmd); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "API-Command", cmd); } if (arg) { - switch_event_add_header(event, "re_command_arg", arg); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "API-Command-Arguement", arg); } switch_event_add_body(event, retbuf); switch_event_fire(&event); diff --git a/src/switch_utils.c b/src/switch_utils.c index 8a6d604abd..8260d3bc13 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -31,6 +31,22 @@ */ #include +SWITCH_DECLARE(char *) switch_cut_path(char *in) +{ + char *p, *ret = in; + char delims[] = "/\\"; + char *i; + + for(i = delims; *i; i++) { + p = in; + while((p = strchr(p, *i))) { + ret = ++p; + } + } + return ret; +} + + SWITCH_DECLARE(void) switch_swap_linear(int16_t *buf, int len) { int i;