libpurple/protocols/facebook/thrift.c

Thu, 15 Sep 2016 13:31:06 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Thu, 15 Sep 2016 13:31:06 -0500
changeset 38069
56d191003b34
parent 37510
1bee26614db9
child 39431
86688eb3f593
permissions
-rw-r--r--

facebook: Port from sslconn to Gio

This patch ports usage of libpurple's sslconn.[ch] to native Gio.
There is potential to improve this by allowing for MqttMessages to
use external bytes without copying (provided they're consumed soon
enough) and to "steal" the bytes from a MqttMessage for sending.
Unfortunately GByteArray doesn't have all the memory management API
GBytes has.

37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1 /* purple
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
2 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
5 * source distribution.
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
6 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
10 * (at your option) any later version.
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
11 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
15 * GNU General Public License for more details.
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
16 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
20 */
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
21
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
22 #include <string.h>
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
23
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
24 #include "thrift.h"
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
25
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
26 struct _FbThriftPrivate
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
27 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
28 GByteArray *bytes;
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
29 gboolean internal;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
30 guint offset;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
31 guint pos;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
32 guint lastbool;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
33 };
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
34
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
35 G_DEFINE_TYPE(FbThrift, fb_thrift, G_TYPE_OBJECT);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
36
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
37 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
38 fb_thrift_dispose(GObject *obj)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
39 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
40 FbThriftPrivate *priv = FB_THRIFT(obj)->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
41
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
42 if (priv->internal) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
43 g_byte_array_free(priv->bytes, TRUE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
44 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
45 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
46
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
47 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
48 fb_thrift_class_init(FbThriftClass *klass)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
49 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
50 GObjectClass *gklass = G_OBJECT_CLASS(klass);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
51
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
52 gklass->dispose = fb_thrift_dispose;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
53 g_type_class_add_private(klass, sizeof (FbThriftPrivate));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
54 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
55
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
56 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
57 fb_thrift_init(FbThrift *thft)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
58 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
59 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
60
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
61 priv = G_TYPE_INSTANCE_GET_PRIVATE(thft, FB_TYPE_THRIFT,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
62 FbThriftPrivate);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
63 thft->priv = priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
64 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
65
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
66 FbThrift *
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
67 fb_thrift_new(GByteArray *bytes, guint offset)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
68 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
69 FbThrift *thft;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
70 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
71
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
72 thft = g_object_new(FB_TYPE_THRIFT, NULL);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
73 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
74
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
75 if (bytes != NULL) {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
76 priv->bytes = bytes;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
77 priv->offset = offset;
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
78 priv->pos = offset;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
79 } else {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
80 priv->bytes = g_byte_array_new();
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
81 priv->internal = TRUE;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
82 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
83
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
84 return thft;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
85 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
86
37327
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
87 const GByteArray *
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
88 fb_thrift_get_bytes(FbThrift *thft)
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
89 {
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
90 FbThriftPrivate *priv;
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
91
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
92 g_return_val_if_fail(FB_IS_THRIFT(thft), NULL);
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
93 priv = thft->priv;
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
94 return priv->bytes;
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
95 }
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
96
37268
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
97 guint
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
98 fb_thrift_get_pos(FbThrift *thft)
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
99 {
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
100 FbThriftPrivate *priv;
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
101
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
102 g_return_val_if_fail(FB_IS_THRIFT(thft), 0);
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
103 priv = thft->priv;
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
104 return priv->pos;
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
105 }
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
106
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
107 void
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
108 fb_thrift_set_pos(FbThrift *thft, guint pos)
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
109 {
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
110 FbThriftPrivate *priv;
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
111
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
112 g_return_if_fail(FB_IS_THRIFT(thft));
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
113 priv = thft->priv;
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
114 priv->pos = pos;
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
115 }
2d85594bb9ee facebook: fixed JSON parse errors with messages
James Geboski <jgeboski@gmail.com>
parents: 37267
diff changeset
116
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
117 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
118 fb_thrift_reset(FbThrift *thft)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
119 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
120 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
121
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
122 g_return_if_fail(FB_IS_THRIFT(thft));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
123 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
124 priv->pos = priv->offset;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
125 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
126
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
127 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
128 fb_thrift_read(FbThrift *thft, gpointer data, guint size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
129 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
130 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
131
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
132 g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
133 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
134
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
135 if ((priv->pos + size) > priv->bytes->len) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
136 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
137 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
138
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
139 if ((data != NULL) && (size > 0)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
140 memcpy(data, priv->bytes->data + priv->pos, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
141 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
142
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
143 priv->pos += size;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
144 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
145 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
146
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
147 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
148 fb_thrift_read_bool(FbThrift *thft, gboolean *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
149 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
150 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
151 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
152
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
153 g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
154 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
155
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
156 if ((priv->lastbool & 0x03) != 0x01) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
157 if (!fb_thrift_read_byte(thft, &byte)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
158 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
159 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
160
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
161 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
162 *value = (byte & 0x0F) == 0x01;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
163 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
164
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
165 priv->lastbool = 0;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
166 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
167 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
168
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
169 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
170 *value = ((priv->lastbool & 0x04) >> 2) != 0;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
171 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
172
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
173 priv->lastbool = 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
174 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
175 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
176
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
177 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
178 fb_thrift_read_byte(FbThrift *thft, guint8 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
179 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
180 return fb_thrift_read(thft, value, sizeof *value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
181 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
182
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
183 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
184 fb_thrift_read_dbl(FbThrift *thft, gdouble *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
185 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
186 gint64 i64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
187
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
188 /* Almost always 8, but check anyways */
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
189 static const gsize size = MIN(sizeof value, sizeof i64);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
190
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
191 if (!fb_thrift_read_i64(thft, &i64)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
192 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
193 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
194
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
195 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
196 memcpy(value, &i64, size);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
197 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
198
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
199 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
200 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
201
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
202 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
203 fb_thrift_read_i16(FbThrift *thft, gint16 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
204 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
205 gint64 i64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
206
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
207 if (!fb_thrift_read_i64(thft, &i64)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
208 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
209 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
210
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
211 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
212 *value = i64;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
213 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
214
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
215 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
216 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
217
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
218 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
219 fb_thrift_read_vi16(FbThrift *thft, guint16 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
220 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
221 guint64 u64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
222
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
223 if (!fb_thrift_read_vi64(thft, &u64)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
224 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
225 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
226
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
227 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
228 *value = u64;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
229 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
230
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
231 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
232 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
233
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
234 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
235 fb_thrift_read_i32(FbThrift *thft, gint32 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
236 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
237 gint64 i64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
238
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
239 if (!fb_thrift_read_i64(thft, &i64)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
240 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
241 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
242
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
243 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
244 *value = i64;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
245 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
246
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
247 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
248 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
249
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
250 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
251 fb_thrift_read_vi32(FbThrift *thft, guint32 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
252 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
253 guint64 u64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
254
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
255 if (!fb_thrift_read_vi64(thft, &u64)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
256 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
257 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
258
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
259 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
260 *value = u64;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
261 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
262
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
263 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
264 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
265
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
266 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
267 fb_thrift_read_i64(FbThrift *thft, gint64 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
268 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
269 guint64 u64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
270
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
271 if (!fb_thrift_read_vi64(thft, &u64)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
272 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
273 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
274
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
275 if (value != NULL) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
276 /* Convert from zigzag to integer */
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
277 *value = (u64 >> 0x01) ^ -(u64 & 0x01);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
278 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
279
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
280 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
281 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
282
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
283 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
284 fb_thrift_read_vi64(FbThrift *thft, guint64 *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
285 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
286 guint i = 0;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
287 guint8 byte;
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
288 guint64 u64 = 0;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
289
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
290 do {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
291 if (!fb_thrift_read_byte(thft, &byte)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
292 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
293 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
294
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
295 u64 |= ((guint64) (byte & 0x7F)) << i;
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
296 i += 7;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
297 } while ((byte & 0x80) == 0x80);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
298
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
299 if (value != NULL) {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
300 *value = u64;
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
301 }
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
302
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
303 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
304 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
305
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
306 gboolean
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
307 fb_thrift_read_str(FbThrift *thft, gchar **value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
308 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
309 guint8 *data;
37267
2dac11959ea1 facebook: fixed improper thrift string sizes
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
310 guint32 size;
2dac11959ea1 facebook: fixed improper thrift string sizes
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
311
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
312 if (!fb_thrift_read_vi32(thft, &size)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
313 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
314 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
315
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
316 if (value != NULL) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
317 data = g_new(guint8, size + 1);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
318 data[size] = 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
319 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
320 data = NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
321 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
322
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
323 if (!fb_thrift_read(thft, data, size)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
324 g_free(data);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
325 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
326 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
327
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
328 if (value != NULL) {
37471
32c1e77d0474 facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents: 37331
diff changeset
329 *value = (gchar *) data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
330 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
331
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
332 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
333 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
334
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
335 gboolean
37510
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
336 fb_thrift_read_field(FbThrift *thft, FbThriftType *type, gint16 *id,
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
337 gint16 lastid)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
338 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
339 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
340 gint16 i16;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
341 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
342
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
343 g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
344 g_return_val_if_fail(type != NULL, FALSE);
37510
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
345 g_return_val_if_fail(id != NULL, FALSE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
346 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
347
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
348 if (!fb_thrift_read_byte(thft, &byte)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
349 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
350 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
351
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
352 if (byte == FB_THRIFT_TYPE_STOP) {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
353 *type = FB_THRIFT_TYPE_STOP;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
354 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
355 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
356
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
357 *type = fb_thrift_ct2t(byte & 0x0F);
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
358 i16 = (byte & 0xF0) >> 4;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
359
37510
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
360 if (i16 == 0) {
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
361 if (!fb_thrift_read_i16(thft, id)) {
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
362 return FALSE;
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
363 }
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
364 } else {
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
365 *id = lastid + i16;
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
366 }
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
367
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
368 if (*type == FB_THRIFT_TYPE_BOOL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
369 priv->lastbool = 0x01;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
370
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
371 if ((byte & 0x0F) == 0x01) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
372 priv->lastbool |= 0x01 << 2;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
373 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
374 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
375
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
376 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
377 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
378
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
379 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
380 fb_thrift_read_stop(FbThrift *thft)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
381 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
382 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
383
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
384 return fb_thrift_read_byte(thft, &byte) &&
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
385 (byte == FB_THRIFT_TYPE_STOP);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
386 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
387
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
388 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
389 fb_thrift_read_isstop(FbThrift *thft)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
390 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
391 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
392 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
393
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
394 g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
395 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
396
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
397 if (!fb_thrift_read_byte(thft, &byte)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
398 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
399 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
400
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
401 priv->pos--;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
402 return byte == FB_THRIFT_TYPE_STOP;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
403 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
404
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
405 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
406 fb_thrift_read_list(FbThrift *thft, FbThriftType *type, guint *size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
407 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
408 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
409 guint32 u32;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
410
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
411 g_return_val_if_fail(type != NULL, FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
412 g_return_val_if_fail(size != NULL, FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
413
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
414 if (!fb_thrift_read_byte(thft, &byte)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
415 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
416 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
417
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
418 *type = fb_thrift_ct2t(byte & 0x0F);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
419 *size = (byte & 0xF0) >> 4;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
420
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
421 if (*size == 0x0F) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
422 if (!fb_thrift_read_vi32(thft, &u32)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
423 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
424 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
425
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
426 *size = u32;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
427 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
428
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
429 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
430 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
431
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
432 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
433 fb_thrift_read_map(FbThrift *thft, FbThriftType *ktype, FbThriftType *vtype,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
434 guint *size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
435 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
436 gint32 i32;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
437 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
438
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
439 g_return_val_if_fail(ktype != NULL, FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
440 g_return_val_if_fail(vtype != NULL, FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
441 g_return_val_if_fail(size != NULL, FALSE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
442
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
443 if (!fb_thrift_read_i32(thft, &i32)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
444 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
445 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
446
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
447 if (i32 != 0) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
448 if (!fb_thrift_read_byte(thft, &byte)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
449 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
450 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
451
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
452 *ktype = fb_thrift_ct2t((byte & 0xF0) >> 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
453 *vtype = fb_thrift_ct2t(byte & 0x0F);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
454 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
455 *ktype = 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
456 *vtype = 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
457 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
458
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
459 *size = i32;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
460 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
461 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
462
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
463 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
464 fb_thrift_read_set(FbThrift *thft, FbThriftType *type, guint *size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
465 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
466 return fb_thrift_read_list(thft, type, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
467 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
468
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
469 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
470 fb_thrift_write(FbThrift *thft, gconstpointer data, guint size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
471 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
472 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
473
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
474 g_return_if_fail(FB_IS_THRIFT(thft));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
475 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
476
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
477 g_byte_array_append(priv->bytes, data, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
478 priv->pos += size;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
479 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
480
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
481 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
482 fb_thrift_write_bool(FbThrift *thft, gboolean value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
483 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
484 FbThriftPrivate *priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
485 guint pos;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
486
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
487 g_return_if_fail(FB_IS_THRIFT(thft));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
488 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
489
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
490 if ((priv->lastbool & 0x03) != 0x02) {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
491 fb_thrift_write_byte(thft, value ? 0x01 : 0x02);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
492 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
493 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
494
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
495 pos = priv->lastbool >> 3;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
496 priv->lastbool = 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
497
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
498 if ((pos >= priv->offset) && (pos < priv->bytes->len)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
499 priv->bytes->data[pos] &= ~0x0F;
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
500 priv->bytes->data[pos] |= value ? 0x01 : 0x02;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
501 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
502 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
503
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
504 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
505 fb_thrift_write_byte(FbThrift *thft, guint8 value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
506 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
507 fb_thrift_write(thft, &value, sizeof value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
508 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
509
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
510 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
511 fb_thrift_write_dbl(FbThrift *thft, gdouble value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
512 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
513 gint64 i64;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
514
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
515 /* Almost always 8, but check anyways */
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
516 static const gsize size = MIN(sizeof value, sizeof i64);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
517
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
518 memcpy(&i64, &value, size);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
519 fb_thrift_write_i64(thft, i64);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
520 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
521
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
522 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
523 fb_thrift_write_i16(FbThrift *thft, gint16 value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
524 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
525 fb_thrift_write_i64(thft, value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
526 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
527
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
528 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
529 fb_thrift_write_vi16(FbThrift *thft, guint16 value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
530 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
531 fb_thrift_write_vi64(thft, value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
532 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
533
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
534 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
535 fb_thrift_write_i32(FbThrift *thft, gint32 value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
536 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
537 value = (value << 1) ^ (value >> 31);
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
538 fb_thrift_write_vi64(thft, value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
539 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
540
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
541 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
542 fb_thrift_write_vi32(FbThrift *thft, guint32 value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
543 {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
544 fb_thrift_write_vi64(thft, value);
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
545 }
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
546
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
547 void
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
548 fb_thrift_write_i64(FbThrift *thft, gint64 value)
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
549 {
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
550 value = (value << 1) ^ (value >> 63);
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
551 fb_thrift_write_vi64(thft, value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
552 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
553
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
554 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
555 fb_thrift_write_vi64(FbThrift *thft, guint64 value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
556 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
557 gboolean last;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
558 guint8 byte;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
559
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
560 do {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
561 last = (value & ~0x7F) == 0;
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
562 byte = value & 0x7F;
37327
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
563
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
564 if (!last) {
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
565 byte |= 0x80;
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
566 value >>= 7;
37327
68220e4ccb15 facebook: upgraded MQTT version to MQTToT
James Geboski <jgeboski@gmail.com>
parents: 37268
diff changeset
567 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
568
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
569 fb_thrift_write_byte(thft, byte);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
570 } while (!last);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
571 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
572
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
573 void
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
574 fb_thrift_write_str(FbThrift *thft, const gchar *value)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
575 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
576 guint32 size;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
577
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
578 g_return_if_fail(value != NULL);
37267
2dac11959ea1 facebook: fixed improper thrift string sizes
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
579
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
580 size = strlen(value);
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
581 fb_thrift_write_vi32(thft, size);
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
582 fb_thrift_write(thft, value, size);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
583 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
584
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
585 void
37510
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
586 fb_thrift_write_field(FbThrift *thft, FbThriftType type, gint16 id,
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
587 gint16 lastid)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
588 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
589 FbThriftPrivate *priv;
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
590 gint16 diff;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
591
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
592 g_return_if_fail(FB_IS_THRIFT(thft));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
593 priv = thft->priv;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
594
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
595 if (type == FB_THRIFT_TYPE_BOOL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
596 priv->lastbool = (priv->pos << 3) | 0x02;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
597 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
598
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
599 type = fb_thrift_t2ct(type);
37510
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
600 diff = id - lastid;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
601
37510
1bee26614db9 facebook: properly handle optional Thrift fields and scoping
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
602 if ((id <= lastid) || (diff > 0x0F)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
603 fb_thrift_write_byte(thft, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
604 fb_thrift_write_i16(thft, id);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
605 } else {
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
606 fb_thrift_write_byte(thft, (diff << 4) | type);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
607 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
608 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
609
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
610 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
611 fb_thrift_write_stop(FbThrift *thft)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
612 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
613 fb_thrift_write_byte(thft, FB_THRIFT_TYPE_STOP);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
614 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
615
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
616 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
617 fb_thrift_write_list(FbThrift *thft, FbThriftType type, guint size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
618 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
619 type = fb_thrift_t2ct(type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
620
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
621 if (size <= 14) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
622 fb_thrift_write_byte(thft, (size << 4) | type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
623 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
624 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
625
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
626 fb_thrift_write_vi32(thft, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
627 fb_thrift_write_byte(thft, 0xF0 | type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
628 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
629
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
630 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
631 fb_thrift_write_map(FbThrift *thft, FbThriftType ktype, FbThriftType vtype,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
632 guint size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
633 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
634 if (size == 0) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
635 fb_thrift_write_byte(thft, 0);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
636 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
637 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
638
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
639 ktype = fb_thrift_t2ct(ktype);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
640 vtype = fb_thrift_t2ct(vtype);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
641
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
642 fb_thrift_write_vi32(thft, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
643 fb_thrift_write_byte(thft, (ktype << 4) | vtype);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
644 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
645
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
646 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
647 fb_thrift_write_set(FbThrift *thft, FbThriftType type, guint size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
648 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
649 fb_thrift_write_list(thft, type, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
650 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
651
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
652 guint8
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
653 fb_thrift_t2ct(FbThriftType type)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
654 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
655 static const guint8 types[] = {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
656 [FB_THRIFT_TYPE_STOP] = 0,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
657 [FB_THRIFT_TYPE_VOID] = 0,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
658 [FB_THRIFT_TYPE_BOOL] = 2,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
659 [FB_THRIFT_TYPE_BYTE] = 3,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
660 [FB_THRIFT_TYPE_DOUBLE] = 7,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
661 [5] = 0,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
662 [FB_THRIFT_TYPE_I16] = 4,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
663 [7] = 0,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
664 [FB_THRIFT_TYPE_I32] = 5,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
665 [9] = 0,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
666 [FB_THRIFT_TYPE_I64] = 6,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
667 [FB_THRIFT_TYPE_STRING] = 8,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
668 [FB_THRIFT_TYPE_STRUCT] = 12,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
669 [FB_THRIFT_TYPE_MAP] = 11,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
670 [FB_THRIFT_TYPE_SET] = 10,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
671 [FB_THRIFT_TYPE_LIST] = 9
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
672 };
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
673
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
674 g_return_val_if_fail(type < G_N_ELEMENTS(types), 0);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
675 return types[type];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
676 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
677
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
678 FbThriftType
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
679 fb_thrift_ct2t(guint8 type)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
680 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
681 static const guint8 types[] = {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
682 [0] = FB_THRIFT_TYPE_STOP,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
683 [1] = FB_THRIFT_TYPE_BOOL,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
684 [2] = FB_THRIFT_TYPE_BOOL,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
685 [3] = FB_THRIFT_TYPE_BYTE,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
686 [4] = FB_THRIFT_TYPE_I16,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
687 [5] = FB_THRIFT_TYPE_I32,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
688 [6] = FB_THRIFT_TYPE_I64,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
689 [7] = FB_THRIFT_TYPE_DOUBLE,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
690 [8] = FB_THRIFT_TYPE_STRING,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
691 [9] = FB_THRIFT_TYPE_LIST,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
692 [10] = FB_THRIFT_TYPE_SET,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
693 [11] = FB_THRIFT_TYPE_MAP,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
694 [12] = FB_THRIFT_TYPE_STRUCT
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
695 };
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
696
37331
9cd963f45997 facebook: removed binary thrift support
James Geboski <jgeboski@gmail.com>
parents: 37327
diff changeset
697 g_return_val_if_fail(type < G_N_ELEMENTS(types), 0);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
698 return types[type];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
699 }

mercurial