diff options
author | Marius Halden <marius.h@lden.org> | 2017-07-08 14:39:25 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2017-07-08 14:39:25 +0200 |
commit | 049c34398641f52913c00832ad24388442b61caa (patch) | |
tree | cb5c38da10118ec8a7a2aa69303e8a138c971315 | |
parent | 2211c7c2026ad5c2cf67e1bb27470dd61e443f12 (diff) | |
parent | 8bbf163cfb796524754d7872e148c9793cd4452f (diff) | |
download | bitlbee-facebook-049c34398641f52913c00832ad24388442b61caa.tar.gz bitlbee-facebook-049c34398641f52913c00832ad24388442b61caa.tar.bz2 bitlbee-facebook-049c34398641f52913c00832ad24388442b61caa.tar.xz |
Merge branch 'master' into track-messages
-rw-r--r-- | facebook/Makefile.am | 2 | ||||
-rw-r--r-- | facebook/facebook-api.c | 44 | ||||
-rw-r--r-- | facebook/facebook-api.h | 3 | ||||
-rw-r--r-- | facebook/facebook-data.c | 9 | ||||
-rw-r--r-- | facebook/facebook-http.c | 14 | ||||
-rw-r--r-- | facebook/facebook-http.h | 8 | ||||
-rw-r--r-- | facebook/facebook.c | 3 |
7 files changed, 80 insertions, 3 deletions
diff --git a/facebook/Makefile.am b/facebook/Makefile.am index 08254e2..779abbe 100644 --- a/facebook/Makefile.am +++ b/facebook/Makefile.am @@ -33,7 +33,7 @@ facebook_la_SOURCES = \ facebook-util.h # Build the library as a module -facebook_la_LDFLAGS += -module -avoid-version -no-undefined +facebook_la_LDFLAGS += -module -avoid-version EXTRA_DIST = \ marshaller.list 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); diff --git a/facebook/facebook-api.h b/facebook/facebook-api.h index 7236b48..3ed0e41 100644 --- a/facebook/facebook-api.h +++ b/facebook/facebook-api.h @@ -110,7 +110,8 @@ * * The HTTP User-Agent header. */ -#define FB_API_AGENT "Facebook plugin / BitlBee / " PACKAGE_VERSION " " FB_ORCA_AGENT +#define FB_API_AGENT_BASE "Facebook plugin / BitlBee / " PACKAGE_VERSION +#define FB_API_AGENT FB_API_AGENT_BASE " " FB_ORCA_AGENT /** * FB_API_MQTT_AGENT diff --git a/facebook/facebook-data.c b/facebook/facebook-data.c index f7f7000..99cd5e5 100644 --- a/facebook/facebook-data.c +++ b/facebook/facebook-data.c @@ -117,6 +117,7 @@ fb_data_load(FbData *fata) guint i; guint64 uint; GValue val = G_VALUE_INIT; + int num; g_return_val_if_fail(FB_IS_DATA(fata), FALSE); priv = fata->priv; @@ -160,6 +161,14 @@ fb_data_load(FbData *fata) ret = FALSE; } + num = set_getint(&acct->set, "tweak"); + if (num != 0) { + g_value_init(&val, G_TYPE_INT); + g_value_set_int(&val, num); + g_object_set_property(G_OBJECT(priv->api), "tweak", &val); + g_value_unset(&val); + } + fb_api_rehash(priv->api); return ret; } diff --git a/facebook/facebook-http.c b/facebook/facebook-http.c index 6234d55..7335848 100644 --- a/facebook/facebook-http.c +++ b/facebook/facebook-http.c @@ -242,6 +242,20 @@ fb_http_cookies_parse_request(FbHttp *http, FbHttpRequest *req) g_strfreev(hdrs); } +void +fb_http_set_agent(FbHttp *http, const gchar *agent) +{ + FbHttpPrivate *priv; + + g_return_if_fail(FB_IS_HTTP(http)); + priv = http->priv; + + if (agent != priv->agent && g_strcmp0(agent, priv->agent)) { + g_free(priv->agent); + priv->agent = g_strdup(agent); + } +} + FbHttpRequest * fb_http_request_new(FbHttp *http, const gchar *url, gboolean post, FbHttpFunc func, gpointer data) diff --git a/facebook/facebook-http.h b/facebook/facebook-http.h index b3ff001..f7d02d9 100644 --- a/facebook/facebook-http.h +++ b/facebook/facebook-http.h @@ -206,6 +206,14 @@ void fb_http_cookies_parse_request(FbHttp *http, FbHttpRequest *req); /** + * fb_http_set_agent: + * @http: The #FbHttp. + * @agent: The new user agent string. + */ +void +fb_http_set_agent(FbHttp *http, const gchar *agent); + +/** * fb_http_request_new: * @http: The #FbHttp. * @url: The url. diff --git a/facebook/facebook.c b/facebook/facebook.c index 3079d0c..63250d9 100644 --- a/facebook/facebook.c +++ b/facebook/facebook.c @@ -763,6 +763,9 @@ fb_init(account_t *acct) s = set_add(&acct->set, "uid", NULL, NULL, acct); s->flags = SET_NULL_OK | SET_HIDDEN; + s = set_add(&acct->set, "tweak", NULL, NULL, acct); + s->flags = SET_NULL_OK | SET_HIDDEN; + set_add(&acct->set, "group_chat_open", "false", fb_eval_open, acct); set_add(&acct->set, "mark_read", "false", fb_eval_mark_read, acct); set_add(&acct->set, "mark_read_reply", "false", set_eval_bool, acct); |