aboutsummaryrefslogtreecommitdiffstats
path: root/facebook/facebook-api.c
diff options
context:
space:
mode:
Diffstat (limited to 'facebook/facebook-api.c')
-rw-r--r--facebook/facebook-api.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c
index b318c62..a72f386 100644
--- a/facebook/facebook-api.c
+++ b/facebook/facebook-api.c
@@ -38,6 +38,7 @@ enum
PROP_STOKEN,
PROP_TOKEN,
PROP_UID,
+ PROP_TWEAK,
PROP_N
};
@@ -62,6 +63,7 @@ struct _FbApiPrivate
guint unread;
FbId lastmid;
gchar *contacts_delta;
+ int tweak;
};
struct _FbApiData
@@ -87,6 +89,27 @@ fb_api_contacts_delta(FbApi *api, const gchar *delta_cursor);
G_DEFINE_TYPE(FbApi, fb_api, G_TYPE_OBJECT);
+static const gchar *agents[] = {
+ FB_API_AGENT,
+ FB_API_AGENT_BASE " " "[FBAN/Orca-Android;FBAV/64.0.0.5.83;FBPN/com.facebook.orca;FBLC/en_US;FBBV/26040814]",
+ FB_API_AGENT_BASE " " "[FBAN/Orca-Android;FBAV/109.0.0.17.70;FBBV/52182662]",
+ FB_API_AGENT_BASE " " "[FBAN/Orca-Android;FBAV/109.0.0.17.70;FBPN/com.facebook.orca;FBLC/en_US;FBBV/52182662]",
+ NULL,
+};
+
+static const gchar *
+fb_api_get_agent_string(int tweak, gboolean mqtt)
+{
+ gboolean http_only = tweak & 4;
+ gboolean mqtt_only = tweak & 8;
+
+ if (tweak <= 0 || tweak > 15 || (http_only && mqtt) || (mqtt_only && !mqtt)) {
+ return agents[0];
+ }
+
+ return agents[tweak & 3];
+}
+
static void
fb_api_set_property(GObject *obj, guint prop, const GValue *val,
GParamSpec *pspec)
@@ -116,6 +139,10 @@ fb_api_set_property(GObject *obj, guint prop, const GValue *val,
case PROP_UID:
priv->uid = g_value_get_int64(val);
break;
+ case PROP_TWEAK:
+ priv->tweak = g_value_get_int(val);
+ fb_http_set_agent(priv->http, fb_api_get_agent_string(priv->tweak, 0));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop, pspec);
@@ -147,6 +174,9 @@ fb_api_get_property(GObject *obj, guint prop, GValue *val, GParamSpec *pspec)
case PROP_UID:
g_value_set_int64(val, priv->uid);
break;
+ case PROP_TWEAK:
+ g_value_set_int(val, priv->tweak);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop, pspec);
@@ -268,6 +298,16 @@ fb_api_class_init(FbApiClass *klass)
"User identifier",
0, G_MAXINT64, 0,
G_PARAM_READWRITE);
+
+ /**
+ * FbApi:tweak:
+ */
+ props[PROP_TWEAK] = g_param_spec_int(
+ "tweak",
+ "Tweak",
+ "",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE);
g_object_class_install_properties(gklass, PROP_N, props);
/**
@@ -878,7 +918,9 @@ fb_api_cb_mqtt_open(FbMqtt *mqtt, gpointer data)
/* Write the information string */
fb_thrift_write_field(thft, FB_THRIFT_TYPE_STRING, 2, 1);
- fb_thrift_write_str(thft, FB_API_MQTT_AGENT);
+ fb_thrift_write_str(thft, (priv->tweak != 0)
+ ? fb_api_get_agent_string(priv->tweak, 1)
+ : FB_API_MQTT_AGENT);
/* Write the UNKNOWN ("cp"?) */
fb_thrift_write_field(thft, FB_THRIFT_TYPE_I64, 3, 2);