From 0715b44f527fa3a3b0302017f878b7adde373123 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 27 Sep 2008 20:52:33 +0000 Subject: [PATCH] (SFSIP-83) chat (send an IM) assumes that the user's profile is the same as their domain, which isn't necessarily so git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9686 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/sofia_presence.c | 23 +++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 07ea0f0b9a..9ecfbf9daa 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -52,11 +52,12 @@ struct presence_helper { switch_status_t sofia_presence_chat_send(char *proto, char *from, char *to, char *subject, char *body, char *hint) { char buf[256]; - char *user = NULL, *host = NULL; + char *prof = NULL, *user = NULL, *host = NULL; sofia_profile_t *profile = NULL; char *ffrom = NULL; nua_handle_t *msg_nh; char *contact; + char *dup = NULL; switch_status_t status = SWITCH_STATUS_FALSE; const char *ct = "text/html"; @@ -69,17 +70,27 @@ switch_status_t sofia_presence_chat_send(char *proto, char *from, char *to, char goto end; } - user = strdup(to); - switch_assert(user); + dup = strdup(to); + switch_assert(dup); + prof = dup; + + // Do we have a user of the form profile/user[@host]? + if ((user = strchr(prof, '/'))) { + *user++ = '\0'; + } else { + user = prof; + prof = NULL; + } if ((host = strchr(user, '@'))) { *host++ = '\0'; + if (!prof) prof = host; } - if (!host || !(profile = sofia_glue_find_profile(host))) { + if (!host || !(profile = sofia_glue_find_profile(prof))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Chat proto [%s]\nfrom [%s]\nto [%s]\n%s\nInvalid Profile %s\n", proto, from, to, - body ? body : "[no body]", host ? host : "NULL"); + body ? body : "[no body]", prof ? prof : "NULL"); goto end; } @@ -123,7 +134,7 @@ switch_status_t sofia_presence_chat_send(char *proto, char *from, char *to, char end: switch_safe_free(ffrom); - switch_safe_free(user); + switch_safe_free(dup); if (profile) {