Tue, 27 Jun 2017 11:58:03 -0500
facebook: Fix reading MQTT ping responses
MQTT ping packets are only a two byte header with a zero length
content. The Gio port of this was coded such that packets with zero
length contents were considered to not have been fully received.
This caused the MQTT connection to get stuck after a ping response
was received and eventually timeout. Therefore, the connection
would "fail" and reconnect every 1.5 minutes or so.
This patch fixes this by reworking that logic to also accept fully
received packets with a zero length content.
|
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 "internal.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 <stdarg.h> |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
25 | #include <string.h> |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
26 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
27 | #include "json.h" |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
28 | #include "util.h" |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
29 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
30 | typedef struct _FbJsonValue FbJsonValue; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
31 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
32 | struct _FbJsonValue |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
33 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
34 | const gchar *expr; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
35 | FbJsonType type; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
36 | gboolean required; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
37 | GValue value; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
38 | }; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
39 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
40 | struct _FbJsonValuesPrivate |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
41 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
42 | JsonNode *root; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
43 | GQueue *queue; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
44 | GList *next; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
45 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
46 | gboolean isarray; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
47 | JsonArray *array; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
48 | guint index; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
49 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
50 | GError *error; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
51 | }; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
52 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
53 | G_DEFINE_TYPE(FbJsonValues, fb_json_values, G_TYPE_OBJECT); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
54 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
55 | static void |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
56 | fb_json_values_dispose(GObject *obj) |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
57 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
58 | FbJsonValue *value; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
59 | FbJsonValuesPrivate *priv = FB_JSON_VALUES(obj)->priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
60 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
61 | while (!g_queue_is_empty(priv->queue)) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
62 | value = g_queue_pop_head(priv->queue); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
63 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
64 | if (G_IS_VALUE(&value->value)) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
65 | g_value_unset(&value->value); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
66 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
67 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
68 | g_free(value); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
69 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
70 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
71 | if (priv->array != NULL) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
72 | json_array_unref(priv->array); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
73 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
74 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
75 | if (priv->error != NULL) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
76 | g_error_free(priv->error); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
77 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
78 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
79 | g_queue_free(priv->queue); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
80 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
81 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
82 | static void |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
83 | fb_json_values_class_init(FbJsonValuesClass *klass) |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
84 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
85 | GObjectClass *gklass = G_OBJECT_CLASS(klass); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
86 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
87 | gklass->dispose = fb_json_values_dispose; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
88 | g_type_class_add_private(klass, sizeof (FbJsonValuesPrivate)); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
89 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
90 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
91 | static void |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
92 | fb_json_values_init(FbJsonValues *values) |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
93 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
94 | FbJsonValuesPrivate *priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
95 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
96 | priv = G_TYPE_INSTANCE_GET_PRIVATE(values, FB_TYPE_JSON_VALUES, |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
97 | FbJsonValuesPrivate); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
98 | values->priv = priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
99 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
100 | priv->queue = g_queue_new(); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
101 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
102 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
103 | GQuark |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
104 | fb_json_error_quark(void) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
105 | { |
|
37252
be11d9f148a6
facebook: initialize static GQuarks
James Geboski <jgeboski@gmail.com>
parents:
37251
diff
changeset
|
106 | static GQuark q = 0; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
107 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
108 | if (G_UNLIKELY(q == 0)) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
109 | q = g_quark_from_static_string("fb-json-error-quark"); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
110 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
111 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
112 | return q; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
113 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
114 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
115 | JsonBuilder * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
116 | fb_json_bldr_new(JsonNodeType type) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
117 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
118 | JsonBuilder *bldr; |
|
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 | bldr = json_builder_new(); |
|
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 | switch (type) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
123 | case JSON_NODE_ARRAY: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
124 | fb_json_bldr_arr_begin(bldr, NULL); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
125 | break; |
|
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 | case JSON_NODE_OBJECT: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
128 | fb_json_bldr_obj_begin(bldr, NULL); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
129 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
130 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
131 | default: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
132 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
133 | } |
|
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 | return bldr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
136 | } |
|
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 | gchar * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
139 | fb_json_bldr_close(JsonBuilder *bldr, JsonNodeType type, gsize *size) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
140 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
141 | gchar *ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
142 | JsonGenerator *genr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
143 | JsonNode *root; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
144 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
145 | switch (type) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
146 | case JSON_NODE_ARRAY: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
147 | fb_json_bldr_arr_end(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
148 | break; |
|
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 | case JSON_NODE_OBJECT: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
151 | fb_json_bldr_obj_end(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
152 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
153 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
154 | default: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
155 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
156 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
157 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
158 | genr = json_generator_new(); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
159 | root = json_builder_get_root(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
160 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
161 | json_generator_set_root(genr, root); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
162 | ret = json_generator_to_data(genr, size); |
|
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 | json_node_free(root); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
165 | g_object_unref(genr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
166 | g_object_unref(bldr); |
|
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 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
169 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
170 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
171 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
172 | fb_json_bldr_arr_begin(JsonBuilder *bldr, const gchar *name) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
173 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
174 | if (name != NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
175 | json_builder_set_member_name(bldr, name); |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
178 | json_builder_begin_array(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
179 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
180 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
181 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
182 | fb_json_bldr_arr_end(JsonBuilder *bldr) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
183 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
184 | json_builder_end_array(bldr); |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
187 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
188 | fb_json_bldr_obj_begin(JsonBuilder *bldr, const gchar *name) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
189 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
190 | if (name != NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
191 | json_builder_set_member_name(bldr, name); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
192 | } |
|
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 | json_builder_begin_object(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
195 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
196 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
197 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
198 | fb_json_bldr_obj_end(JsonBuilder *bldr) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
199 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
200 | json_builder_end_object(bldr); |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
203 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
204 | fb_json_bldr_add_bool(JsonBuilder *bldr, const gchar *name, gboolean value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
205 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
206 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
207 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
208 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
209 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
210 | json_builder_add_boolean_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
211 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
212 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
213 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
214 | fb_json_bldr_add_dbl(JsonBuilder *bldr, const gchar *name, gdouble value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
215 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
216 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
217 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
218 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
219 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
220 | json_builder_add_double_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
221 | } |
|
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 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
224 | fb_json_bldr_add_int(JsonBuilder *bldr, const gchar *name, gint64 value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
225 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
226 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
227 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
228 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
229 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
230 | json_builder_add_int_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
231 | } |
|
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 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
234 | fb_json_bldr_add_str(JsonBuilder *bldr, const gchar *name, const gchar *value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
235 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
236 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
237 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
238 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
239 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
240 | json_builder_add_string_value(bldr, value); |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
243 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
244 | fb_json_bldr_add_strf(JsonBuilder *bldr, const gchar *name, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
245 | const gchar *format, ...) |
|
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 | gchar *value; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
248 | va_list ap; |
|
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 | va_start(ap, format); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
251 | value = g_strdup_vprintf(format, ap); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
252 | va_end(ap); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
253 | |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
254 | fb_json_bldr_add_str(bldr, name, value); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
255 | g_free(value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
256 | } |
|
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 | JsonNode * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
259 | fb_json_node_new(const gchar *data, gssize size, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
260 | { |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
261 | gchar *slice; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
262 | JsonNode *root; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
263 | JsonParser *prsr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
264 | |
|
37431
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
265 | g_return_val_if_fail(data != NULL, NULL); |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
266 | |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
267 | if (size < 0) { |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
268 | size = strlen(data); |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
269 | } |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
270 | |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
271 | /* Ensure data is null terminated for json-glib < 1.0.2 */ |
|
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
272 | slice = g_strndup(data, size); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
273 | prsr = json_parser_new(); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
274 | |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
275 | if (!json_parser_load_from_data(prsr, slice, size, error)) { |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
276 | g_object_unref(prsr); |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
277 | g_free(slice); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
278 | return NULL; |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
281 | root = json_parser_get_root(prsr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
282 | root = json_node_copy(root); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
283 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
284 | g_object_unref(prsr); |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
285 | g_free(slice); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
286 | return root; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
287 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
288 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
289 | JsonNode * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
290 | fb_json_node_get(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
291 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
292 | GError *err = NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
293 | guint size; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
294 | JsonArray *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
295 | JsonNode *node; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
296 | JsonNode *ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
297 | |
|
37430
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
298 | /* Special case for json-glib < 0.99.2 */ |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
299 | if (purple_strequal(expr, "$")) { |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
300 | return json_node_copy(root); |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
301 | } |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
302 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
303 | node = json_path_query(expr, root, &err); |
|
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 | if (err != NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
306 | g_propagate_error(error, err); |
|
37251
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
307 | json_node_free(node); |
|
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
308 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
309 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
310 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
311 | rslt = json_node_get_array(node); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
312 | size = json_array_get_length(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
313 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
314 | if (size < 1) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
315 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_NOMATCH, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
316 | _("No matches for %s"), expr); |
|
37251
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
317 | json_node_free(node); |
|
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
318 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
319 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
320 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
321 | if (size > 1) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
322 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_AMBIGUOUS, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
323 | _("Ambiguous matches for %s"), expr); |
|
37251
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
324 | json_node_free(node); |
|
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
325 | return NULL; |
|
37250
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 | |
|
37299
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
328 | if (json_array_get_null_element(rslt, 0)) { |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
329 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_NULL, |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
330 | _("Null value for %s"), expr); |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
331 | json_node_free(node); |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
332 | return NULL; |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
333 | } |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
334 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
335 | ret = json_array_dup_element(rslt, 0); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
336 | json_node_free(node); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
337 | return ret; |
|
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 | |
|
37315
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
340 | JsonNode * |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
341 | fb_json_node_get_nth(JsonNode *root, guint n) |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
342 | { |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
343 | GList *vals; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
344 | JsonNode *ret; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
345 | JsonObject *obj; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
346 | |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
347 | obj = json_node_get_object(root); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
348 | vals = json_object_get_values(obj); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
349 | ret = g_list_nth_data(vals, n); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
350 | |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
351 | g_list_free(vals); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
352 | return ret; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
353 | } |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
354 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
355 | JsonArray * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
356 | fb_json_node_get_arr(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
357 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
358 | JsonArray *ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
359 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
360 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
361 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
362 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
363 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
364 | return NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
365 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
366 | |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
367 | ret = json_node_dup_array(rslt); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
368 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
369 | return ret; |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
372 | gboolean |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
373 | fb_json_node_get_bool(JsonNode *root, const gchar *expr, GError **error) |
|
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 | gboolean ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
376 | JsonNode *rslt; |
|
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 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
379 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
380 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
381 | return FALSE; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
382 | } |
|
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 | ret = json_node_get_boolean(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
385 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
386 | return ret; |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
389 | gdouble |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
390 | fb_json_node_get_dbl(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
391 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
392 | gdouble ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
393 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
394 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
395 | rslt = fb_json_node_get(root, expr, error); |
|
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 (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
398 | return 0.0; |
|
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 | ret = json_node_get_double(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
402 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
403 | return ret; |
|
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 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
406 | gint64 |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
407 | fb_json_node_get_int(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
408 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
409 | gint64 ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
410 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
411 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
412 | rslt = fb_json_node_get(root, expr, error); |
|
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 (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
415 | return 0; |
|
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 | ret = json_node_get_int(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
419 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
420 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
421 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
422 | |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
423 | gchar * |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
424 | fb_json_node_get_str(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
425 | { |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
426 | gchar *ret; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
427 | JsonNode *rslt; |
|
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 | rslt = fb_json_node_get(root, expr, error); |
|
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 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
432 | return NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
433 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
434 | |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
435 | ret = json_node_dup_string(rslt); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
436 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
437 | return ret; |
|
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 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
440 | FbJsonValues * |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
441 | fb_json_values_new(JsonNode *root) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
442 | { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
443 | FbJsonValues *values; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
444 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
445 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
446 | g_return_val_if_fail(root != NULL, NULL); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
447 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
448 | values = g_object_new(FB_TYPE_JSON_VALUES, NULL); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
449 | priv = values->priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
450 | priv->root = root; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
451 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
452 | return values; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
453 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
454 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
455 | void |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
456 | fb_json_values_add(FbJsonValues *values, FbJsonType type, gboolean required, |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
457 | const gchar *expr) |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
458 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
459 | FbJsonValue *value; |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
460 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
461 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
462 | g_return_if_fail(values != NULL); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
463 | g_return_if_fail(expr != NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
464 | priv = values->priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
465 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
466 | value = g_new0(FbJsonValue, 1); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
467 | value->expr = expr; |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
468 | value->type = type; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
469 | value->required = required; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
470 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
471 | g_queue_push_tail(priv->queue, value); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
472 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
473 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
474 | JsonNode * |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
475 | fb_json_values_get_root(FbJsonValues *values) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
476 | { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
477 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
478 | guint index; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
479 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
480 | g_return_val_if_fail(values != NULL, NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
481 | priv = values->priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
482 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
483 | if (priv->array == NULL) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
484 | return priv->root; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
485 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
486 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
487 | g_return_val_if_fail(priv->index > 0, NULL); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
488 | index = priv->index - 1; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
489 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
490 | if (json_array_get_length(priv->array) <= index) { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
491 | return NULL; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
492 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
493 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
494 | return json_array_get_element(priv->array, index); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
495 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
496 | |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
497 | void |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
498 | fb_json_values_set_array(FbJsonValues *values, gboolean required, |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
499 | const gchar *expr) |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
500 | { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
501 | FbJsonValuesPrivate *priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
502 | |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
503 | g_return_if_fail(values != NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
504 | priv = values->priv; |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
505 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
506 | priv->array = fb_json_node_get_arr(priv->root, expr, &priv->error); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
507 | priv->isarray = TRUE; |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
508 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
509 | if ((priv->error != NULL) && !required) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
510 | g_clear_error(&priv->error); |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
511 | } |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
512 | } |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
513 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
514 | gboolean |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
515 | fb_json_values_update(FbJsonValues *values, GError **error) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
516 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
517 | FbJsonValue *value; |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
518 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
519 | GError *err = NULL; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
520 | GList *l; |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
521 | GType type; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
522 | JsonNode *root; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
523 | JsonNode *node; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
524 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
525 | g_return_val_if_fail(values != NULL, FALSE); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
526 | priv = values->priv; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
527 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
528 | if (G_UNLIKELY(priv->error != NULL)) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
529 | g_propagate_error(error, priv->error); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
530 | priv->error = NULL; |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
531 | return FALSE; |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
532 | } |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
533 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
534 | if (priv->isarray) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
535 | if ((priv->array == NULL) || |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
536 | (json_array_get_length(priv->array) <= priv->index)) |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
537 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
538 | return FALSE; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
539 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
540 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
541 | root = json_array_get_element(priv->array, priv->index++); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
542 | } else { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
543 | root = priv->root; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
544 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
545 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
546 | g_return_val_if_fail(root != NULL, FALSE); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
547 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
548 | for (l = priv->queue->head; l != NULL; l = l->next) { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
549 | value = l->data; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
550 | node = fb_json_node_get(root, value->expr, &err); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
551 | |
|
37315
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
552 | if (G_IS_VALUE(&value->value)) { |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
553 | g_value_unset(&value->value); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
554 | } |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
555 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
556 | if (err != NULL) { |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
557 | json_node_free(node); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
558 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
559 | if (value->required) { |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
560 | g_propagate_error(error, err); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
561 | return FALSE; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
562 | } |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
563 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
564 | g_clear_error(&err); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
565 | continue; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
566 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
567 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
568 | type = json_node_get_value_type(node); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
569 | |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
570 | if (G_UNLIKELY(type != value->type)) { |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
571 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_TYPE, |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
572 | _("Expected a %s but got a %s for %s"), |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
573 | g_type_name(value->type), |
|
37320
a21c8ba4d0e9
facebook: fixed the printing of invalid JSON type names
James Geboski <jgeboski@gmail.com>
parents:
37316
diff
changeset
|
574 | g_type_name(type), |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
575 | value->expr); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
576 | json_node_free(node); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
577 | return FALSE; |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
578 | } |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
579 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
580 | json_node_get_value(node, &value->value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
581 | json_node_free(node); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
582 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
583 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
584 | priv->next = priv->queue->head; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
585 | return TRUE; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
586 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
587 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
588 | const GValue * |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
589 | fb_json_values_next(FbJsonValues *values) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
590 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
591 | FbJsonValue *value; |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
592 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
593 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
594 | g_return_val_if_fail(values != NULL, NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
595 | priv = values->priv; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
596 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
597 | g_return_val_if_fail(priv->next != NULL, NULL); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
598 | value = priv->next->data; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
599 | priv->next = priv->next->next; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
600 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
601 | if (!G_IS_VALUE(&value->value)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
602 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
603 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
604 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
605 | return &value->value; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
606 | } |
|
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 | gboolean |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
609 | fb_json_values_next_bool(FbJsonValues *values, gboolean defval) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
610 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
611 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
612 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
613 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
614 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
615 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
616 | return defval; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
617 | } |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
618 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
619 | return g_value_get_boolean(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
620 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
621 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
622 | gdouble |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
623 | fb_json_values_next_dbl(FbJsonValues *values, gdouble defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
624 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
625 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
626 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
627 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
628 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
629 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
630 | return defval; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
631 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
632 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
633 | return g_value_get_double(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
634 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
635 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
636 | gint64 |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
637 | fb_json_values_next_int(FbJsonValues *values, gint64 defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
638 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
639 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
640 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
641 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
642 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
643 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
644 | return defval; |
|
37250
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 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
647 | return g_value_get_int64(value); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
648 | } |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
649 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
650 | const gchar * |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
651 | fb_json_values_next_str(FbJsonValues *values, const gchar *defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
652 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
653 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
654 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
655 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
656 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
657 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
658 | return defval; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
659 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
660 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
661 | return g_value_get_string(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
662 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
663 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
664 | gchar * |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
665 | fb_json_values_next_str_dup(FbJsonValues *values, const gchar *defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
666 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
667 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
668 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
669 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
670 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
671 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
672 | return g_strdup(defval); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
673 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
674 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
675 | return g_value_dup_string(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
676 | } |