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

Freeswitch SVN anthm at freeswitch.org
Mon Jun 2 11:43:00 EDT 2008


Author: anthm
Date: Mon Jun  2 11:42:59 2008
New Revision: 8737

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

Log:
some more presence changes

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	Mon Jun  2 11:42:59 2008
@@ -743,7 +743,7 @@
 }
 
 
-static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *rpid, char *prpid, char *status, char *note, const char **ct)
+static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *rpid, char *prpid, char *status, const char **ct)
 {
 	if (switch_stristr("polycom", user_agent)) {
 		*ct = "application/xpidf+xml";
@@ -751,6 +751,9 @@
 							  "<?xml version=\"1.0\"?>\n"
 							  "<!DOCTYPE presence PUBLIC \"-//IETF//DTD RFCxxxx XPIDF 1.0//EN\" \"xpidf.dtd\">\n"
 							  "<presence>\n"
+							  " <status>\n"
+							  "  <note>%s</note>\n"
+							  " </status>\n"
 							  " <presentity uri=\"%s;method=SUBSCRIBE\" />\n"
 							  " <atom id=\"%s\">\n"
 							  "  <address uri=\"%s;user=ip\" priority=\"0.800000\">\n"
@@ -758,20 +761,17 @@
 							  "   <msnsubstatus substatus=\"%s\" />\n"
 							  "  </address>\n"
 							  " </atom>\n"
-							  "</presence>\n", id, id, url, open, prpid
+							  "</presence>\n", status, id, id, url, open, prpid
 							  );
 	} else {
 		*ct = "application/pidf+xml";
 		return switch_mprintf(
-							  "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
-							  "<presence xmlns='urn:ietf:params:xml:ns:pidf'\n"
-							  "xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model'\n"
-							  "xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid'\n"
-							  "xmlns:c='urn:ietf:params:xml:ns:pidf:cipid'\n"
-							  "entity='pres:%s'>\n"
-							  " <status>\n"
-							  "  <note>%s</note>\n"
-							  " </status>\n"
+							  "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \n"
+							  "<presence xmlns='urn:ietf:params:xml:ns:pidf' \n"
+							  "xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' \n"
+							  "xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' \n"
+							  "xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='%s'>\n"
+							  
 							  " <tuple id='t6a5ed77e'>\n"
 							  "  <status>\r\n"
 							  "   <basic>%s</basic>\n"
@@ -780,9 +780,10 @@
 							  " <dm:person id='p06360c4a'>\n"
 							  "  <rpid:activities>\r\n" 
 							  "   <rpid:%s/>\n"
-							  "  </rpid:activities>"
+							  "  </rpid:activities>\n"
+							  "  <dm:note>%s</dm:note>"
 							  " </dm:person>\n"
-							  "</presence>", id, status, prpid, rpid);				  
+							  "</presence>", id, prpid, rpid, status);
 	}
 }
 
@@ -792,7 +793,7 @@
 	struct presence_helper *helper = (struct presence_helper *) pArg;
 	sofia_profile_t *profile = helper->profile;
 	char *pl = NULL;
-	char *clean_id = NULL, *id = NULL, *note = NULL;
+	char *clean_id = NULL, *id = NULL;
 	uint32_t in = atoi(argv[13]);
 	char *status = argv[14];
 	char *rpid = argv[15];
@@ -910,9 +911,19 @@
 			if (!strcasecmp(state, "cs_hangup")) {
 				astate = "terminated";
 			} else if (switch_strlen_zero(astate)) {
+				//char *buf;
+				//switch_event_serialize(helper->event, &buf, SWITCH_FALSE);
+				//switch_assert(buf);
+				//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "CHANNEL_DATA:\n%s\n", buf);
+				//free(buf);
+
 				astate = switch_str_nil(switch_event_get_header(helper->event, "answer-state"));
 				if (switch_strlen_zero(astate)) {
-					astate = dft_state;
+					if (is_dialog) {
+						astate = dft_state;
+					} else {
+						astate = "terminated";
+					}
 				}
 			}
 
@@ -989,11 +1000,10 @@
 
 
 		if (!is_dialog) {
+			char status_line[256] = "";
 			if (in) {
-				char status_line[256] = "";
-
 				if (!strcmp(astate, "early")) {
-					switch_snprintf(status_line, sizeof(status_line), "R %s", switch_str_nil(from_id));
+					switch_snprintf(status_line, sizeof(status_line), "Ring %s", switch_str_nil(from_id));
 					rpid = "on-the-phone";
 				} else if (!strcmp(astate, "confirmed")) {
 					char *dest = switch_event_get_header(helper->event, "Caller-Destination-Number");
@@ -1002,36 +1012,42 @@
 					}
 
 					if (switch_strlen_zero(from_id)) {
-						switch_snprintf(status_line, sizeof(status_line), "Available");
+						switch_snprintf(status_line, sizeof(status_line), "On The Phone");
 					} else {
-						switch_snprintf(status_line, sizeof(status_line), "T %s", switch_str_nil(from_id));
-						rpid = "on-the-phone";
+						switch_snprintf(status_line, sizeof(status_line), "Talk %s", switch_str_nil(from_id));
 					}
+					rpid = "on-the-phone";
 				} else if (!strcmp(astate, "terminated")) {
-					switch_snprintf(status_line, sizeof(status_line), "Available");
+					if (!strcasecmp(rpid, "on-the-phone")) {
+						switch_snprintf(status_line, sizeof(status_line), "Dialing");
+					} else {
+						switch_snprintf(status_line, sizeof(status_line), "Available");
+					}
+				} else {
+					switch_set_string(status_line, status);
 				}
 
-				note = switch_mprintf("<dm:note>%s</dm:note>", status_line);
 				open = "open";
 			} else {
-				note = NULL;
 				open = "closed";
 			}
+			
+			if (!strncasecmp(status_line, "registered", 10)) {
+				switch_snprintf(status_line, sizeof(status_line), "Available");
+			}
 
 			prpid = translate_rpid(rpid);
-			pl = gen_pidf(user_agent, id, profile->url, open, rpid, prpid, status, note, &ct);
+			pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status_line, &ct);
 		}
 
 	} else {
 		if (in) {
-			note = switch_mprintf("<dm:note>%s</dm:note>", status);
 			open = "open";
 		} else {
-			note = NULL;
 			open = "closed";
 		}
 		prpid = translate_rpid(rpid);
-		pl = gen_pidf(user_agent, id, profile->url, open, rpid, prpid, status, note, &ct);
+		pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status, &ct);
 	}
 
 	switch_snprintf(exp, sizeof(exp), "active;expires=%ld", (long) exptime);
@@ -1042,7 +1058,6 @@
 
 	switch_safe_free(id);
 	switch_safe_free(clean_id);
-	switch_safe_free(note);
 	switch_safe_free(pl);
 	switch_safe_free(to);
 



More information about the Freeswitch-svn mailing list