comparison src/html.c @ 1840:00aef397a1fe

[gaim-migrate @ 1850] reworked some of the proxy stuff so that it's non-blocking now. next thing to do is to get IRC, MSN, Napster, and Jabber to use the new proxy_connect code. After that, Oscar and Yahoo (maybe Zephyr too? not likely) committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sat, 12 May 2001 01:38:04 +0000
parents b5783215b245
children 4dbd8533d209
comparison
equal deleted inserted replaced
1839:109cacf1ff97 1840:00aef397a1fe
98 98
99 sscanf(port, "%d", &test.port); 99 sscanf(port, "%d", &test.port);
100 return test; 100 return test;
101 } 101 }
102 102
103 char *grab_url(struct aim_user *user, char *url) 103 struct grab_url_data {
104 { 104 void (*callback)(gpointer, char *);
105 gpointer data;
105 struct g_url website; 106 struct g_url website;
107 char *url;
108 };
109
110 static void grab_url_callback(gpointer dat, gint sock, GdkInputCondition cond)
111 {
112 struct grab_url_data *gunk = dat;
106 char *webdata = NULL; 113 char *webdata = NULL;
107 int sock;
108 int len; 114 int len;
109 int read_rv; 115 int read_rv;
110 int datalen = 0; 116 int datalen = 0;
111 char buf[256]; 117 char buf[256];
112 char data; 118 char data;
113 int startsaving = 0; 119 int startsaving = 0;
114 GtkWidget *pw = NULL, *pbar = NULL, *label; 120 GtkWidget *pw = NULL, *pbar = NULL, *label;
115 121
116 website = parse_url(url); 122 if (sock == -1) {
117 123 gunk->callback(gunk->data, NULL);
118 if (user) { 124 g_free(gunk->url);
119 if ((sock = proxy_connect(website.address, website.port, user->proto_opt[2], 125 g_free(gunk);
120 atoi(user->proto_opt[3]), atoi(user->proto_opt[4]))) < 0) 126 return;
121 return g_strdup(_("g003: Error opening connection.\n")); 127 }
122 } else { 128
123 if ((sock = proxy_connect(website.address, website.port, NULL, 0, -1)) < 0) 129 g_snprintf(buf, sizeof(buf), "GET /%s HTTP/1.0\r\n\r\n", gunk->website.page);
124 return g_strdup(_("g003: Error opening connection.\n"));
125 }
126
127 g_snprintf(buf, sizeof(buf), "GET /%s HTTP/1.0\r\n\r\n", website.page);
128 debug_printf("Request: %s\n", buf); 130 debug_printf("Request: %s\n", buf);
129 write(sock, buf, strlen(buf)); 131 write(sock, buf, strlen(buf));
130 fcntl(sock, F_SETFL, O_NONBLOCK); 132 fcntl(sock, F_SETFL, O_NONBLOCK);
131 133
132 webdata = NULL; 134 webdata = NULL;
151 char *cs = strstr(webdata, "Content-Length"); 153 char *cs = strstr(webdata, "Content-Length");
152 if (cs) { 154 if (cs) {
153 char tmpbuf[1024]; 155 char tmpbuf[1024];
154 sscanf(cs, "Content-Length: %d", &datalen); 156 sscanf(cs, "Content-Length: %d", &datalen);
155 157
156 g_snprintf(tmpbuf, 1024, _("Getting %d bytes from %s"), datalen, url); 158 g_snprintf(tmpbuf, 1024, _("Getting %d bytes from %s"),
159 datalen, gunk->url);
157 pw = gtk_dialog_new(); 160 pw = gtk_dialog_new();
158 161
159 label = gtk_label_new(tmpbuf); 162 label = gtk_label_new(tmpbuf);
160 gtk_widget_show(label); 163 gtk_widget_show(label);
161 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pw)->vbox), 164 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pw)->vbox),
202 205
203 if (pw) 206 if (pw)
204 gtk_widget_destroy(pw); 207 gtk_widget_destroy(pw);
205 208
206 close(sock); 209 close(sock);
207 return webdata; 210 gunk->callback(gunk->data, webdata);
208 } 211 g_free(gunk->url);
212 g_free(gunk);
213 }
214
215 void grab_url(struct aim_user *user, char *url, void (*callback)(gpointer, char *), gpointer data)
216 {
217 int sock;
218 struct grab_url_data *gunk = g_new0(struct grab_url_data, 1);
219
220 gunk->callback = callback;
221 gunk->data = data;
222 gunk->url = g_strdup(url);
223 gunk->website = parse_url(url);
224
225 if (user) {
226 if ((sock = proxy_connect(gunk->website.address, gunk->website.port,
227 user->proto_opt[2], atoi(user->proto_opt[3]),
228 atoi(user->proto_opt[4]),
229 grab_url_callback, gunk)) < 0) {
230 g_free(gunk->url);
231 g_free(gunk);
232 callback(data, g_strdup(_("g003: Error opening connection.\n")));
233 }
234 } else {
235 if ((sock = proxy_connect(gunk->website.address, gunk->website.port, NULL, 0, -1,
236 grab_url_callback, gunk)) < 0) {
237 g_free(gunk->url);
238 g_free(gunk);
239 callback(data, g_strdup(_("g003: Error opening connection.\n")));
240 }
241 }
242 }