libpurple/protocols/facebook/http.c

Tue, 27 Jun 2017 11:58:03 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Tue, 27 Jun 2017 11:58:03 -0500
changeset 38381
0f253504b9dd
parent 38186
274f63f95cc2
child 39062
6ebdc4e91adc
permissions
-rw-r--r--

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
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
22 #include "internal.h"
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
23
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
24 #include <string.h>
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
25
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
26 #include "http.h"
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
27
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
28 struct _FbHttpConns
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
29 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
30 GHashTable *cons;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
31 gboolean canceled;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
32 };
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
33
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
34 GQuark
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
35 fb_http_error_quark(void)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
36 {
37252
be11d9f148a6 facebook: initialize static GQuarks
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
37 static GQuark q = 0;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
38
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
39 if (G_UNLIKELY(q == 0)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
40 q = g_quark_from_static_string("fb-http-error-quark");
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
41 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
42
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
43 return q;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
44 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
45
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
46 FbHttpConns *
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
47 fb_http_conns_new(void)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
48 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
49 FbHttpConns *cons;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
50
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
51 cons = g_new0(FbHttpConns, 1);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
52 cons->cons = g_hash_table_new(g_direct_hash, g_direct_equal);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
53 return cons;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
54 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
55
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
56 void
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
57 fb_http_conns_free(FbHttpConns *cons)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
58 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
59 g_return_if_fail(cons != NULL);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
60
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
61 g_hash_table_destroy(cons->cons);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
62 g_free(cons);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
63 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
64
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
65 void
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
66 fb_http_conns_cancel_all(FbHttpConns *cons)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
67 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
68 GHashTableIter iter;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
69 gpointer con;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
70
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
71 g_return_if_fail(cons != NULL);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
72 g_return_if_fail(!cons->canceled);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
73
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
74 cons->canceled = TRUE;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
75 g_hash_table_iter_init(&iter, cons->cons);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
76
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
77 while (g_hash_table_iter_next(&iter, &con, NULL)) {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
78 g_hash_table_iter_remove(&iter);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
79 purple_http_conn_cancel(con);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
80 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
81 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
82
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
83 gboolean
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
84 fb_http_conns_is_canceled(FbHttpConns *cons)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
85 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
86 g_return_val_if_fail(cons != NULL, TRUE);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
87 return cons->canceled;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
88 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
89
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
90 void
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
91 fb_http_conns_add(FbHttpConns *cons, PurpleHttpConnection *con)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
92 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
93 g_return_if_fail(cons != NULL);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
94 g_return_if_fail(!cons->canceled);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
95 g_hash_table_replace(cons->cons, con, con);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
96 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
97
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
98 void
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
99 fb_http_conns_remove(FbHttpConns *cons, PurpleHttpConnection *con)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
100 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
101 g_return_if_fail(cons != NULL);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
102 g_return_if_fail(!cons->canceled);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
103 g_hash_table_remove(cons->cons, con);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
104 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
105
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
106 void
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
107 fb_http_conns_reset(FbHttpConns *cons)
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
108 {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
109 g_return_if_fail(cons != NULL);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
110 cons->canceled = FALSE;
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
111 g_hash_table_remove_all(cons->cons);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
112 }
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37354
diff changeset
113
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
114 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
115 fb_http_error_chk(PurpleHttpResponse *res, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
116 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
117 const gchar *msg;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
118 gint code;
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 if (purple_http_response_is_successful(res)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
121 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
122 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
123
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
124 msg = purple_http_response_get_error(res);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
125 code = purple_http_response_get_code(res);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
126 g_set_error(error, FB_HTTP_ERROR, code, "%s", msg);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
127 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
128 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
129
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
130 FbHttpParams *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
131 fb_http_params_new(void)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
132 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
133 return g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
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
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
136 FbHttpParams *
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
137 fb_http_params_new_parse(const gchar *data, gboolean isurl)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
138 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
139 const gchar *tail;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
140 gchar *key;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
141 gchar **ps;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
142 gchar *val;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
143 guint i;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
144 FbHttpParams *params;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
145
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
146 params = fb_http_params_new();
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
147
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
148 if (data == NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
149 return params;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
150 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
151
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
152 if (isurl) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
153 data = strchr(data, '?');
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
154
37479
94b23a04da62 facebook: fixed a few issues reported by Coverity
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
155 if (data == NULL) {
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
156 return params;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
157 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
158
37479
94b23a04da62 facebook: fixed a few issues reported by Coverity
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
159 tail = strchr(++data, '#');
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
160
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
161 if (tail != NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
162 data = g_strndup(data, tail - data);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
163 } else {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
164 data = g_strdup(data);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
165 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
166 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
167
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
168 ps = g_strsplit(data, "&", 0);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
169
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
170 for (i = 0; ps[i] != NULL; i++) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
171 key = ps[i];
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
172 val = strchr(ps[i], '=');
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
173
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
174 if (val == NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
175 continue;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
176 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
177
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
178 *(val++) = 0;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
179 key = g_uri_unescape_string(key, NULL);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
180 val = g_uri_unescape_string(val, NULL);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
181 g_hash_table_replace(params, key, val);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
182 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
183
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
184 if (isurl) {
37471
32c1e77d0474 facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents: 37433
diff changeset
185 g_free((gchar *) data);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
186 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
187
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
188 g_strfreev(ps);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
189 return params;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
190 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
191
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
192 void
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
193 fb_http_params_free(FbHttpParams *params)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
194 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
195 g_hash_table_destroy(params);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
196 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
197
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
198 gchar *
37315
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
199 fb_http_params_close(FbHttpParams *params, const gchar *url)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
200 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
201 GHashTableIter iter;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
202 gpointer key;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
203 gpointer val;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
204 GString *ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
205
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
206 g_hash_table_iter_init(&iter, params);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
207 ret = g_string_new(NULL);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
208
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
209 while (g_hash_table_iter_next(&iter, &key, &val)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
210 if (val == NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
211 g_hash_table_iter_remove(&iter);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
212 continue;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
213 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
214
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
215 if (ret->len > 0) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
216 g_string_append_c(ret, '&');
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
217 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
218
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
219 g_string_append_uri_escaped(ret, key, NULL, TRUE);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
220 g_string_append_c(ret, '=');
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
221 g_string_append_uri_escaped(ret, val, NULL, TRUE);
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
37315
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
224 if (url != NULL) {
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
225 g_string_prepend_c(ret, '?');
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
226 g_string_prepend(ret, url);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
227 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
228
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
229 fb_http_params_free(params);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
230 return g_string_free(ret, FALSE);
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
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
233 static const gchar *
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
234 fb_http_params_get(FbHttpParams *params, const gchar *name, GError **error)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
235 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
236 const gchar *ret;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
237
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
238 ret = g_hash_table_lookup(params, name);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
239
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
240 if (ret == NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
241 g_set_error(error, FB_HTTP_ERROR, FB_HTTP_ERROR_NOMATCH,
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
242 _("No matches for %s"), name);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
243 return NULL;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
244 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
245
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
246 return ret;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
247 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
248
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
249 gboolean
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
250 fb_http_params_get_bool(FbHttpParams *params, const gchar *name,
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
251 GError **error)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
252 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
253 const gchar *val;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
254
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
255 val = fb_http_params_get(params, name, error);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
256
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
257 if (val == NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
258 return FALSE;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
259 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
260
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
261 return g_ascii_strcasecmp(val, "TRUE") == 0;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
262 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
263
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
264 gdouble
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
265 fb_http_params_get_dbl(FbHttpParams *params, const gchar *name,
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
266 GError **error)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
267 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
268 const gchar *val;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
269
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
270 val = fb_http_params_get(params, name, error);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
271
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
272 if (val == NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
273 return 0.0;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
274 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
275
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
276 return g_ascii_strtod(val, NULL);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
277 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
278
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
279 gint64
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
280 fb_http_params_get_int(FbHttpParams *params, const gchar *name,
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
281 GError **error)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
282 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
283 const gchar *val;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
284
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
285 val = fb_http_params_get(params, name, error);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
286
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
287 if (val == NULL) {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
288 return 0;
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
289 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
290
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
291 return g_ascii_strtoll(val, NULL, 10);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
292 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
293
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
294 const gchar *
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
295 fb_http_params_get_str(FbHttpParams *params, const gchar *name,
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
296 GError **error)
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
297 {
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
298 return fb_http_params_get(params, name, error);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
299 }
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
300
37315
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
301 gchar *
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
302 fb_http_params_dup_str(FbHttpParams *params, const gchar *name,
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
303 GError **error)
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
304 {
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
305 const gchar *str;
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
306
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
307 str = fb_http_params_get(params, name, error);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
308 return g_strdup(str);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
309 }
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
310
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
311 static void
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
312 fb_http_params_set(FbHttpParams *params, const gchar *name, gchar *value)
37250
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 gchar *key;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
315
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
316 key = g_strdup(name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
317 g_hash_table_replace(params, key, value);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
318 }
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 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
321 fb_http_params_set_bool(FbHttpParams *params, const gchar *name,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
322 gboolean value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
323 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
324 gchar *val;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
325
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
326 val = g_strdup(value ? "true" : "false");
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
327 fb_http_params_set(params, name, val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
328 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
329
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
330 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
331 fb_http_params_set_dbl(FbHttpParams *params, const gchar *name, gdouble value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
332 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
333 gchar *val;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
334
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
335 val = g_strdup_printf("%f", value);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
336 fb_http_params_set(params, name, val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
337 }
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 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
340 fb_http_params_set_int(FbHttpParams *params, const gchar *name, gint64 value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
341 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
342 gchar *val;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
343
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
344 val = g_strdup_printf("%" G_GINT64_FORMAT, value);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
345 fb_http_params_set(params, name, val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
346 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
347
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
348 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
349 fb_http_params_set_str(FbHttpParams *params, const gchar *name,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
350 const gchar *value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
351 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
352 gchar *val;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
353
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
354 val = g_strdup(value);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
355 fb_http_params_set(params, name, val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
356 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
357
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
358 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
359 fb_http_params_set_strf(FbHttpParams *params, const gchar *name,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
360 const gchar *format, ...)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
361 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
362 gchar *val;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
363 va_list ap;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
364
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
365 va_start(ap, format);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
366 val = g_strdup_vprintf(format, ap);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
367 va_end(ap);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
368
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
369 fb_http_params_set(params, name, val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
370 }
37354
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
371
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
372 gboolean
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
373 fb_http_urlcmp(const gchar *url1, const gchar *url2, gboolean protocol)
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
374 {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
375 const gchar *str1;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
376 const gchar *str2;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
377 gboolean ret = TRUE;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
378 gint int1;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
379 gint int2;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
380 guint i;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
381 PurpleHttpURL *purl1;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
382 PurpleHttpURL *purl2;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
383
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
384 static const const gchar * (*funcs[]) (const PurpleHttpURL *url) = {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
385 /* Always first so it can be skipped */
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
386 purple_http_url_get_protocol,
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
387
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
388 purple_http_url_get_fragment,
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
389 purple_http_url_get_host,
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
390 purple_http_url_get_password,
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
391 purple_http_url_get_path,
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
392 purple_http_url_get_username
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
393 };
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
394
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
395 if ((url1 == NULL) || (url2 == NULL)) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
396 return url1 == url2;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
397 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
398
38186
274f63f95cc2 facebook: fb_http_urlcmp: more loose comparison, to avoid showing urls twice
dequis <dx@dxzone.com.ar>
parents: 37479
diff changeset
399 if (strstr(url1, url2) != NULL || strstr(url2, url1) != NULL) {
274f63f95cc2 facebook: fb_http_urlcmp: more loose comparison, to avoid showing urls twice
dequis <dx@dxzone.com.ar>
parents: 37479
diff changeset
400 return TRUE;
274f63f95cc2 facebook: fb_http_urlcmp: more loose comparison, to avoid showing urls twice
dequis <dx@dxzone.com.ar>
parents: 37479
diff changeset
401 }
274f63f95cc2 facebook: fb_http_urlcmp: more loose comparison, to avoid showing urls twice
dequis <dx@dxzone.com.ar>
parents: 37479
diff changeset
402
37354
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
403 purl1 = purple_http_url_parse(url1);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
404
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
405 if (purl1 == NULL) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
406 return g_ascii_strcasecmp(url1, url2) == 0;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
407 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
408
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
409 purl2 = purple_http_url_parse(url2);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
410
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
411 if (purl2 == NULL) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
412 purple_http_url_free(purl1);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
413 return g_ascii_strcasecmp(url1, url2) == 0;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
414 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
415
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
416 for (i = protocol ? 0 : 1; i < G_N_ELEMENTS(funcs); i++) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
417 str1 = funcs[i](purl1);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
418 str2 = funcs[i](purl2);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
419
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
420 if (!purple_strequal(str1, str2)) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
421 ret = FALSE;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
422 break;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
423 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
424 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
425
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
426 if (ret && protocol) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
427 int1 = purple_http_url_get_port(purl1);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
428 int2 = purple_http_url_get_port(purl2);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
429
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
430 if (int1 != int2) {
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
431 ret = FALSE;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
432 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
433 }
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
434
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
435 purple_http_url_free(purl1);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
436 purple_http_url_free(purl2);
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
437 return ret;
14857ad5b6b7 facebook: fixed URL comparisons being overly strict
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
438 }

mercurial