From 722919668d159ce0aa8e839b3d9c090c0980faed Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 30 Aug 2012 16:38:31 -0500 Subject: [PATCH] add channel events to message when its in-dialog --- src/mod/endpoints/mod_sofia/mod_sofia.h | 2 +- src/mod/endpoints/mod_sofia/sofia.c | 2 +- src/mod/endpoints/mod_sofia/sofia_presence.c | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index bee5792cc7..7d6659cdfc 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -983,7 +983,7 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n sofia_dispatch_event_t *de, tagi_t tags[]); void sofia_presence_handle_sip_i_message(int status, char const *phrase, nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, - sofia_private_t *sofia_private, sip_t const *sip, + switch_core_session_t *session, sofia_private_t *sofia_private, sip_t const *sip, sofia_dispatch_event_t *de, tagi_t tags[]); void sofia_presence_handle_sip_r_subscribe(int status, char const *phrase, nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 0b1e85e8ae..41ae399691 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1185,7 +1185,7 @@ static void our_sofia_event_callback(nua_event_t event, sofia_handle_sip_i_state(session, status, phrase, nua, profile, nh, sofia_private, sip, de, tags); break; case nua_i_message: - sofia_presence_handle_sip_i_message(status, phrase, nua, profile, nh, sofia_private, sip, de, tags); + sofia_presence_handle_sip_i_message(status, phrase, nua, profile, nh, session, sofia_private, sip, de, tags); break; case nua_i_info: sofia_handle_sip_i_info(nua, profile, nh, session, sip, de, tags); diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 9f2d0d184e..fca3a1bad3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -4268,7 +4268,9 @@ void sofia_presence_set_hash_key(char *hash_key, int32_t len, sip_t const *sip) void sofia_presence_handle_sip_i_message(int status, char const *phrase, - nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, + nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, + switch_core_session_t *session, + sofia_private_t *sofia_private, sip_t const *sip, sofia_dispatch_event_t *de, tagi_t tags[]) { @@ -4284,6 +4286,12 @@ void sofia_presence_handle_sip_i_message(int status, const char *us; char network_ip[80]; int network_port = 0; + switch_channel_t *channel = NULL; + + + if (session) { + channel = switch_core_session_get_channel(session); + } if ((us = sofia_glue_get_unknown_header(sip, "X-FS-Sending-Message")) && !strcmp(us, switch_core_get_uuid())) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Not sending message to ourselves!\n"); @@ -4380,6 +4388,11 @@ void sofia_presence_handle_sip_i_message(int status, switch_event_add_body(event, "%s", msg); } + if (channel) { + switch_channel_event_set_data(channel, event); + } + + if (sofia_test_pflag(profile, PFLAG_FIRE_MESSAGE_EVENTS)) { if (switch_event_dup(&event_dup, event) == SWITCH_STATUS_SUCCESS) { event_dup->event_id = SWITCH_EVENT_RECV_MESSAGE;