diff --git a/src/include/switch_types.h b/src/include/switch_types.h index be681e82bd..5fa11ce626 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -776,7 +776,8 @@ typedef enum { CF_STOP_BROADCAST = (1 << 26), CF_PROXY_MEDIA = (1 << 27), CF_INNER_BRIDGE = (1 << 28), - CF_REQ_MEDIA = (1 << 29) + CF_REQ_MEDIA = (1 << 29), + CF_VERBOSE_EVENTS = (1 << 30) } switch_channel_flag_enum_t; typedef uint32_t switch_channel_flag_t; @@ -1026,7 +1027,8 @@ typedef uint32_t switch_io_flag_t; SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE - A channel has finshed executing a module's application SWITCH_EVENT_CHANNEL_BRIDGE - A channel has bridged to another channel SWITCH_EVENT_CHANNEL_UNBRIDGE - A channel has unbridged from another channel - SWITCH_EVENT_CHANNEL_PROGRESS - A channel has been parked + SWITCH_EVENT_CHANNEL_PROGRESS - A channel has started ringing + SWITCH_EVENT_CHANNEL_PROGRESS_MEDIA - A channel has started early media SWITCH_EVENT_CHANNEL_OUTGOING - A channel has been unparked SWITCH_EVENT_CHANNEL_PARK - A channel has been parked SWITCH_EVENT_CHANNEL_UNPARK - A channel has been unparked @@ -1083,6 +1085,7 @@ typedef enum { SWITCH_EVENT_CHANNEL_BRIDGE, SWITCH_EVENT_CHANNEL_UNBRIDGE, SWITCH_EVENT_CHANNEL_PROGRESS, + SWITCH_EVENT_CHANNEL_PROGRESS_MEDIA, SWITCH_EVENT_CHANNEL_OUTGOING, SWITCH_EVENT_CHANNEL_PARK, SWITCH_EVENT_CHANNEL_UNPARK, diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index a3793baa6d..5188c24a21 100644 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -2144,6 +2144,11 @@ SWITCH_STANDARD_APP(unhold_function) switch_ivr_unhold_uuid(switch_core_session_get_uuid(session)); } +SWITCH_STANDARD_APP(verbose_events_function) +{ + switch_channel_set_flag(switch_core_session_get_channel(session), CF_VERBOSE_EVENTS); +} + #define WAIT_FOR_SILENCE_SYNTAX " []" SWITCH_STANDARD_APP(wait_for_silence_function) { @@ -2279,7 +2284,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load) SWITCH_ADD_CHAT(chat_interface, "event", event_chat_send); SWITCH_ADD_CHAT(chat_interface, "api", api_chat_send); - + SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, ""); SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "|||"); SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, ""); @@ -2293,6 +2298,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load) SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "check_acl", "Check an ip against an ACL list", "Check an ip against an ACL list", check_acl_function, " []", SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_APP(app_interface, "verbose_events", "Make ALL Events verbose.", "Make ALL Events verbose.", verbose_events_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "sleep", "Pause a channel", SLEEP_LONG_DESC, sleep_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "delay_echo", "echo audio at a specified delay", "Delay n ms", delay_function, "", SAF_NONE); SWITCH_ADD_APP(app_interface, "strftime", "strftime", "strftime", strftime_function, "[|]", SAF_SUPPORT_NOMEDIA); diff --git a/src/switch_channel.c b/src/switch_channel.c index 838abe5f7f..4fa67f1bef 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -1129,41 +1129,51 @@ SWITCH_DECLARE(void) switch_channel_event_set_data(switch_channel_t *channel, sw switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Rate", "%u", codec->implementation->actual_samples_per_second); } - /* Index Caller's Profile */ - if (caller_profile) { - switch_caller_profile_event_set_data(caller_profile, "Caller", event); - } + if (switch_test_flag(channel, CF_VERBOSE_EVENTS) || + event->event_id == SWITCH_EVENT_CHANNEL_ORIGINATE || + event->event_id == SWITCH_EVENT_CHANNEL_ANSWER || + event->event_id == SWITCH_EVENT_CHANNEL_PROGRESS || + event->event_id == SWITCH_EVENT_CHANNEL_PROGRESS_MEDIA || + event->event_id == SWITCH_EVENT_CHANNEL_HANGUP + ) { - if (originator_caller_profile && originatee_caller_profile) { - /* Index Originator's Profile */ - switch_caller_profile_event_set_data(originator_caller_profile, "Originator", event); + /* Index Caller's Profile */ + if (caller_profile) { + switch_caller_profile_event_set_data(caller_profile, "Caller", event); + } - /* Index Originatee's Profile */ - switch_caller_profile_event_set_data(originatee_caller_profile, "Originatee", event); - } else { - /* Index Originator's Profile */ - if (originator_caller_profile) { - switch_caller_profile_event_set_data(originator_caller_profile, "Other-Leg", event); - } else if (originatee_caller_profile) { /* Index Originatee's Profile */ - switch_caller_profile_event_set_data(originatee_caller_profile, "Other-Leg", event); + if (originator_caller_profile && originatee_caller_profile) { + /* Index Originator's Profile */ + switch_caller_profile_event_set_data(originator_caller_profile, "Originator", event); + + /* Index Originatee's Profile */ + switch_caller_profile_event_set_data(originatee_caller_profile, "Originatee", event); + } else { + /* Index Originator's Profile */ + if (originator_caller_profile) { + switch_caller_profile_event_set_data(originator_caller_profile, "Other-Leg", event); + } else if (originatee_caller_profile) { /* Index Originatee's Profile */ + switch_caller_profile_event_set_data(originatee_caller_profile, "Other-Leg", event); + } + } + x = 0; + /* Index Variables */ + if (channel->variables) { + for (hi = channel->variables->headers; hi; hi = hi->next) { + char buf[1024]; + char *vvar = NULL, *vval = NULL; + + vvar = (char *) hi->name; + vval = (char *) hi->value; + x++; + + switch_assert(vvar && vval); + switch_snprintf(buf, sizeof(buf), "variable_%s", vvar); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, vval); + } } } - x = 0; - /* Index Variables */ - if (channel->variables) { - for (hi = channel->variables->headers; hi; hi = hi->next) { - char buf[1024]; - char *vvar = NULL, *vval = NULL; - vvar = (char *) hi->name; - vval = (char *) hi->value; - x++; - - switch_assert(vvar && vval); - switch_snprintf(buf, sizeof(buf), "variable_%s", vvar); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, vval); - } - } switch_mutex_unlock(channel->profile_mutex); } @@ -1414,12 +1424,7 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_hangup(switch_chan channel->hangup_cause = hangup_cause; switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_NOTICE, "Hangup %s [%s] [%s]\n", channel->name, state_names[last_state], switch_channel_cause2str(channel->hangup_cause)); - if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(channel->hangup_cause)); - switch_channel_event_set_data(channel, event); - switch_event_fire(&event); - } - + switch_channel_set_variable(channel, "hangup_cause", switch_channel_cause2str(channel->hangup_cause)); switch_channel_presence(channel, "unavailable", switch_channel_cause2str(channel->hangup_cause), NULL); @@ -1427,6 +1432,13 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_hangup(switch_chan switch_core_session_signal_state_change(channel->session); switch_channel_set_timestamps(channel); + + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(channel->hangup_cause)); + switch_channel_event_set_data(channel, event); + switch_event_fire(&event); + } + } switch_mutex_unlock(channel->flag_mutex); @@ -1437,6 +1449,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_ring_ready(switch_ch { const char *var; char *app; + switch_event_t *event; if (!switch_channel_test_flag(channel, CF_RING_READY)) { switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_NOTICE, "Ring-Ready %s!\n", channel->name); @@ -1447,6 +1460,11 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_ring_ready(switch_ch switch_mutex_unlock(channel->profile_mutex); } + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_PROGRESS) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(channel, event); + switch_event_fire(&event); + } + var = switch_channel_get_variable(channel, SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE); if (var) { char *arg = NULL; @@ -1477,7 +1495,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_ switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_NOTICE, "Pre-Answer %s!\n", channel->name); switch_channel_set_flag(channel, CF_EARLY_MEDIA); switch_channel_set_variable(channel, "endpoint_disposition", "EARLY MEDIA"); - if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_PROGRESS) == SWITCH_STATUS_SUCCESS) { + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_PROGRESS_MEDIA) == SWITCH_STATUS_SUCCESS) { switch_channel_event_set_data(channel, event); switch_event_fire(&event); } diff --git a/src/switch_event.c b/src/switch_event.c index 6b22128d4d..5c22843e05 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -119,6 +119,7 @@ static char *EVENT_NAMES[] = { "CHANNEL_BRIDGE", "CHANNEL_UNBRIDGE", "CHANNEL_PROGRESS", + "CHANNEL_PROGRESS_MEDIA", "CHANNEL_OUTGOING", "CHANNEL_PARK", "CHANNEL_UNPARK",