Wed, 17 Oct 2012 10:35:37 +0200
Implement missing getters/setters and corresponding features
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
1 | /* purple |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
2 | * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
3 | * Purple is the legal property of its developers, whose names are too numerous |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
4 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
5 | * source distribution. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
6 | * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
7 | * This program is free software; you can redistribute it and/or modify |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
8 | * it under the terms of the GNU General Public License as published by |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
9 | * the Free Software Foundation; either version 2 of the License, or |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
10 | * (at your option) any later version. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
11 | * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
12 | * This program is distributed in the hope that it will be useful, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
15 | * GNU General Public License for more details. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
16 | * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
17 | * You should have received a copy of the GNU General Public License |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
18 | * along with this program; if not, write to the Free Software |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
20 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
21 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
22 | #include "obsolete.h" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
23 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
24 | #include "internal.h" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
25 | #include "debug.h" |
|
33447
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
26 | #include "http.h" |
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
27 | #include "ntlm.h" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
28 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
29 | struct _PurpleUtilFetchUrlData |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
30 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
31 | PurpleUtilFetchUrlCallback callback; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
32 | void *user_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
33 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
34 | struct |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
35 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
36 | char *user; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
37 | char *passwd; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
38 | char *address; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
39 | int port; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
40 | char *page; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
41 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
42 | } website; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
43 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
44 | char *url; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
45 | int num_times_redirected; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
46 | gboolean full; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
47 | char *user_agent; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
48 | gboolean http11; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
49 | char *request; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
50 | gsize request_written; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
51 | gboolean include_headers; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
52 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
53 | gboolean is_ssl; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
54 | PurpleSslConnection *ssl_connection; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
55 | PurpleProxyConnectData *connect_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
56 | int fd; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
57 | guint inpa; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
58 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
59 | gboolean got_headers; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
60 | gboolean has_explicit_data_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
61 | char *webdata; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
62 | gsize len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
63 | unsigned long data_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
64 | gssize max_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
65 | gboolean chunked; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
66 | PurpleAccount *account; |
|
33447
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
67 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
68 | PurpleHttpConnection *wrapped_request; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
69 | gboolean cancelled; |
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
70 | }; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
71 | |
|
33447
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
72 | typedef struct |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
73 | { |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
74 | PurpleUtilFetchUrlData *url_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
75 | PurpleUtilFetchUrlCallback cb; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
76 | gpointer user_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
77 | } PurpleUtilLegacyWrapData; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
78 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
79 | static void purple_util_fetch_url_cb(PurpleHttpConnection *http_conn, |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
80 | PurpleHttpResponse *response, gpointer _wrap_data) |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
81 | { |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
82 | PurpleUtilLegacyWrapData *wrap_data = _wrap_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
83 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
84 | if (wrap_data->cb && !wrap_data->url_data->cancelled) |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
85 | wrap_data->cb(wrap_data->url_data, wrap_data->user_data, |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
86 | purple_http_response_get_data(response), |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
87 | purple_http_response_get_data_len(response), |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
88 | purple_http_response_get_error(response)); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
89 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
90 | g_free(wrap_data->url_data); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
91 | g_free(wrap_data); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
92 | } |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
93 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
94 | PurpleUtilFetchUrlData * purple_util_fetch_url(const gchar *url, gboolean full, |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
95 | const gchar *user_agent, gboolean http11, gssize max_len, |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
96 | PurpleUtilFetchUrlCallback cb, gpointer data) |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
97 | { |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
98 | PurpleHttpRequest *request; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
99 | PurpleUtilFetchUrlData *url_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
100 | PurpleUtilLegacyWrapData *wrap_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
101 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
102 | wrap_data = g_new0(PurpleUtilLegacyWrapData, 1); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
103 | url_data = g_new0(PurpleUtilFetchUrlData, 1); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
104 | request = purple_http_request_new(url); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
105 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
106 | wrap_data->url_data = url_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
107 | wrap_data->cb = cb; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
108 | wrap_data->user_data = data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
109 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
110 | if (user_agent) |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
111 | purple_http_request_header_set(request, |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
112 | "User-Agent", user_agent); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
113 | purple_http_request_set_http11(request, http11); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
114 | purple_http_request_set_max_len(request, max_len); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
115 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
116 | url_data->wrapped_request = purple_http_request(NULL, request, |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
117 | purple_util_fetch_url_cb, wrap_data); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
118 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
119 | purple_http_request_unref(request); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
120 | |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
121 | return url_data; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
122 | } |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
123 | |
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
124 | /** |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
125 | * The arguments to this function are similar to printf. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
126 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
127 | static void |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
128 | purple_util_fetch_url_error(PurpleUtilFetchUrlData *gfud, const char *format, ...) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
129 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
130 | gchar *error_message; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
131 | va_list args; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
132 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
133 | va_start(args, format); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
134 | error_message = g_strdup_vprintf(format, args); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
135 | va_end(args); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
136 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
137 | gfud->callback(gfud, gfud->user_data, NULL, 0, error_message); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
138 | g_free(error_message); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
139 | purple_util_fetch_url_cancel(gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
140 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
141 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
142 | static void url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
143 | static void ssl_url_fetch_connect_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
144 | static void ssl_url_fetch_error_cb(PurpleSslConnection *ssl_connection, PurpleSslErrorType error, gpointer data); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
145 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
146 | static gboolean |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
147 | parse_redirect(const char *data, size_t data_len, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
148 | PurpleUtilFetchUrlData *gfud) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
149 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
150 | gchar *s; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
151 | gchar *new_url, *temp_url, *end; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
152 | gboolean full; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
153 | int len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
154 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
155 | if ((s = g_strstr_len(data, data_len, "\nLocation: ")) == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
156 | /* We're not being redirected */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
157 | return FALSE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
158 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
159 | s += strlen("Location: "); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
160 | end = strchr(s, '\r'); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
161 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
162 | /* Just in case :) */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
163 | if (end == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
164 | end = strchr(s, '\n'); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
165 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
166 | if (end == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
167 | return FALSE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
168 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
169 | len = end - s; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
170 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
171 | new_url = g_malloc(len + 1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
172 | strncpy(new_url, s, len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
173 | new_url[len] = '\0'; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
174 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
175 | full = gfud->full; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
176 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
177 | if (*new_url == '/' || g_strstr_len(new_url, len, "://") == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
178 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
179 | temp_url = new_url; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
180 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
181 | new_url = g_strdup_printf("%s:%d%s", gfud->website.address, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
182 | gfud->website.port, temp_url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
183 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
184 | g_free(temp_url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
185 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
186 | full = FALSE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
187 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
188 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
189 | purple_debug_info("util", "Redirecting to %s\n", new_url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
190 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
191 | gfud->num_times_redirected++; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
192 | if (gfud->num_times_redirected >= 5) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
193 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
194 | purple_util_fetch_url_error(gfud, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
195 | _("Could not open %s: Redirected too many times"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
196 | gfud->url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
197 | return TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
198 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
199 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
200 | /* |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
201 | * Try again, with this new location. This code is somewhat |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
202 | * ugly, but we need to reuse the gfud because whoever called |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
203 | * us is holding a reference to it. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
204 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
205 | g_free(gfud->url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
206 | gfud->url = new_url; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
207 | gfud->full = full; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
208 | g_free(gfud->request); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
209 | gfud->request = NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
210 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
211 | if (gfud->is_ssl) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
212 | gfud->is_ssl = FALSE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
213 | purple_ssl_close(gfud->ssl_connection); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
214 | gfud->ssl_connection = NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
215 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
216 | purple_input_remove(gfud->inpa); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
217 | gfud->inpa = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
218 | close(gfud->fd); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
219 | gfud->fd = -1; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
220 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
221 | gfud->request_written = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
222 | gfud->len = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
223 | gfud->data_len = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
224 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
225 | g_free(gfud->website.user); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
226 | g_free(gfud->website.passwd); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
227 | g_free(gfud->website.address); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
228 | g_free(gfud->website.page); |
|
33440
8bc333966d04
Revert changes to purple_url_parse, because no longer needed for new http implementation
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33428
diff
changeset
|
229 | purple_url_parse(new_url, &gfud->website.address, &gfud->website.port, |
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
230 | &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
231 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
232 | if (purple_strcasestr(new_url, "https://") != NULL) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
233 | gfud->is_ssl = TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
234 | gfud->ssl_connection = purple_ssl_connect(gfud->account, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
235 | gfud->website.address, gfud->website.port, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
236 | ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
237 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
238 | gfud->connect_data = purple_proxy_connect(NULL, gfud->account, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
239 | gfud->website.address, gfud->website.port, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
240 | url_fetch_connect_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
241 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
242 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
243 | if (gfud->ssl_connection == NULL && gfud->connect_data == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
244 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
245 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
246 | gfud->website.address); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
247 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
248 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
249 | return TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
250 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
251 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
252 | static const char * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
253 | find_header_content(const char *data, size_t data_len, const char *header, size_t header_len) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
254 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
255 | const char *p = NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
256 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
257 | if (header_len <= 0) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
258 | header_len = strlen(header); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
259 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
260 | /* Note: data is _not_ nul-terminated. */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
261 | if (data_len > header_len) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
262 | if (header[0] == '\n') |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
263 | p = (g_ascii_strncasecmp(data, header + 1, header_len - 1) == 0) ? data : NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
264 | if (!p) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
265 | p = purple_strcasestr(data, header); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
266 | if (p) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
267 | p += header_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
268 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
269 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
270 | /* If we can find the header at all, try to sscanf it. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
271 | * Response headers should end with at least \r\n, so sscanf is safe, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
272 | * if we make sure that there is indeed a \n in our header. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
273 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
274 | if (p && g_strstr_len(p, data_len - (p - data), "\n")) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
275 | return p; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
276 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
277 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
278 | return NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
279 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
280 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
281 | static size_t |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
282 | parse_content_len(const char *data, size_t data_len) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
283 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
284 | size_t content_len = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
285 | const char *p = NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
286 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
287 | p = find_header_content(data, data_len, "\nContent-Length: ", sizeof("\nContent-Length: ") - 1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
288 | if (p) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
289 | sscanf(p, "%" G_GSIZE_FORMAT, &content_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
290 | purple_debug_misc("util", "parsed %" G_GSIZE_FORMAT "\n", content_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
291 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
292 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
293 | return content_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
294 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
295 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
296 | static gboolean |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
297 | content_is_chunked(const char *data, size_t data_len) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
298 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
299 | const char *p = find_header_content(data, data_len, "\nTransfer-Encoding: ", sizeof("\nTransfer-Encoding: ") - 1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
300 | if (p && g_ascii_strncasecmp(p, "chunked", 7) == 0) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
301 | return TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
302 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
303 | return FALSE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
304 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
305 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
306 | /* Process in-place */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
307 | static void |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
308 | process_chunked_data(char *data, gsize *len) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
309 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
310 | gsize sz; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
311 | gsize newlen = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
312 | char *p = data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
313 | char *s = data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
314 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
315 | while (*s) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
316 | /* Read the size of this chunk */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
317 | if (sscanf(s, "%" G_GSIZE_MODIFIER "x", &sz) != 1) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
318 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
319 | purple_debug_error("util", "Error processing chunked data: " |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
320 | "Expected data length, found: %s\n", s); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
321 | break; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
322 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
323 | if (sz == 0) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
324 | /* We've reached the last chunk */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
325 | /* |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
326 | * TODO: The spec allows "footers" to follow the last chunk. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
327 | * If there is more data after this line then we should |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
328 | * treat it like a header. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
329 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
330 | break; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
331 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
332 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
333 | /* Advance to the start of the data */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
334 | s = strstr(s, "\r\n"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
335 | if (s == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
336 | break; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
337 | s += 2; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
338 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
339 | if (s + sz > data + *len) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
340 | purple_debug_error("util", "Error processing chunked data: " |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
341 | "Chunk size %" G_GSIZE_FORMAT " bytes was longer " |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
342 | "than the data remaining in the buffer (%" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
343 | G_GSIZE_FORMAT " bytes)\n", sz, data + *len - s); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
344 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
345 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
346 | /* Move all data overtop of the chunk length that we read in earlier */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
347 | g_memmove(p, s, sz); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
348 | p += sz; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
349 | s += sz; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
350 | newlen += sz; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
351 | if (*s != '\r' && *(s + 1) != '\n') { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
352 | purple_debug_error("util", "Error processing chunked data: " |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
353 | "Expected \\r\\n, found: %s\n", s); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
354 | break; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
355 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
356 | s += 2; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
357 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
358 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
359 | /* NULL terminate the data */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
360 | *p = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
361 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
362 | *len = newlen; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
363 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
364 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
365 | static void |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
366 | url_fetch_recv_cb(gpointer url_data, gint source, PurpleInputCondition cond) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
367 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
368 | PurpleUtilFetchUrlData *gfud = url_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
369 | int len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
370 | char buf[4096]; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
371 | char *data_cursor; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
372 | gboolean got_eof = FALSE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
373 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
374 | /* |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
375 | * Read data in a loop until we can't read any more! This is a |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
376 | * little confusing because we read using a different function |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
377 | * depending on whether the socket is ssl or cleartext. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
378 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
379 | while ((gfud->is_ssl && ((len = purple_ssl_read(gfud->ssl_connection, buf, sizeof(buf))) > 0)) || |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
380 | (!gfud->is_ssl && (len = read(source, buf, sizeof(buf))) > 0)) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
381 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
382 | if(gfud->max_len != -1 && (gfud->len + len) > gfud->max_len) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
383 | purple_util_fetch_url_error(gfud, _("Error reading from %s: response too long (%d bytes limit)"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
384 | gfud->website.address, gfud->max_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
385 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
386 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
387 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
388 | /* If we've filled up our buffer, make it bigger */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
389 | if((gfud->len + len) >= gfud->data_len) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
390 | while((gfud->len + len) >= gfud->data_len) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
391 | gfud->data_len += sizeof(buf); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
392 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
393 | gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
394 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
395 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
396 | data_cursor = gfud->webdata + gfud->len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
397 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
398 | gfud->len += len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
399 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
400 | memcpy(data_cursor, buf, len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
401 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
402 | gfud->webdata[gfud->len] = '\0'; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
403 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
404 | if(!gfud->got_headers) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
405 | char *end_of_headers; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
406 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
407 | /* See if we've reached the end of the headers yet */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
408 | end_of_headers = strstr(gfud->webdata, "\r\n\r\n"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
409 | if (end_of_headers) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
410 | char *new_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
411 | guint header_len = (end_of_headers + 4 - gfud->webdata); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
412 | size_t content_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
413 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
414 | purple_debug_misc("util", "Response headers: '%.*s'\n", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
415 | header_len, gfud->webdata); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
416 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
417 | /* See if we can find a redirect. */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
418 | if(parse_redirect(gfud->webdata, header_len, gfud)) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
419 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
420 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
421 | gfud->got_headers = TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
422 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
423 | /* No redirect. See if we can find a content length. */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
424 | content_len = parse_content_len(gfud->webdata, header_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
425 | gfud->chunked = content_is_chunked(gfud->webdata, header_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
426 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
427 | if (content_len == 0) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
428 | /* We'll stick with an initial 8192 */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
429 | content_len = 8192; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
430 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
431 | gfud->has_explicit_data_len = TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
432 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
433 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
434 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
435 | /* If we're returning the headers too, we don't need to clean them out */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
436 | if (gfud->include_headers) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
437 | gfud->data_len = content_len + header_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
438 | gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
439 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
440 | size_t body_len = gfud->len - header_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
441 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
442 | content_len = MAX(content_len, body_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
443 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
444 | new_data = g_try_malloc(content_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
445 | if (new_data == NULL) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
446 | purple_debug_error("util", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
447 | "Failed to allocate %" G_GSIZE_FORMAT " bytes: %s\n", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
448 | content_len, g_strerror(errno)); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
449 | purple_util_fetch_url_error(gfud, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
450 | _("Unable to allocate enough memory to hold " |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
451 | "the contents from %s. The web server may " |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
452 | "be trying something malicious."), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
453 | gfud->website.address); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
454 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
455 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
456 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
457 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
458 | /* We may have read part of the body when reading the headers, don't lose it */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
459 | if (body_len > 0) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
460 | memcpy(new_data, end_of_headers + 4, body_len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
461 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
462 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
463 | /* Out with the old... */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
464 | g_free(gfud->webdata); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
465 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
466 | /* In with the new. */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
467 | gfud->len = body_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
468 | gfud->data_len = content_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
469 | gfud->webdata = new_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
470 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
471 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
472 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
473 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
474 | if(gfud->has_explicit_data_len && gfud->len >= gfud->data_len) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
475 | got_eof = TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
476 | break; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
477 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
478 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
479 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
480 | if(len < 0) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
481 | if(errno == EAGAIN) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
482 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
483 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
484 | purple_util_fetch_url_error(gfud, _("Error reading from %s: %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
485 | gfud->website.address, g_strerror(errno)); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
486 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
487 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
488 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
489 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
490 | if((len == 0) || got_eof) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
491 | gfud->webdata = g_realloc(gfud->webdata, gfud->len + 1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
492 | gfud->webdata[gfud->len] = '\0'; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
493 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
494 | if (!gfud->include_headers && gfud->chunked) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
495 | /* Process only if we don't want the headers. */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
496 | process_chunked_data(gfud->webdata, &gfud->len); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
497 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
498 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
499 | gfud->callback(gfud, gfud->user_data, gfud->webdata, gfud->len, NULL); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
500 | purple_util_fetch_url_cancel(gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
501 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
502 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
503 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
504 | static void ssl_url_fetch_recv_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
505 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
506 | url_fetch_recv_cb(data, -1, cond); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
507 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
508 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
509 | /** |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
510 | * This function is called when the socket is available to be written |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
511 | * to. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
512 | * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
513 | * @param source The file descriptor that can be written to. This can |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
514 | * be an http connection or it can be the SSL connection of an |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
515 | * https request. So be careful what you use it for! If it's |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
516 | * an https request then use purple_ssl_write() instead of |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
517 | * writing to it directly. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
518 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
519 | static void |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
520 | url_fetch_send_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
521 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
522 | PurpleUtilFetchUrlData *gfud; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
523 | int len, total_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
524 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
525 | gfud = data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
526 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
527 | if (gfud->request == NULL) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
528 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
529 | PurpleProxyInfo *gpi = purple_proxy_get_setup(gfud->account); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
530 | GString *request_str = g_string_new(NULL); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
531 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
532 | g_string_append_printf(request_str, "GET %s%s HTTP/%s\r\n" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
533 | "Connection: close\r\n", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
534 | (gfud->full ? "" : "/"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
535 | (gfud->full ? (gfud->url ? gfud->url : "") : (gfud->website.page ? gfud->website.page : "")), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
536 | (gfud->http11 ? "1.1" : "1.0")); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
537 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
538 | if (gfud->user_agent) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
539 | g_string_append_printf(request_str, "User-Agent: %s\r\n", gfud->user_agent); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
540 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
541 | /* Host header is not forbidden in HTTP/1.0 requests, and HTTP/1.1 |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
542 | * clients must know how to handle the "chunked" transfer encoding. |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
543 | * Purple doesn't know how to handle "chunked", so should always send |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
544 | * the Host header regardless, to get around some observed problems |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
545 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
546 | g_string_append_printf(request_str, "Accept: */*\r\n" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
547 | "Host: %s\r\n", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
548 | (gfud->website.address ? gfud->website.address : "")); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
549 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
550 | if (purple_proxy_info_get_username(gpi) != NULL |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
551 | && (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_ENVVAR |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
552 | || purple_proxy_info_get_type(gpi) == PURPLE_PROXY_HTTP)) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
553 | /* This chunk of code was copied from proxy.c http_start_connect_tunneling() |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
554 | * This is really a temporary hack - we need a more complete proxy handling solution, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
555 | * so I didn't think it was worthwhile to refactor for reuse |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
556 | */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
557 | char *t1, *t2, *ntlm_type1; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
558 | char hostname[256]; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
559 | int ret; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
560 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
561 | ret = gethostname(hostname, sizeof(hostname)); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
562 | hostname[sizeof(hostname) - 1] = '\0'; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
563 | if (ret < 0 || hostname[0] == '\0') { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
564 | purple_debug_warning("util", "proxy - gethostname() failed -- is your hostname set?"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
565 | strcpy(hostname, "localhost"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
566 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
567 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
568 | t1 = g_strdup_printf("%s:%s", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
569 | purple_proxy_info_get_username(gpi), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
570 | purple_proxy_info_get_password(gpi) ? |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
571 | purple_proxy_info_get_password(gpi) : ""); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
572 | t2 = purple_base64_encode((const guchar *)t1, strlen(t1)); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
573 | g_free(t1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
574 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
575 | ntlm_type1 = purple_ntlm_gen_type1(hostname, ""); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
576 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
577 | g_string_append_printf(request_str, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
578 | "Proxy-Authorization: Basic %s\r\n" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
579 | "Proxy-Authorization: NTLM %s\r\n" |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
580 | "Proxy-Connection: Keep-Alive\r\n", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
581 | t2, ntlm_type1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
582 | g_free(ntlm_type1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
583 | g_free(t2); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
584 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
585 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
586 | g_string_append(request_str, "\r\n"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
587 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
588 | gfud->request = g_string_free(request_str, FALSE); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
589 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
590 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
591 | if(purple_debug_is_unsafe()) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
592 | purple_debug_misc("util", "Request: '%s'\n", gfud->request); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
593 | else |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
594 | purple_debug_misc("util", "request constructed\n"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
595 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
596 | total_len = strlen(gfud->request); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
597 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
598 | if (gfud->is_ssl) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
599 | len = purple_ssl_write(gfud->ssl_connection, gfud->request + gfud->request_written, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
600 | total_len - gfud->request_written); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
601 | else |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
602 | len = write(gfud->fd, gfud->request + gfud->request_written, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
603 | total_len - gfud->request_written); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
604 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
605 | if (len < 0 && errno == EAGAIN) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
606 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
607 | else if (len < 0) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
608 | purple_util_fetch_url_error(gfud, _("Error writing to %s: %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
609 | gfud->website.address, g_strerror(errno)); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
610 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
611 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
612 | gfud->request_written += len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
613 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
614 | if (gfud->request_written < total_len) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
615 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
616 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
617 | /* We're done writing our request, now start reading the response */ |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
618 | if (gfud->is_ssl) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
619 | purple_input_remove(gfud->inpa); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
620 | gfud->inpa = 0; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
621 | purple_ssl_input_add(gfud->ssl_connection, ssl_url_fetch_recv_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
622 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
623 | purple_input_remove(gfud->inpa); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
624 | gfud->inpa = purple_input_add(gfud->fd, PURPLE_INPUT_READ, url_fetch_recv_cb, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
625 | gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
626 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
627 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
628 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
629 | static void |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
630 | url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
631 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
632 | PurpleUtilFetchUrlData *gfud; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
633 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
634 | gfud = url_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
635 | gfud->connect_data = NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
636 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
637 | if (source == -1) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
638 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
639 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
640 | (gfud->website.address ? gfud->website.address : ""), error_message); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
641 | return; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
642 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
643 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
644 | gfud->fd = source; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
645 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
646 | gfud->inpa = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
647 | url_fetch_send_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
648 | url_fetch_send_cb(gfud, source, PURPLE_INPUT_WRITE); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
649 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
650 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
651 | static void ssl_url_fetch_connect_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
652 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
653 | PurpleUtilFetchUrlData *gfud; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
654 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
655 | gfud = data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
656 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
657 | gfud->inpa = purple_input_add(ssl_connection->fd, PURPLE_INPUT_WRITE, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
658 | url_fetch_send_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
659 | url_fetch_send_cb(gfud, ssl_connection->fd, PURPLE_INPUT_WRITE); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
660 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
661 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
662 | static void ssl_url_fetch_error_cb(PurpleSslConnection *ssl_connection, PurpleSslErrorType error, gpointer data) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
663 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
664 | PurpleUtilFetchUrlData *gfud; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
665 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
666 | gfud = data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
667 | gfud->ssl_connection = NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
668 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
669 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
670 | (gfud->website.address ? gfud->website.address : ""), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
671 | purple_ssl_strerror(error)); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
672 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
673 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
674 | PurpleUtilFetchUrlData * |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
675 | purple_util_fetch_url_request(PurpleAccount *account, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
676 | const char *url, gboolean full, const char *user_agent, gboolean http11, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
677 | const char *request, gboolean include_headers, gssize max_len, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
678 | PurpleUtilFetchUrlCallback callback, void *user_data) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
679 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
680 | PurpleUtilFetchUrlData *gfud; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
681 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
682 | g_return_val_if_fail(url != NULL, NULL); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
683 | g_return_val_if_fail(callback != NULL, NULL); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
684 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
685 | if(purple_debug_is_unsafe()) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
686 | purple_debug_info("util", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
687 | "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
688 | url, full, user_agent?user_agent:"(null)", http11); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
689 | else |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
690 | purple_debug_info("util", "requesting to fetch a URL\n"); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
691 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
692 | gfud = g_new0(PurpleUtilFetchUrlData, 1); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
693 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
694 | gfud->callback = callback; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
695 | gfud->user_data = user_data; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
696 | gfud->url = g_strdup(url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
697 | gfud->user_agent = g_strdup(user_agent); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
698 | gfud->http11 = http11; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
699 | gfud->full = full; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
700 | gfud->request = g_strdup(request); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
701 | gfud->include_headers = include_headers; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
702 | gfud->fd = -1; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
703 | gfud->max_len = max_len; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
704 | gfud->account = account; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
705 | |
|
33440
8bc333966d04
Revert changes to purple_url_parse, because no longer needed for new http implementation
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33428
diff
changeset
|
706 | purple_url_parse(url, &gfud->website.address, &gfud->website.port, |
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
707 | &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
708 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
709 | if (purple_strcasestr(url, "https://") != NULL) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
710 | if (!purple_ssl_is_supported()) { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
711 | purple_util_fetch_url_error(gfud, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
712 | _("Unable to connect to %s: %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
713 | gfud->website.address, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
714 | _("Server requires TLS/SSL, but no TLS/SSL support was found.")); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
715 | return NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
716 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
717 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
718 | gfud->is_ssl = TRUE; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
719 | gfud->ssl_connection = purple_ssl_connect(account, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
720 | gfud->website.address, gfud->website.port, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
721 | ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
722 | } else { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
723 | gfud->connect_data = purple_proxy_connect(NULL, account, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
724 | gfud->website.address, gfud->website.port, |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
725 | url_fetch_connect_cb, gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
726 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
727 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
728 | if (gfud->ssl_connection == NULL && gfud->connect_data == NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
729 | { |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
730 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
731 | gfud->website.address); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
732 | return NULL; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
733 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
734 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
735 | return gfud; |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
736 | } |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
737 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
738 | void |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
739 | purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *gfud) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
740 | { |
|
33447
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
741 | if (gfud->wrapped_request != NULL) { |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
742 | gfud->cancelled = TRUE; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
743 | purple_http_conn_cancel(gfud->wrapped_request); |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
744 | return; |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
745 | } |
|
b890f231e15f
Request headers support, wrapping new API with legacy purple_util_fetch_url
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
33440
diff
changeset
|
746 | |
|
33424
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
747 | if (gfud->ssl_connection != NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
748 | purple_ssl_close(gfud->ssl_connection); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
749 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
750 | if (gfud->connect_data != NULL) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
751 | purple_proxy_connect_cancel(gfud->connect_data); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
752 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
753 | if (gfud->inpa > 0) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
754 | purple_input_remove(gfud->inpa); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
755 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
756 | if (gfud->fd >= 0) |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
757 | close(gfud->fd); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
758 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
759 | g_free(gfud->website.user); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
760 | g_free(gfud->website.passwd); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
761 | g_free(gfud->website.address); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
762 | g_free(gfud->website.page); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
763 | g_free(gfud->url); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
764 | g_free(gfud->user_agent); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
765 | g_free(gfud->request); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
766 | g_free(gfud->webdata); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
767 | |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
768 | g_free(gfud); |
|
9919d10ee405
Make old http-related code obsolete
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff
changeset
|
769 | } |