From aa9361d79f62635fd1992944e0502610196ae5b6 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 8 Oct 2009 16:52:55 +0000 Subject: [PATCH] add CALL_UPDATE event git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15119 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/esl/src/esl_event.c | 1 + libs/esl/src/include/esl_event.h | 1 + src/include/switch_types.h | 1 + src/mod/endpoints/mod_sofia/mod_sofia.c | 17 +++++++++++++++++ src/mod/endpoints/mod_sofia/sofia.c | 14 ++++++++++++++ src/switch_channel.c | 1 + src/switch_event.c | 1 + 7 files changed, 36 insertions(+) diff --git a/libs/esl/src/esl_event.c b/libs/esl/src/esl_event.c index e2f6359b53..0fe49301a6 100644 --- a/libs/esl/src/esl_event.c +++ b/libs/esl/src/esl_event.c @@ -128,6 +128,7 @@ static const char *EVENT_NAMES[] = { "NAT", "RECORD_START", "RECORD_STOP", + "CALL_UPDATE", "ALL" }; diff --git a/libs/esl/src/include/esl_event.h b/libs/esl/src/include/esl_event.h index 14c21a5967..d4bfcede47 100644 --- a/libs/esl/src/include/esl_event.h +++ b/libs/esl/src/include/esl_event.h @@ -116,6 +116,7 @@ typedef enum { ESL_EVENT_NAT, ESL_EVENT_RECORD_START, ESL_EVENT_RECORD_STOP, + ESL_EVENT_CALL_UPDATE, ESL_EVENT_ALL } esl_event_types_t; diff --git a/src/include/switch_types.h b/src/include/switch_types.h index acee75bb92..539e8dfe7d 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1290,6 +1290,7 @@ typedef enum { SWITCH_EVENT_NAT, SWITCH_EVENT_RECORD_START, SWITCH_EVENT_RECORD_STOP, + SWITCH_EVENT_CALL_UPDATE, SWITCH_EVENT_ALL } switch_event_types_t; diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 483d627f95..16f9729d34 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1284,6 +1284,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi if (!switch_strlen_zero(name)) { char message[256] = ""; const char *ua = switch_channel_get_variable(tech_pvt->channel, "sip_user_agent"); + switch_event_t *event; if (switch_strlen_zero(number)) { number = tech_pvt->caller_profile->destination_number; @@ -1303,6 +1304,22 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi TAG_END()); } + + + if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) { + const char *uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "SEND"); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Callee-Name", name); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Callee-Number", number); + if (uuid) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid); + } + switch_channel_event_set_data(channel, event); + switch_event_fire(&event); + } + + + } switch_safe_free(arg); diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 4008cbeea8..cdd7698c22 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -420,6 +420,7 @@ void sofia_update_callee_id(switch_core_session_t *session, sofia_profile_t *pro const char *number = "unknown", *tmp; switch_caller_profile_t *caller_profile; char *dup = NULL; + switch_event_t *event; if (sip->sip_to) { number = sip->sip_to->a_url->url_user; @@ -450,6 +451,18 @@ void sofia_update_callee_id(switch_core_session_t *session, sofia_profile_t *pro number = tmp; } + if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) { + const char *uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV"); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Callee-Name", name); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Callee-Number", number); + if (uuid) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid); + } + switch_channel_event_set_data(channel, event); + switch_event_fire(&event); + } + caller_profile = switch_channel_get_caller_profile(channel); caller_profile->callee_id_name = switch_core_strdup(caller_profile->pool, name); caller_profile->callee_id_number = switch_core_strdup(caller_profile->pool, number); @@ -5673,6 +5686,7 @@ void sofia_info_send_sipfrag(switch_core_session_t *aleg, switch_core_session_t TAG_IF(!switch_strlen_zero(b_tech_pvt->user_via), SIPTAG_VIA_STR(b_tech_pvt->user_via)), TAG_END()); } + } } } diff --git a/src/switch_channel.c b/src/switch_channel.c index 707cec5fba..fe7b02e1ce 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -1408,6 +1408,7 @@ SWITCH_DECLARE(void) switch_channel_event_set_extended_data(switch_channel_t *ch event->event_id == SWITCH_EVENT_API || event->event_id == SWITCH_EVENT_RECORD_START || event->event_id == SWITCH_EVENT_RECORD_STOP || + event->event_id == SWITCH_EVENT_CALL_UPDATE || event->event_id == SWITCH_EVENT_CUSTOM ) { diff --git a/src/switch_event.c b/src/switch_event.c index 9bc81d9a1d..3b8b3d83a9 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -182,6 +182,7 @@ static char *EVENT_NAMES[] = { "NAT", "RECORD_START", "RECORD_STOP", + "CALL_UPDATE" "ALL" };