Mercurial > hg > xemacs-beta
annotate netinstall/nio-http.cc @ 1330:4542b72c005e
[xemacs-hg @ 2003-03-01 07:25:26 by ben]
build patch
Makefile.in.in: Move src deletions to src/Makefile.in.in.
dump-paths.el, dumped-lisp.el: Delete. Combine stuff into setup-paths.el.
find-paths.el: Removed.
Make this file contain generic routines only. Move stuff to
compute Emacs roots to setup-paths.el.
startup.el: Removed.
Move these variables into setup-paths.el.
setup-paths.el, startup.el: Removed.
Combine all high-level code for computing the paths into
setup-paths.el. Create new function startup-find-load-path to
encapsulate all logic for computing `load-path'. Eliminate
invocation-directory and invocation-name parameters since
there is no point (false generality) -- the code references
other globals, which cannot be specified. Eliminate some code
duplicated between setup-paths.el and startup.el. Clean up
the debug-paths code and output load-path in addition.
Add logic to paths-emacs-root-p to support separated source
and build trees.
loadup.el, make-docfile.el, update-elc-2.el, update-elc.el: Rewrite to allow for separated source and build trees, as may occur
in MS Windows.
NOTE TO BUILD HACKERS:
loadup.el, make-docfile.el, update-elc.el and update-elc-2.el made two
assumptions that are no longer correct:
(1) The source and build trees are in the same place.
(2) They can make assumptions about where `.' is.
These files now compute the locations of the source and build
roots at the top of the file. *ALL* constant file names or path
snippets must now be made absolute using expand-file-name and one
of these roots.
dumped-lisp.el, packages.el: Removed.
Remove some unused lists of Lisp files. packages-hardcoded-lisp
(empty, in any case) moved to dumped-lisp.el.
startup.el: When a compiled init file is out-of-date wrt the uncompiled
version, load the uncompiled version and issue a nasty warning.
update-elc-2.el: Force touching of auto-autoloads files when REBUILD_AUTOLOADS
was set.
update-elc.el: Fix code that checks whether dumping is necessary to check against
xemacs.dmp, not xemacs.exe, when Unix and pdump.
lwlib-Xm.c: Fix compile warning.
README, config.inc.samp, xemacs.mak: -- Major reorganization and cleanup.
-- Add support for separated build tree and source tree.
-- Delete all support for X Windows building, since it's
totally bit-rotten and will never be fixed up. Instruct
people to use Cygwin if they want such support.
make-build-dir: New script to create a skeleton build tree for use with
separated build and source tree compilation.
m/acorn.h, m/alliant-2800.h, m/alliant.h, m/altos.h, m/amdahl.h, m/arm.h, m/att3b.h, m/aviion.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h, m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/ews4800r.h, m/gould.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h, m/intel386.h, m/iris4d.h, m/iris5d.h, m/iris6d.h, m/irist.h, m/m68k.h, m/masscomp.h, m/mg1.h, m/mips-nec.h, m/mips-siemens.h, m/mips.h, m/nh3000.h, m/nh4000.h, m/ns32000.h, m/plexus.h, m/powerpc.h, m/sequent-ptx.h, m/sequent.h, m/sgi-challenge.h, m/stride.h, m/tad68k.h, m/targon31.h, m/tekxd88.h, m/template.h, m/tower32.h, m/tower32v3.h, m/ustation.h, m/wicat.h, m/xps100.h, data.c, doc.c, editfns.c, emacs.c, lrecord.h, ntheap.c, process-unix.c, sysdep.c, unexec.c: Delete all support for bit-rotten CANNOT_DUMP. Just use pdump.
Makefile.in.in: Lots o' cleanup. Use names like LISP, SRC instead of
lispdir, srcdir, for consistency with xemacs.mak and the
conventions in the rest of the file. Eliminate use of ${...}
in favor of $(...), to make it easier to move code between
this file and xemacs.mak. Fix dependency handling wrt
NEEDTODUMP to eliminate problems some people (e.g. Vin) have
been seeing with non-GNU makes. Write a long section about
the subtle but oh-so-important differences in dependency
processing between nmake, make, and GNU make. Add
unicode-encapsulate target, from xemacs.mak.
chartab.c, lrecord.h: Fix crash due to attempt to free objects across dump/undump.
author | ben |
---|---|
date | Sat, 01 Mar 2003 07:25:56 +0000 |
parents | 3078fd1074e8 |
children |
rev | line source |
---|---|
448 | 1 /* |
2 * Copyright (c) 2000, Red Hat, Inc. | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * A copy of the GNU General Public License can be found at | |
10 * http://www.gnu.org/ | |
11 * | |
12 * Written by DJ Delorie <dj@cygnus.com> | |
13 * | |
14 */ | |
15 | |
16 /* This file is responsible for implementing all direct HTTP protocol | |
17 channels. It is intentionally simplistic. */ | |
18 | |
19 #include "win32.h" | |
20 #include "winsock.h" | |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 | |
24 #include "resource.h" | |
25 #include "state.h" | |
26 #include "simpsock.h" | |
27 #include "msg.h" | |
28 | |
29 #include "netio.h" | |
30 #include "nio-http.h" | |
31 | |
32 static char six2pr[64] = { | |
33 'A','B','C','D','E','F','G','H','I','J','K','L','M', | |
34 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', | |
35 'a','b','c','d','e','f','g','h','i','j','k','l','m', | |
36 'n','o','p','q','r','s','t','u','v','w','x','y','z', | |
37 '0','1','2','3','4','5','6','7','8','9','+','/' | |
38 }; | |
39 | |
40 static char * | |
41 base64_encode (char *username, char *password) | |
42 { | |
43 unsigned char *ep; | |
44 char *rp; | |
45 static char *rv = 0; | |
46 if (rv) | |
47 free (rv); | |
48 rv = (char *) malloc (2 * (strlen (username) + strlen (password)) + 5); | |
49 | |
50 char *up = (char *) malloc (strlen (username) + strlen (password) + 6); | |
51 strcpy (up, username); | |
52 strcat (up, ":"); | |
53 strcat (up, password); | |
54 ep = (unsigned char *)up + strlen (up); | |
55 *ep++ = 0; | |
56 *ep++ = 0; | |
57 *ep++ = 0; | |
58 | |
59 char block[4]; | |
60 | |
61 rp = rv; | |
62 | |
63 for (ep = (unsigned char *)up; *ep; ep += 3) | |
64 { | |
65 block[0] = six2pr[ep[0] >> 2]; | |
66 block[1] = six2pr[((ep[0] << 4) & 0x30) | ((ep[1] >> 4) & 0x0f)]; | |
67 block[2] = six2pr[((ep[1] << 2) & 0x3c) | ((ep[2] >> 6) & 0x03)]; | |
68 block[3] = six2pr[ep[2] & 0x3f]; | |
69 | |
70 if (ep[1] == 0) | |
71 block[2] = block[3] = '='; | |
72 if (ep[2] == 0) | |
73 block[3] = '='; | |
74 memcpy (rp, block, 4); | |
75 rp += 4; | |
76 } | |
77 *rp = 0; | |
78 | |
79 free (up); | |
80 | |
81 return rv; | |
82 } | |
83 | |
84 NetIO_HTTP::NetIO_HTTP (char *Purl) | |
85 : NetIO (Purl) | |
86 { | |
87 retry_get: | |
88 if (port == 0) | |
89 port = 80; | |
90 | |
91 if (net_method == IDC_NET_PROXY) | |
92 s = new SimpleSocket (net_proxy_host, net_proxy_port); | |
93 else | |
94 s = new SimpleSocket (host, port); | |
95 | |
96 if (!s->ok()) | |
97 { | |
98 s = 0; | |
99 return; | |
100 } | |
101 | |
102 if (net_method == IDC_NET_PROXY) | |
103 s->printf ("GET %s HTTP/1.0\r\n", url); | |
104 else | |
105 s->printf ("GET %s HTTP/1.0\r\n", path); | |
106 s->printf ("Host: %s:%d\r\n", host, port); | |
107 | |
108 if (net_user && net_passwd) | |
109 s->printf ("Authorization: Basic %s\r\n", | |
110 base64_encode (net_user, net_passwd)); | |
111 | |
112 if (net_proxy_user && net_proxy_passwd) | |
113 s->printf ("Proxy-Authorization: Basic %s\r\n", | |
114 base64_encode (net_proxy_user, net_proxy_passwd)); | |
115 | |
116 s->printf ("\r\n"); | |
117 | |
118 char *l = s->gets (); | |
119 int code; | |
120 sscanf (l, "%*s %d", &code); | |
121 if (code >= 300 && code < 400) | |
122 { | |
123 do { | |
124 l = s->gets (); | |
125 if (_strnicmp (l, "Location:", 9) == 0) | |
126 { | |
127 char *u = l + 9; | |
128 while (*u == ' ' || *u == '\t') | |
129 u++; | |
130 set_url (u); | |
131 delete s; | |
132 goto retry_get; | |
133 } | |
134 } while (*l); | |
135 } | |
136 if (code == 401) /* authorization required */ | |
137 { | |
138 get_auth (); | |
139 delete s; | |
140 goto retry_get; | |
141 } | |
142 if (code == 407) /* proxy authorization required */ | |
143 { | |
144 get_proxy_auth (); | |
145 delete s; | |
146 goto retry_get; | |
147 } | |
148 if (code >= 300) | |
149 { | |
150 delete s; | |
151 s = 0; | |
152 return; | |
153 } | |
154 do { | |
155 l = s->gets (); | |
156 if (_strnicmp (l, "Content-Length:", 15) == 0) | |
157 sscanf (l, "%*s %d", &file_size); | |
158 } while (*l); | |
159 } | |
160 | |
161 NetIO_HTTP::~NetIO_HTTP () | |
162 { | |
163 if (s) | |
164 delete s; | |
165 } | |
166 | |
167 int | |
168 NetIO_HTTP::ok () | |
169 { | |
170 if (s) | |
171 return 1; | |
172 return 0; | |
173 } | |
174 | |
175 int | |
176 NetIO_HTTP::read (char *buf, int nbytes) | |
177 { | |
178 return s->read (buf, nbytes); | |
179 } |