[ekg2-commit] ekg2: sniff.c (HEAD) sniff_gg.h (HEAD) [darkjames]

CVS commit cvs w amba.bydg.pdi.net
Czw, 15 Lut 2007, 11:53:49 CET


Module name:	ekg2
Changes by:	darkjames	07/02/15 11:53:45

Modified files:
	sniff.c sniff_gg.h

Log message:
[sniff,gg] implement sniff_gg_new_status()

Index: sniff.c
===================================================================
RCS file: /home/cvs/ekg2/plugins/sniff/sniff.c,v
diff -d -u -r1.6 -r1.7
--- sniff.c	15 Feb 2007 10:25:32 -0000	1.6
+++ sniff.c	15 Feb 2007 10:53:44 -0000	1.7
@@ -241,7 +241,7 @@
 			debug("[sniff,gg] unknown message ack status. consider upgrade\n");
 			break;
 	}
-	print_window(build_windowip_name(hdr->srcip) /* ip and/or gg# */, s, 1,
+	print_window(build_windowip_name(hdr->dstip) /* ip and/or gg# */, s, 1,
 			format, 
 			format_user(s, build_gg_uid(pkt->recipient)));	/* XXX */
 	return 0;
@@ -272,7 +272,7 @@
 	descr	= has_descr ? gg_cp_to_iso(xstrndup(pkt->status_data, len)) : NULL;
 
 	if (!has_descr && len > 0)
-		debug_error("sniff_gg_status() !has_descr but len > 0?!\n");
+		debug_error("sniff_gg_status() !has_descr but len > 0?! (%d)\n", len);
 
 	print_window(build_windowip_name(hdr->dstip) /* ip and/or gg# */, s, 1, 
 		ekg_status_label(status, descr, "status_"), /* formatka */
@@ -288,10 +288,43 @@
 }
 
 SNIFF_HANDLER(sniff_gg_new_status, gg_new_status) {
+	const char *status;
+	char *descr;
+	int has_descr;
+
 	CHECK_LEN(sizeof(gg_new_status))	len -= sizeof(gg_new_status);
 
 /* XXX, update s->status/descr */
-	debug_error("sniff_gg_new_status() XXX\n");
+	status	= gg_status_to_text(pkt->status, &has_descr);
+
+	if (!xstrcmp(status, EKG_STATUS_AVAIL)) 		status = "back";
+	else if (!xstrcmp(status, EKG_STATUS_AWAY))		status = "away";
+	else if (!xstrcmp(status, EKG_STATUS_INVISIBLE))	status = "invsible";
+	else {
+/* XXX, rozlaczony */
+		debug_error("sniff_gg_new_status() bad status: %s\n", status);
+		return -5;
+	}
+
+	descr	= has_descr ? gg_cp_to_iso(xstrndup(pkt->status_data, len)) : NULL;
+
+	if (!has_descr && len > 0)
+		debug_error("sniff_gg_new_status() !has_descr but len > 0?! (%d)\n", len);
+/* XXX tajm */
+
+/* XXX, session_name(s) is wrong here. */
+	if (descr) {
+		print_window(build_windowip_name(hdr->srcip) /* ip and/or gg# */, s, 1,
+				ekg_status_label(status, descr, NULL), /* formatka */
+
+				descr, "", session_name(s));
+	} else 
+		print_window(build_windowip_name(hdr->srcip) /* ip and/or gg# */, s, 1,
+				ekg_status_label(status, descr, NULL), /* formatka */
+
+				session_name(s));
+
+
 	return -5;
 }
 
@@ -304,6 +337,8 @@
 	int has_descr = 0;
 
 	CHECK_LEN(sizeof(gg_status60))		len -= sizeof(gg_status60);
+
+/* XXX, tajm */
 #if 0
 	if (len > 4 && pkt->status_data[len - 5] == 0) {
 		has_time = 1;

Index: sniff_gg.h
===================================================================
RCS file: /home/cvs/ekg2/plugins/sniff/sniff_gg.h,v
diff -d -u -r1.4 -r1.5
--- sniff_gg.h	15 Feb 2007 10:12:25 -0000	1.4
+++ sniff_gg.h	15 Feb 2007 10:53:44 -0000	1.5
@@ -50,6 +50,7 @@
 #define GG_NEW_STATUS 0x0002
 typedef struct {
 	uint32_t status;			/* na jaki zmienić? */
+	char status_data[];
 } GG_PACKED gg_new_status;
 
 #define GG_LOGIN_OK 0x0003


Więcej informacji o liście dyskusyjnej ekg2-commit