[Freeswitch-svn] [commit] r3719 - in freeswitch/trunk: libs/libdingaling/src src/mod/endpoints/mod_dingaling src/mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Tue Dec 19 12:29:34 EST 2006


Author: anthm
Date: Tue Dec 19 12:29:33 2006
New Revision: 3719

Modified:
   freeswitch/trunk/libs/libdingaling/src/libdingaling.c
   freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c

Log:
xmas presence

Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c
==============================================================================
--- freeswitch/trunk/libs/libdingaling/src/libdingaling.c	(original)
+++ freeswitch/trunk/libs/libdingaling/src/libdingaling.c	Tue Dec 19 12:29:33 2006
@@ -297,7 +297,7 @@
 static ldl_status parse_session_code(ldl_handle_t *handle, char *id, char *from, char *to, iks *xml, char *xtype)
 {
 	ldl_session_t *session = NULL;
-	ldl_signal_t signal = LDL_SIGNAL_NONE;
+	ldl_signal_t dl_signal = LDL_SIGNAL_NONE;
 	char *initiator = iks_find_attrib(xml, "initiator");
 	char *msg = NULL;
 
@@ -327,7 +327,7 @@
 			
 			if (!strcasecmp(type, "initiate") || !strcasecmp(type, "accept")) {
 
-				signal = LDL_SIGNAL_INITIATE;
+				dl_signal = LDL_SIGNAL_INITIATE;
 				if (!strcasecmp(type, "accept")) {
 					msg = "accept";
 				}
@@ -363,10 +363,10 @@
 					tag = iks_next_tag(tag);
 				}
 			} else if (!strcasecmp(type, "transport-accept")) {
-				signal = LDL_SIGNAL_TRANSPORT_ACCEPT;
+				dl_signal = LDL_SIGNAL_TRANSPORT_ACCEPT;
 			} else if (!strcasecmp(type, "transport-info")) {
 				char *tid = iks_find_attrib(xml, "id");
-				signal = LDL_SIGNAL_CANDIDATES;
+				dl_signal = LDL_SIGNAL_CANDIDATES;
 				tag = iks_child (xml);
 				
 				if (tag && !strcasecmp(iks_name(tag), "transport")) {
@@ -458,17 +458,17 @@
 					tag = iks_next_tag(tag);
 				}
 			} else if (!strcasecmp(type, "terminate")) {
-				signal = LDL_SIGNAL_TERMINATE;
+				dl_signal = LDL_SIGNAL_TERMINATE;
 			} else if (!strcasecmp(type, "error")) {
-				signal = LDL_SIGNAL_ERROR;
+				dl_signal = LDL_SIGNAL_ERROR;
 			}
 		}
 		
 		xml = iks_child(xml);
 	}
 
-	if (handle->session_callback && signal) {
-		handle->session_callback(handle, session, signal, to, from, id, msg); 
+	if (handle->session_callback && dl_signal) {
+		handle->session_callback(handle, session, dl_signal, to, from, id, msg); 
 	}
 
 	return LDL_STATUS_SUCCESS;
@@ -700,22 +700,24 @@
 	char id[1024];
 	char *resource;
 	struct ldl_buffer *buffer;
-	ldl_signal_t signal;
+	ldl_signal_t dl_signal = LDL_SIGNAL_PRESENCE_IN;
 
-	
-	if (type && !strcasecmp(type, "unavailable")) {
-		signal = LDL_SIGNAL_PRESENCE_OUT;
-    } else if (type && !strcasecmp(type, "probe")) {
-		signal = LDL_SIGNAL_PRESENCE_PROBE;
-	} else {
-		signal = LDL_SIGNAL_PRESENCE_IN;
-	}
+    if (type && *type) {
+        if (!strcasecmp(type, "unavailable")) {
+            dl_signal = LDL_SIGNAL_PRESENCE_OUT;
+        } else if (!strcasecmp(type, "probe")) {
+            dl_signal = LDL_SIGNAL_PRESENCE_PROBE;
+        }
+        if (!status) {
+            status = type;
+        }
+    } else {
+        if (!status) {
+            status = "Available";
+        }
+    }
 
-	if (!status) {
-		status = type;
-	}
 
-
 	apr_cpystrn(id, from, sizeof(id));
 	lowercase(id);
 
@@ -738,7 +740,7 @@
 	}
 	
     if (handle->session_callback) {
-        handle->session_callback(handle, NULL, signal, to, id, status ? status : "n/a", show ? show : "n/a");
+        handle->session_callback(handle, NULL, dl_signal, to, id, status ? status : "n/a", show ? show : "n/a");
     }
 
 	return IKS_FILTER_EAT;

Modified: freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c	Tue Dec 19 12:29:33 2006
@@ -187,7 +187,7 @@
 										   switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
 
