/soc/2015/jgeboski/facebook: 9cd963f45997: facebook: removed bin...

James Geboski jgeboski at gmail.com
Sun Aug 9 19:43:40 EDT 2015


Changeset: 9cd963f45997b368332db5766e65db781336ab49
Author:	 James Geboski <jgeboski at gmail.com>
Date:	 2015-08-09 19:43 -0400
Branch:	 facebook
URL: https://hg.pidgin.im/soc/2015/jgeboski/facebook/rev/9cd963f45997

Description:

facebook: removed binary thrift support

Facebook only uses compact thrift, rather than the binary thrift.

diffstat:

 libpurple/protocols/facebook/api.c    |   20 +-
 libpurple/protocols/facebook/thrift.c |  455 ++++++---------------------------
 libpurple/protocols/facebook/thrift.h |   49 +--
 3 files changed, 119 insertions(+), 405 deletions(-)

diffs (truncated from 1027 to 300 lines):

diff --git a/libpurple/protocols/facebook/api.c b/libpurple/protocols/facebook/api.c
--- a/libpurple/protocols/facebook/api.c
+++ b/libpurple/protocols/facebook/api.c
@@ -588,7 +588,7 @@ fb_api_cb_mqtt_open(FbMqtt *mqtt, gpoint
 	                      FB_MQTT_CONNECT_FLAG_PASS |
 	                      FB_MQTT_CONNECT_FLAG_CLR;
 
-	thft = fb_thrift_new(NULL, 0, TRUE);
+	thft = fb_thrift_new(NULL, 0);
 
 	/* Write the client identifier */
 	fb_thrift_write_field(thft, FB_THRIFT_TYPE_STRING, 1);
@@ -819,7 +819,7 @@ fb_api_cb_mqtt_connect(FbMqtt *mqtt, gpo
 }
 
 static void
-fb_api_cb_publish_mark(FbApi *api, const GByteArray *pload)
+fb_api_cb_publish_mark(FbApi *api, GByteArray *pload)
 {
 	FbJsonValues *values;
 	GError *err = NULL;
@@ -849,7 +849,7 @@ fb_api_cb_publish_mark(FbApi *api, const
 }
 
 static void
-fb_api_cb_publish_typing(FbApi *api, const GByteArray *pload)
+fb_api_cb_publish_typing(FbApi *api, GByteArray *pload)
 {
 	const gchar *str;
 	FbApiPrivate *priv = api->priv;
@@ -1007,7 +1007,7 @@ fb_api_message_parse_attach(FbApi *api, 
 }
 
 static void
-fb_api_cb_publish_ms(FbApi *api, const GByteArray *pload)
+fb_api_cb_publish_ms(FbApi *api, GByteArray *pload)
 {
 	const gchar *body;
 	const gchar *data;
@@ -1029,7 +1029,7 @@ fb_api_cb_publish_ms(FbApi *api, const G
 	JsonNode *root;
 	JsonNode *node;
 
-	thft = fb_thrift_new((GByteArray*) pload, 0, TRUE);
+	thft = fb_thrift_new(pload, 0);
 	fb_thrift_read_str(thft, NULL);
 	size = fb_thrift_get_pos(thft);
 	g_object_unref(thft);
@@ -1157,7 +1157,7 @@ fb_api_cb_publish_ms(FbApi *api, const G
 }
 
 static void
-fb_api_cb_publish_p(FbApi *api, const GByteArray *pload)
+fb_api_cb_publish_p(FbApi *api, GByteArray *pload)
 {
 	FbApiPresence pres;
 	FbThrift *thft;
@@ -1170,7 +1170,7 @@ fb_api_cb_publish_p(FbApi *api, const GB
 	guint size;
 
 	/* Start at 1 to skip the NULL byte */
-	thft  = fb_thrift_new((GByteArray*) pload, 1, TRUE);
+	thft  = fb_thrift_new(pload, 1);
 	press = NULL;
 
 	/* Skip the full list boolean field */
@@ -1243,8 +1243,8 @@ fb_api_cb_publish_p(FbApi *api, const GB
 }
 
 static void
-fb_api_cb_mqtt_publish(FbMqtt *mqtt, const gchar *topic,
-                       const GByteArray *pload, gpointer data)
+fb_api_cb_mqtt_publish(FbMqtt *mqtt, const gchar *topic, GByteArray *pload,
+                       gpointer data)
 {
 	FbApi *api = data;
 	gboolean comp;
@@ -1253,7 +1253,7 @@ fb_api_cb_mqtt_publish(FbMqtt *mqtt, con
 
 	static const struct {
 		const gchar *topic;
-		void (*func) (FbApi *api, const GByteArray *pload);
+		void (*func) (FbApi *api, GByteArray *pload);
 	} parsers[] = {
 		{"/mark_thread_response", fb_api_cb_publish_mark},
 		{"/orca_typing_notifications", fb_api_cb_publish_typing},
diff --git a/libpurple/protocols/facebook/thrift.c b/libpurple/protocols/facebook/thrift.c
--- a/libpurple/protocols/facebook/thrift.c
+++ b/libpurple/protocols/facebook/thrift.c
@@ -25,8 +25,8 @@
 
 struct _FbThriftPrivate
 {
-	FbThriftFlags flags;
 	GByteArray *bytes;
+	gboolean internal;
 	guint offset;
 	guint pos;
 	guint lastbool;
@@ -40,7 +40,7 @@ fb_thrift_dispose(GObject *obj)
 {
 	FbThriftPrivate *priv = FB_THRIFT(obj)->priv;
 
-	if (priv->flags & FB_THRIFT_FLAG_INTERNAL) {
+	if (priv->internal) {
 		g_byte_array_free(priv->bytes, TRUE);
 	}
 }
@@ -65,7 +65,7 @@ fb_thrift_init(FbThrift *thft)
 }
 
 FbThrift *
-fb_thrift_new(GByteArray *bytes, guint offset, gboolean compact)
+fb_thrift_new(GByteArray *bytes, guint offset)
 {
 	FbThrift *thft;
 	FbThriftPrivate *priv;
@@ -74,18 +74,14 @@ fb_thrift_new(GByteArray *bytes, guint o
 	priv = thft->priv;
 
 	if (bytes != NULL) {
-		priv->bytes  = bytes;
+		priv->bytes = bytes;
 		priv->offset = offset;
+		priv->pos = offset;
 	} else {
-		priv->bytes  = g_byte_array_new();
-		priv->flags |= FB_THRIFT_FLAG_INTERNAL;
+		priv->bytes = g_byte_array_new();
+		priv->internal = TRUE;
 	}
 
-	if (compact) {
-		priv->flags |= FB_THRIFT_FLAG_COMPACT;
-	}
-
-	priv->pos = priv->offset;
 	return thft;
 }
 
@@ -150,7 +146,7 @@ fb_thrift_read(FbThrift *thft, gpointer 
 }
 
 gboolean
-fb_thrift_read_bool(FbThrift *thft, gboolean *bln)
+fb_thrift_read_bool(FbThrift *thft, gboolean *value)
 {
 	FbThriftPrivate *priv;
 	guint8 byte;
@@ -158,36 +154,21 @@ fb_thrift_read_bool(FbThrift *thft, gboo
 	g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE);
 	priv = thft->priv;
 
-	if (bln != NULL) {
-		*bln = FALSE;
-	}
-
-	if (!(priv->flags & FB_THRIFT_FLAG_COMPACT)) {
-		if (!fb_thrift_read_byte(thft, &byte)) {
-			return FALSE;
-		}
-
-		if (bln != NULL) {
-			*bln = byte != 0;
-		}
-
-		return TRUE;
-	}
-
 	if ((priv->lastbool & 0x03) != 0x01) {
 		if (!fb_thrift_read_byte(thft, &byte)) {
 			return FALSE;
 		}
 
-		if (bln != NULL) {
-			*bln = (byte & 0x0F) == 0x01;
+		if (value != NULL) {
+			*value = (byte & 0x0F) == 0x01;
 		}
 
+		priv->lastbool = 0;
 		return TRUE;
 	}
 
-	if (bln != NULL) {
-		*bln = ((priv->lastbool & 0x04) >> 2) != 0;
+	if (value != NULL) {
+		*value = ((priv->lastbool & 0x04) >> 2) != 0;
 	}
 
 	priv->lastbool = 0;
@@ -195,250 +176,145 @@ fb_thrift_read_bool(FbThrift *thft, gboo
 }
 
 gboolean
-fb_thrift_read_byte(FbThrift *thft, guint8 *byte)
+fb_thrift_read_byte(FbThrift *thft, guint8 *value)
 {
-	if (byte != NULL) {
-		*byte = 0;
-	}
-
-	return fb_thrift_read(thft, byte, sizeof *byte);
+	return fb_thrift_read(thft, value, sizeof *value);
 }
 
 gboolean
-fb_thrift_read_dbl(FbThrift *thft, gdouble *dbl)
+fb_thrift_read_dbl(FbThrift *thft, gdouble *value)
 {
 	gint64 i64;
 
 	/* Almost always 8, but check anyways */
-	static const gsize size = MIN(sizeof dbl, sizeof i64);
-
-	if (dbl != NULL) {
-		*dbl = 0;
-	}
+	static const gsize size = MIN(sizeof value, sizeof i64);
 
 	if (!fb_thrift_read_i64(thft, &i64)) {
 		return FALSE;
 	}
 
-	if (dbl != NULL) {
-		memcpy(&dbl, &i64, size);
+	if (value != NULL) {
+		memcpy(value, &i64, size);
 	}
 
 	return TRUE;
 }
 
 gboolean
-fb_thrift_read_i16(FbThrift *thft, gint16 *i16)
+fb_thrift_read_i16(FbThrift *thft, gint16 *value)
 {
-	FbThriftPrivate *priv;
 	gint64 i64;
 
-	g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE);
-	priv = thft->priv;
-
-	if (i16 != NULL) {
-		*i16 = 0;
-	}
-
-	if (!(priv->flags & FB_THRIFT_FLAG_COMPACT)) {
-		if (!fb_thrift_read(thft, i16, sizeof *i16)) {
-			return FALSE;
-		}
-
-		if (i16 != NULL) {
-			*i16 = GINT16_FROM_BE(*i16);
-		}
-
-		return TRUE;
-	}
-
 	if (!fb_thrift_read_i64(thft, &i64)) {
 		return FALSE;
 	}
 
-	if (i16 != NULL) {
-		*i16 = i64;
+	if (value != NULL) {
+		*value = i64;
 	}
 
 	return TRUE;
 }
 
 gboolean
-fb_thrift_read_vi16(FbThrift *thft, guint16 *u16)
+fb_thrift_read_vi16(FbThrift *thft, guint16 *value)
 {
 	guint64 u64;
 
-	if (u16 != NULL) {
-		*u16 = 0;
-	}
-
 	if (!fb_thrift_read_vi64(thft, &u64)) {
 		return FALSE;
 	}
 
-	if (u16 != NULL) {
-		*u16 = u64;
+	if (value != NULL) {
+		*value = u64;
 	}
 
 	return TRUE;
 }
 
 gboolean
-fb_thrift_read_i32(FbThrift *thft, gint32 *i32)
+fb_thrift_read_i32(FbThrift *thft, gint32 *value)
 {
-	FbThriftPrivate *priv;



More information about the Commits mailing list