From: megacz Date: Fri, 30 Jan 2004 07:03:43 +0000 (+0000) Subject: 2003/07/09 04:33:09 X-Git-Tag: RC3~785 X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=commitdiff_plain;h=b70b484f3b3829663a37fd91a03816e397d891b5 2003/07/09 04:33:09 darcs-hash:20040130070343-2ba56-eafd158408b49604192e811ae53698fc9e349071.gz --- diff --git a/src/org/xwt/HTTP.java b/src/org/xwt/HTTP.java index a257878..46083d5 100644 --- a/src/org/xwt/HTTP.java +++ b/src/org/xwt/HTTP.java @@ -60,6 +60,9 @@ public class HTTP { /** true iff we are allowed to skip the resolve check (only allowed when we're downloading the PAC script) */ boolean skipResolveCheck = false; + /** true iff we're using a proxy */ + boolean proxied = false; + // Public Methods //////////////////////////////////////////////////////////////////////////////////////// @@ -150,14 +153,11 @@ public class HTTP { // Safeguarded DNS Resolver /////////////////////////////////////////////////////////////////////////// /** - * resolves the hostname and returns it as a string in the form "x.y.z.w", except for the special case "xmlrpc.xwt.org". + * resolves the hostname and returns it as a string in the form "x.y.z.w" * @throws HTTPException if the host falls within a firewalled netblock */ private void resolveAndCheckIfFirewalled(String host) throws HTTPException { - // special case - if (host.equals("xmlrpc.xwt.org")) return; - // cached if (resolvedHosts.get(host) != null) return; @@ -175,19 +175,7 @@ public class HTTP { return; } catch (UnknownHostException uhe) { } - // resolve using xmlrpc.xwt.org if (Platform.detectProxy() == null) throw new HTTPException("could not resolve hostname \"" + host + "\" and no proxy configured"); - if (Log.on) Log.log(this, " could not resolve host " + host + "; using xmlrpc.xwt.org to ensure security"); - try { - JS.Array args = new JS.Array(); - args.addElement(host); - Object ret = new XMLRPC("http://xmlrpc.xwt.org/RPC2/", "dns.resolve").call(args); - if (ret == null || !(ret instanceof String)) throw new Exception(" xmlrpc.xwt.org returned non-String: " + ret); - resolvedHosts.put(host, ret); - return; - } catch (Throwable e) { - throw new HTTPException("exception while attempting to use xmlrpc.xwt.org to resolve " + host + ": " + e); - } } @@ -358,6 +346,7 @@ public class HTTP { if (sock == null && pi != null && ssl && pi.httpsProxyHost != null) sock = attemptHttpProxy(pi.httpsProxyHost, pi.httpsProxyPort); if (sock == null && pi != null && pi.httpProxyHost != null) sock = attemptHttpProxy(pi.httpProxyHost, pi.httpProxyPort); if (sock == null && pi != null && pi.socksProxyHost != null) sock = attemptSocksProxy(pi.socksProxyHost, pi.socksProxyPort); + proxied = sock != null; if (sock == null) sock = attemptDirect(); if (sock == null) throw new HTTPException("unable to contact host " + host); if (in == null) in = new BufferedInputStream(sock.getInputStream()); @@ -368,9 +357,9 @@ public class HTTP { PrintWriter pw = new PrintWriter(new OutputStreamWriter(sock.getOutputStream())); if (content != null) { pw.print("POST " + path + " HTTP/1.1\r\n"); - int contentLength = content.substring(0, 2).equals("\r\n") ? - content.length() - 2 : - (content.length() - content.indexOf("\r\n\r\n") - 4); + int contentLength = content.substring(0, 2).equals("\r\n") ? + content.length() - 2 : + (content.length() - content.indexOf("\r\n\r\n") - 4); pw.print("Content-Length: " + contentLength + "\r\n"); if (contentType != null) pw.print("Content-Type: " + contentType + "\r\n"); } else { @@ -379,6 +368,7 @@ public class HTTP { pw.print("User-Agent: XWT\r\n"); pw.print("Host: " + (host + (port == 80 ? "" : (":" + port))) + "\r\n"); + if (proxied) pw.print("X-RequestOrigin: " + Main.originHost + "\r\n"); if (Proxy.Authorization.authorization != null) pw.print("Proxy-Authorization: " + Proxy.Authorization.authorization2 + "\r\n"); if (authCache.get(originalUrl) != null) pw.print("Authorization: " + authCache.get(originalUrl) + "\r\n"); diff --git a/src/org/xwt/Main.java b/src/org/xwt/Main.java index 6613c16..64328cf 100644 --- a/src/org/xwt/Main.java +++ b/src/org/xwt/Main.java @@ -20,6 +20,7 @@ public class Main { * IP). */ public static java.net.InetAddress originAddr = null; + public static String originHost = null; /** the URL where the initial xwar came from. */ public static String origin = null; diff --git a/src/org/xwt/XWT.java b/src/org/xwt/XWT.java index 38fea3e..c107098 100644 --- a/src/org/xwt/XWT.java +++ b/src/org/xwt/XWT.java @@ -270,7 +270,8 @@ public final class XWT extends JS.Obj { HTTP http = new HTTP(u.toString()); if (Main.originAddr == null) { try { - Main.originAddr = InetAddress.getByName(u.getHost()); + Main.originHost = u.getHost(); + Main.originAddr = InetAddress.getByName(Main.originHost); } catch (UnknownHostException e) { if (Log.on) Log.log(this, "couldn't resolve " + u.getHost() + "; proceeding without permissions"); Main.originAddr = InetAddress.getByName("0.0.0.0");