[Freeswitch-svn] [commit] r9686 - freeswitch/trunk/src/mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Sat Sep 27 16:52:33 EDT 2008


Author: anthm
Date: Sat Sep 27 16:52:33 2008
New Revision: 9686

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c

Log:
(SFSIP-83) chat (send an IM) assumes that the user's profile is the same as their domain, which isn't necessarily so

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c	Sat Sep 27 16:52:33 2008
@@ -52,11 +52,12 @@
 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 @@
 		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 @@
  end:
 
 	switch_safe_free(ffrom);
-	switch_safe_free(user);
+	switch_safe_free(dup);
 
 
 	if (profile) {



More information about the Freeswitch-svn mailing list