diff libpurple/protocols/oscar/family_oservice.c @ 29324:da49e136fb34

Move two logging statements from oscar.c to family_oservice.c so we can stop passing a billion parameters around. 2 files changed, 22 insertions(+), 61 deletions(-)
author Mark Doliner <mark@kingant.net>
date Tue, 02 Feb 2010 23:18:09 +0000
parents d7cc8dbf91f0
children 6b0c4667c4fb
line wrap: on
line diff
--- a/libpurple/protocols/oscar/family_oservice.c	Tue Feb 02 23:11:35 2010 +0000
+++ b/libpurple/protocols/oscar/family_oservice.c	Tue Feb 02 23:18:09 2010 +0000
@@ -333,7 +333,6 @@
 		rateclass->disconnect = byte_stream_get32(bs);
 		rateclass->current = byte_stream_get32(bs);
 		rateclass->max = byte_stream_get32(bs);
-
 		if (mod->version >= 3) {
 			delta = byte_stream_get32(bs);
 			rateclass->dropping_snacs = byte_stream_get8(bs);
@@ -341,6 +340,7 @@
 			delta = 0;
 			rateclass->dropping_snacs = 0;
 		}
+
 		rateclass->last.tv_sec = now.tv_sec - delta / 1000;
 		delta %= 1000;
 		rateclass->last.tv_usec = now.tv_usec - delta * 1000;
@@ -448,12 +448,17 @@
 static int
 ratechange(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
 {
-	int ret = 0;
-	aim_rxcallback_t userfunc;
 	guint16 code, classid;
 	struct rateclass *rateclass;
 	guint32 delta;
 	struct timeval now;
+	static const char *codes[5] = {
+		"invalid",
+		"change",
+		"warning",
+		"limit",
+		"limit cleared",
+	};
 
 	gettimeofday(&now, NULL);
 	code = byte_stream_get16(bs);
@@ -471,7 +476,6 @@
 	rateclass->disconnect = byte_stream_get32(bs);
 	rateclass->current = byte_stream_get32(bs);
 	rateclass->max = byte_stream_get32(bs);
-
 	if (mod->version >= 3) {
 		delta = byte_stream_get32(bs);
 		rateclass->dropping_snacs = byte_stream_get8(bs);
@@ -479,17 +483,26 @@
 		delta = 0;
 		rateclass->dropping_snacs = 0;
 	}
+
 	rateclass->last.tv_sec = now.tv_sec - delta / 1000;
 	delta %= 1000;
 	rateclass->last.tv_usec = now.tv_usec - delta * 1000;
 
-	if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) {
-		/* Can't pass in guint8 via ... varargs, so we use an unsigned int */
-		unsigned int dropping_snacs = rateclass->dropping_snacs;
-		ret = userfunc(od, conn, frame, code, classid, rateclass->windowsize, rateclass->clear, rateclass->alert, rateclass->limit, rateclass->disconnect, rateclass->current, rateclass->max, delta, dropping_snacs);
+	purple_debug_misc("oscar", "rate %s (param ID 0x%04hx): curavg = %u, "
+			"maxavg = %u, alert at %u, clear warning at %u, limit at %u, "
+			"disconnect at %u, delta is %u, dropping is %u (window size = %u)\n",
+			(code < 5) ? codes[code] : codes[0], rateclass->classid,
+			rateclass->current, rateclass->max, rateclass->alert,
+			rateclass->clear, rateclass->limit, rateclass->disconnect,
+			delta, rateclass->dropping_snacs, rateclass->windowsize);
+
+	if (code == AIM_RATE_CODE_LIMIT) {
+		purple_debug_warning("oscar",  _("The last action you attempted "
+				"could not be performed because you are over the rate "
+				"limit. Please wait 10 seconds and try again.\n"));
 	}
 
-	return ret;
+	return 1;
 }
 
 /*