-static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsession, ldl_signal_t signal, char *to, char *from, char *subject, char *msg);
+static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsession, ldl_signal_t dl_signal, char *to, char *from, char *subject, char *msg);
 static ldl_status handle_response(ldl_handle_t *handle, char *id);
 static switch_status_t load_config(void);
 
@@ -2065,7 +2065,7 @@
 	switch_safe_free(xmlstr);
 }
 
-static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsession, ldl_signal_t signal, char *to, char *from, char *subject, char *msg)
+static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsession, ldl_signal_t dl_signal, char *to, char *from, char *subject, char *msg)
 {
 	struct mdl_profile *profile = NULL;
 	switch_core_session_t *session = NULL;
@@ -2085,7 +2085,7 @@
 
 	if (!dlsession) {
 		if (profile->user_flags & LDL_FLAG_COMPONENT) {
-			switch(signal) {
+			switch(dl_signal) {
 			case LDL_SIGNAL_VCARD:
 				do_vcard(handle, to, from, subject);
 				break;
@@ -2174,8 +2174,8 @@
 						switch_event_fire(&event);
 					}
 				}
-				break;
 #endif
+				break;
 
 			case LDL_SIGNAL_PRESENCE_OUT:
 				
@@ -2183,7 +2183,8 @@
 					execute_sql(profile->dbname, sql, profile->mutex);
 					switch_core_db_free(sql);
 				}
-
+                printf("XXXXXXXXXXXXXXXXXXXXXXXXXXNO FUCKING WAY!!! %d %d\n", dl_signal, LDL_SIGNAL_PRESENCE_OUT);
+                abort();
 				if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_OUT) == SWITCH_STATUS_SUCCESS) {
 					switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", MDL_CHAT_PROTO);
 					switch_event_add_header(event, SWITCH_STACK_BOTTOM, "login", "%s", profile->login);
@@ -2196,7 +2197,7 @@
 			}
 		} 
 
-		switch(signal) {
+		switch(dl_signal) {
 		case LDL_SIGNAL_MSG: {
 			switch_chat_interface_t *ci;
 			char *proto = MDL_CHAT_PROTO;
@@ -2284,7 +2285,7 @@
 		}
 
 	} else {
-		if (signal != LDL_SIGNAL_INITIATE) {
+		if (dl_signal != LDL_SIGNAL_INITIATE) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Session is already dead\n");
 			status = LDL_STATUS_FALSE;
 			goto done;
@@ -2325,7 +2326,7 @@
 
 	}
 
-	switch(signal) {
+	switch(dl_signal) {
 	case LDL_SIGNAL_MSG:
 		if (msg) { 
 			if (*msg == '+') {
@@ -2370,7 +2371,7 @@
 		switch_set_flag_locked(tech_pvt, TFLAG_TRANSPORT_ACCEPT);
 		break;
 	case LDL_SIGNAL_INITIATE:
-		if (signal) {
+		if (dl_signal) {
 			ldl_payload_t *payloads;
 			unsigned int len = 0;
 			int match = 0;
@@ -2448,7 +2449,7 @@
 		
 		break;
 	case LDL_SIGNAL_CANDIDATES:
-		if (signal) {
+		if (dl_signal) {
 			ldl_candidate_t *candidates;
 			unsigned int len = 0;
 			unsigned int x;

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Tue Dec 19 12:29:33 2006
@@ -3234,7 +3234,10 @@
 		open = "closed";
 	}
 
-	if (strcasecmp(proto, SOFIA_CHAT_PROTO)) {
+    if (!strcasecmp(sub_to_host, host)) {
+        /* same host */
+		id = switch_mprintf("sip:%s+%s@%s", proto, sub_to_user, sub_to_host);
+	} else if (strcasecmp(proto, SOFIA_CHAT_PROTO)) {
 		/*encapsulate*/
 		id = switch_mprintf("sip:%s+%s+%s@%s", proto, sub_to_user, sub_to_host, host);
 	} else {
@@ -3268,7 +3271,7 @@
 	nua_notify(nh,
 			   NUTAG_URL(contact),
 			   SIPTAG_TO_STR(full_from),
-			   SIPTAG_FROM_STR(to),
+			   SIPTAG_FROM_STR(id),
 			   SIPTAG_CONTACT_STR(profile->url),
 			   SIPTAG_CALL_ID_STR(callid),
 			   SIPTAG_VIA_STR(full_via),
@@ -3406,6 +3409,13 @@
 			exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 3600);
 			exp = (long) time(NULL) + exp_raw;
 			
+            if (sip && sip->sip_from) {
+                from_user = (char *) sip->sip_from->a_url->url_user;
+                from_host = (char *) sip->sip_from->a_url->url_host;
+            } else {
+                from_user = "n/a";
+                from_host = "n/a";
+            }
 
 			if ((sql = switch_mprintf("delete from sip_subscriptions where "
 											  "proto='%q' and user='%q' and host='%q' and sub_to_user='%q' and sub_to_host='%q' and event='%q';\n"



More information about the Freeswitch-svn mailing list