Mercurial > pidgin
annotate src/html.c @ 1106:5bc8fdacd2cb
[gaim-migrate @ 1116]
lots of changes.
buddy.c: just in general tried to get things to work better. moving things in the edit list window and signing off should be handled better in the main buddy list window (watch out for flashes).
gaim.h: removed toc-specific things and moved them to toc.c and rvous.c as needed.
gtkhtml.c: possible fix for AOL 6.0 problems (I wasn't able to reproduce the problem before or after the fix, but i fixed what i think might have been causing the problem).
multi.c: moved LOGIN_STEPS from gaim.h here and actually use it now
oscar.c: moved an oscar-specific struct definition from gaim.h here and also handle problems better
perl.c: fix for stupid problem
rvous.c: first pass at attempt to be able to remove toc.c and rvous.c (though this will never happen; gaim will support toc as long as aol does) without cruft. gaim is now only dependent on toc.c and rvous.c for toc_build_config and parse_toc_buddy_list, which gaim needs to save and read its buddy list.
toc.c: rewrote the signin process so that the read()'s won't block. it's not actually a non-blocking read; it's just that it won't ever get to the read until there's data to be read (thanks to the gdk_input watcher). this means the cancel button should work after it's connected, but it's still not a non-blocking connect.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Mon, 20 Nov 2000 07:24:18 +0000 |
| parents | a930439f29b1 |
| children | b5783215b245 |
| rev | line source |
|---|---|
| 1 | 1 /* |
| 2 * gaim | |
| 3 * | |
| 4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or modify | |
| 7 * it under the terms of the GNU General Public License as published by | |
| 8 * the Free Software Foundation; either version 2 of the License, or | |
| 9 * (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, | |
| 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 * GNU General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 * | |
| 20 */ | |
| 21 | |
|
349
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
278
diff
changeset
|
22 #ifdef HAVE_CONFIG_H |
|
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
278
diff
changeset
|
23 #include "../config.h" |
|
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
278
diff
changeset
|
24 #endif |
| 1 | 25 #include <string.h> |
| 26 #include <stdio.h> | |
| 27 #include <stdlib.h> | |
| 28 #include <sys/time.h> | |
| 29 #include <unistd.h> | |
| 30 #include <gtk/gtk.h> | |
| 31 #include <gdk/gdkprivate.h> | |
| 32 #include <gdk/gdkx.h> | |
| 33 #include "gaim.h" | |
| 34 #include <sys/types.h> | |
| 35 #include <sys/socket.h> | |
| 36 #include <netdb.h> | |
| 37 #include <netinet/in.h> | |
|
278
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
38 #include <fcntl.h> |
|
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
39 #include <errno.h> |
|
1092
a930439f29b1
[gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1088
diff
changeset
|
40 #include "proxy.h" |
| 1 | 41 |
| 42 gchar * strip_html(gchar * text) | |
| 43 { | |
| 44 int i, j; | |
| 45 int visible = 1; | |
| 46 gchar *text2 = g_malloc(strlen(text) + 1); | |
| 47 | |
| 48 strcpy(text2, text); | |
| 49 for (i = 0, j = 0;text2[i]; i++) | |
| 50 { | |
| 51 if(text2[i]=='<') | |
| 52 { | |
| 53 visible = 0; | |
| 54 continue; | |
| 55 } | |
| 56 else if(text2[i]=='>') | |
| 57 { | |
| 58 visible = 1; | |
| 59 continue; | |
| 60 } | |
| 61 if(visible) | |
| 62 { | |
| 63 text2[j++] = text2[i]; | |
| 64 } | |
| 65 } | |
| 66 text2[j] = '\0'; | |
| 67 return text2; | |
| 68 } | |
| 69 | |
| 70 struct g_url parse_url(char *url) | |
| 71 { | |
| 72 struct g_url test; | |
| 73 char scan_info[255]; | |
| 74 char port[5]; | |
| 75 int f; | |
| 76 | |
| 77 if (strstr(url, "http://")) | |
| 78 g_snprintf(scan_info, sizeof(scan_info), "http://%%[A-Za-z0-9.]:%%[0-9]/%%[A-Za-z0-9.~_-/&%%?]"); | |
| 79 else | |
| 80 g_snprintf(scan_info, sizeof(scan_info), "%%[A-Za-z0-9.]:%%[0-9]/%%[A-Za-z0-9.~_-/&%%?]"); | |
| 81 f = sscanf(url, scan_info, test.address, port, test.page); | |
| 82 if (f == 1) { | |
| 83 if (strstr(url, "http://")) | |
| 84 g_snprintf(scan_info, sizeof(scan_info), "http://%%[A-Za-z0-9.]/%%[A-Za-z0-9.~_-/&%%?]"); | |
| 85 else | |
| 86 g_snprintf(scan_info, sizeof(scan_info), "%%[A-Za-z0-9.]/%%[A-Za-z0-9.~_-/&%%?]"); | |
| 87 f = sscanf(url, scan_info, test.address, test.page); | |
| 88 g_snprintf(port, sizeof(test.port), "80"); | |
| 89 port[2] = 0; | |
| 90 } | |
| 91 if (f == 1) { | |
| 92 if (strstr(url, "http://")) | |
| 93 g_snprintf(scan_info, sizeof(scan_info), "http://%%[A-Za-z0-9.]"); | |
| 94 else | |
| 95 g_snprintf(scan_info, sizeof(scan_info), "%%[A-Za-z0-9.]"); | |
| 96 f = sscanf(url, scan_info, test.address); | |
| 97 g_snprintf(test.page, sizeof(test.page), "%c", '\0'); | |
| 98 } | |
| 99 | |
| 100 sscanf(port, "%d", &test.port); | |
| 101 return test; | |
| 102 } | |
| 103 | |
|
1087
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
104 char *grab_url(struct aim_user *user, char *url) |
| 1 | 105 { |
| 106 struct g_url website; | |
| 107 char *webdata = NULL; | |
| 108 int sock; | |
| 109 int len; | |
|
268
f8a29745247c
[gaim-migrate @ 278]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
110 int read_rv; |
| 1 | 111 int datalen = 0; |
| 112 char buf[256]; | |
| 113 char data; | |
| 114 int startsaving = 0; | |
| 115 GtkWidget *pw = NULL, *pbar = NULL, *label; | |
| 116 | |
| 117 website = parse_url(url); | |
| 118 | |
|
1087
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
119 if (user) { |
|
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
120 if ((sock = proxy_connect(website.address, website.port, user->proto_opt[2], |
|
1092
a930439f29b1
[gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1088
diff
changeset
|
121 atoi(user->proto_opt[3]), atoi(user->proto_opt[4]))) < 0) |
|
1087
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
122 return g_strdup(_("g003: Error opening connection.\n")); |
|
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
123 } else { |
|
1092
a930439f29b1
[gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1088
diff
changeset
|
124 if ((sock = proxy_connect(website.address, website.port, NULL, 0, -1)) < 0) |
|
1087
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
125 return g_strdup(_("g003: Error opening connection.\n")); |
|
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
691
diff
changeset
|
126 } |
| 1 | 127 |
|
691
104a2659b358
[gaim-migrate @ 701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
128 g_snprintf(buf, sizeof(buf), "GET /%s HTTP/1.0\r\n\r\n", website.page); |
| 1 | 129 g_snprintf(debug_buff, sizeof(debug_buff), "Request: %s\n", buf); |
| 130 debug_print(debug_buff); | |
|
268
f8a29745247c
[gaim-migrate @ 278]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
131 write(sock, buf, strlen(buf)); |
|
278
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
132 fcntl(sock, F_SETFL, O_NONBLOCK); |
| 1 | 133 |
| 134 webdata = NULL; | |
| 135 len = 0; | |
| 136 | |
|
268
f8a29745247c
[gaim-migrate @ 278]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
137 /* |
|
f8a29745247c
[gaim-migrate @ 278]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
138 * avoid fgetc(), it causes problems on solaris |
| 35 | 139 while ((data = fgetc(sockfile)) != EOF) { |
|
268
f8a29745247c
[gaim-migrate @ 278]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
140 */ |
|
f8a29745247c
[gaim-migrate @ 278]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
141 /* read_rv will be 0 on EOF and < 0 on error, so this should be fine */ |
|
278
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
142 while ((read_rv = read(sock, &data, 1)) > 0 || errno == EWOULDBLOCK) { |
|
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
143 if (errno == EWOULDBLOCK) { |
|
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
144 errno = 0; |
|
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
145 continue; |
|
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
146 } |
|
29e1669b006b
[gaim-migrate @ 288]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
268
diff
changeset
|
147 |
| 1 | 148 if (!data) |
| 149 continue; | |
| 150 | |
| 151 if (!startsaving && data == '<') { | |
| 152 #ifdef HAVE_STRSTR | |
| 153 char *cs = strstr(webdata, "Content-Length"); | |
| 154 if (cs) { | |
| 155 char tmpbuf[1024]; | |
| 156 sscanf(cs, "Content-Length: %d", &datalen); | |
| 157 | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
158 g_snprintf(tmpbuf, 1024, _("Getting %d bytes from %s"), datalen, url); |
| 1 | 159 pw = gtk_dialog_new(); |
| 160 | |
| 161 label = gtk_label_new(tmpbuf); | |
| 162 gtk_widget_show(label); | |
| 163 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pw)->vbox), | |
| 164 label, FALSE, FALSE, 5); | |
| 165 | |
| 166 pbar = gtk_progress_bar_new(); | |
| 167 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pw)->action_area), | |
| 168 pbar, FALSE, FALSE, 5); | |
| 169 gtk_widget_show(pbar); | |
| 170 | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
171 gtk_window_set_title(GTK_WINDOW(pw), _("Getting Data")); |
| 1 | 172 |
| 173 gtk_widget_realize(pw); | |
| 174 aol_icon(pw->window); | |
| 175 | |
| 176 gtk_widget_show(pw); | |
| 177 } else | |
| 178 datalen = 0; | |
| 179 #else | |
| 180 datalen = 0; | |
| 181 #endif | |
| 182 g_free(webdata); | |
| 183 webdata = NULL; | |
| 184 len = 0; | |
| 185 startsaving = 1; | |
| 186 } | |
| 187 | |
| 188 len++; | |
| 189 webdata = g_realloc(webdata, len); | |
| 190 webdata[len - 1] = data; | |
| 191 | |
| 192 if (pbar) | |
| 193 gtk_progress_bar_update(GTK_PROGRESS_BAR(pbar), | |
| 194 ((100 * len) / datalen) / 100.0); | |
| 195 | |
| 196 while (gtk_events_pending()) | |
| 197 gtk_main_iteration(); | |
| 198 } | |
| 199 | |
| 200 webdata = g_realloc(webdata, len+1); | |
| 201 webdata[len] = 0; | |
| 202 | |
| 203 | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
204 g_snprintf(debug_buff, sizeof(debug_buff), _("Receieved: '%s'\n"), webdata); |
| 1 | 205 debug_print(debug_buff); |
| 206 | |
| 207 if (pw) | |
| 208 gtk_widget_destroy(pw); | |
| 209 | |
| 210 close(sock); | |
| 211 return webdata; | |
| 212 } |
