diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 77c9fdd24c..7731bf839b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -3871,7 +3871,7 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status switch_channel_t *a_channel; const char *sip_redirect_profile, *sip_redirect_context, *sip_redirect_dialplan, *sip_redirect_fork; - + if ((a_session = switch_core_session_locate(br)) && (a_channel = switch_core_session_get_channel(a_session))) { switch_stream_handle_t stream = { 0 }; char separator[2] = "|"; @@ -4103,7 +4103,7 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status if (profile->pres_type) { const char *presence_data = switch_channel_get_variable(channel, "presence_data"); - //const char *presence_id = switch_channel_get_variable(channel, "presence_id"); + const char *presence_id = switch_channel_get_variable(channel, "presence_id"); char *full_contact = ""; char *p = NULL; @@ -4114,26 +4114,18 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status if (call_info && (p = strchr(call_info, ';'))) { p++; } - - sql = switch_mprintf("update sip_dialogs set " - "call_id='%q', " - "sip_to_user='%q', " - "sip_to_host='%q', " - "sip_from_user='%q', " - "sip_from_host='%q', " - "contact_user='%q', " - "contact_host='%q', " - "state='%q', " - "user_agent='%q', " - "contact='%q', " - "presence_data='%q', " - "call_info='%q' where uuid='%q'", - + sql = switch_mprintf("insert into sip_dialogs " + "(call_id,uuid,sip_to_user,sip_to_host,sip_from_user,sip_from_host,contact_user," + "contact_host,state,direction,user_agent,profile_name,hostname,contact,presence_id,presence_data,call_info) " + "values('%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q')", call_id, + switch_core_session_get_uuid(session), to_user, to_host, from_user, from_host, contact_user, - contact_host, astate, user_agent, - switch_str_nil(full_contact), - switch_str_nil(presence_data), switch_str_nil(p), switch_core_session_get_uuid(session)); + contact_host, astate, "outbound", user_agent, + profile->name, mod_sofia_globals.hostname, switch_str_nil(full_contact), + switch_str_nil(presence_id), switch_str_nil(presence_data), switch_str_nil(p)); + + switch_assert(sql); sofia_glue_actually_execute_sql(profile, sql, profile->ireg_mutex); switch_safe_free(sql); diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index af0d5cf413..879ab41c57 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -581,7 +581,6 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) if (!mod_sofia_globals.profile_hash) goto done; - switch_mutex_lock(mod_sofia_globals.hash_mutex); for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, &var, NULL, &val); @@ -601,10 +600,10 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) continue; } - if (call_info) { const char *uuid = switch_event_get_header(event, "unique-id"); + #if 0 if (mod_sofia_globals.debug_sla > 1) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SLA EVENT:\n"); @@ -634,24 +633,9 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) } sync_sla(profile, euser, host, SWITCH_TRUE, SWITCH_TRUE); - } else { - char count_buf[128] = ""; - int count = 0; - const char *state = switch_event_get_header(event, "channel-state"); - - sql = switch_mprintf("select count(*) from sip_dialogs " - "where hostname='%q' and presence_id='%q@%q'", mod_sofia_globals.hostname, euser, host); - sofia_glue_execute_sql2str(profile, profile->ireg_mutex, sql, count_buf, sizeof(count_buf)); - - count = atoi(count_buf); - - switch_safe_free(sql); - - if (count > 1 || (count > 0 && switch_stristr("hangup", state))) { - continue; - } } - + + if ((sql = switch_mprintf("select sip_subscriptions.proto,sip_subscriptions.sip_user,sip_subscriptions.sip_host," "sip_subscriptions.sub_to_user,sip_subscriptions.sub_to_host,sip_subscriptions.event," "sip_subscriptions.contact,sip_subscriptions.call_id,sip_subscriptions.full_from,"