char *pname = NULL;
const char *call_id;
const char *sub_call_id;
+ int for_everyone = 0;
switch_assert(event != NULL);
call_id = switch_event_get_header(event, "call-id");
sub_call_id = switch_event_get_header(event, "sub-call-id");
+ if (!call_id && !sub_call_id) {
+ for_everyone = 1;
+ }
+
+
dup_account = strdup(account);
switch_assert(dup_account != NULL);
sofia_glue_get_user_host(dup_account, &user, &host);
sql = NULL;
- if (sub_call_id) {
+ if (for_everyone) {
sql = switch_mprintf("select proto,sip_user,sip_host,sub_to_user,sub_to_host,event,contact,call_id,full_from,"
"full_via,expires,user_agent,accept,profile_name"
",'%q','%q' from sip_subscriptions where event='message-summary' "
- "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%' and call_id='%q')",
- stream.data, host, user, host, host, sub_call_id);
- } else if (!call_id) {
+ "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%')",
+ stream.data, host, user, host, host);
+ } else if (sub_call_id) {
sql = switch_mprintf("select proto,sip_user,sip_host,sub_to_user,sub_to_host,event,contact,call_id,full_from,"
"full_via,expires,user_agent,accept,profile_name"
",'%q','%q' from sip_subscriptions where event='message-summary' "
- "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%')",
- stream.data, host, user, host, host);
+ "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%' and call_id='%q')",
+ stream.data, host, user, host, host, sub_call_id);
}
+
if (sql) {
sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback, &h);
- switch_safe_free(sql);
+ free(sql);
+ sql = NULL;
+
+ }
+ if (for_everyone) {
+ sql = switch_mprintf("select sip_user,sip_host,contact,profile_name,'%q' "
+ "from sip_registrations where sip_user='%q' and sip_host='%q'",
+ stream.data, user, host);
} else if (call_id) {
sql = switch_mprintf("select sip_user,sip_host,contact,profile_name,'%q' "
"from sip_registrations where sip_user='%q' and sip_host='%q' and call_id='%q'",
stream.data, user, host, call_id);
+ }
+
+ if (sql) {
switch_assert(sql != NULL);
sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback2, &h);
+ free(sql);
+ sql = NULL;
}
-
- switch_safe_free(sql);
switch_safe_free(stream.data);
switch_safe_free(dup_account);