diff options
Diffstat (limited to 'libjava/java/net/HttpURLConnection.java')
-rw-r--r-- | libjava/java/net/HttpURLConnection.java | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/libjava/java/net/HttpURLConnection.java b/libjava/java/net/HttpURLConnection.java new file mode 100644 index 0000000..8b05b73 --- /dev/null +++ b/libjava/java/net/HttpURLConnection.java @@ -0,0 +1,174 @@ +// HttpURLConnection.java - Subclass of communications links using +// Hypertext Transfer Protocol. + +/* Copyright (C) 1999 Cygnus Solutions + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package java.net; + +import java.io.*; + +/** + * @author Warren Levy <warrenl@cygnus.com> + * @date March 29, 1999. + */ + +/** + * Written using on-line Java Platform 1.2 API Specification, as well + * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998). + * Status: Believed complete and correct. + */ + +public abstract class HttpURLConnection extends URLConnection +{ + /* HTTP Success Response Codes */ + public static final int HTTP_OK = 200; + public static final int HTTP_CREATED = 201; + public static final int HTTP_ACCEPTED = 202; + public static final int HTTP_NOT_AUTHORITATIVE = 203; + public static final int HTTP_NO_CONTENT = 204; + public static final int HTTP_RESET = 205; + public static final int HTTP_PARTIAL = 206; + + /* HTTP Redirection Response Codes */ + public static final int HTTP_MULT_CHOICE = 300; + public static final int HTTP_MOVED_PERM = 301; + public static final int HTTP_MOVED_TEMP = 302; + public static final int HTTP_SEE_OTHER = 303; + public static final int HTTP_NOT_MODIFIED = 304; + public static final int HTTP_USE_PROXY = 305; + + /* HTTP Client Error Response Codes */ + public static final int HTTP_BAD_REQUEST = 400; + public static final int HTTP_UNAUTHORIZED = 401; + public static final int HTTP_PAYMENT_REQUIRED = 402; + public static final int HTTP_FORBIDDEN = 403; + public static final int HTTP_NOT_FOUND = 404; + public static final int HTTP_BAD_METHOD = 405; + public static final int HTTP_NOT_ACCEPTABLE = 406; + public static final int HTTP_PROXY_AUTH = 407; + public static final int HTTP_CLIENT_TIMEOUT = 408; + public static final int HTTP_CONFLICT = 409; + public static final int HTTP_GONE = 410; + public static final int HTTP_LENGTH_REQUIRED = 411; + public static final int HTTP_PRECON_FAILED = 412; + public static final int HTTP_ENTITY_TOO_LARGE = 413; + public static final int HTTP_REQ_TOO_LONG = 414; + public static final int HTTP_UNSUPPORTED_TYPE = 415; + + /* HTTP Server Error Response Codes */ + public static final int HTTP_SERVER_ERROR = 500; + public static final int HTTP_INTERNAL_ERROR = 501; + public static final int HTTP_BAD_GATEWAY = 502; + public static final int HTTP_UNAVAILABLE = 503; + public static final int HTTP_GATEWAY_TIMEOUT = 504; + public static final int HTTP_VERSION = 505; + + protected String method = "GET"; + protected int responseCode = -1; + protected String responseMessage; + + static boolean followRedirects = true; + + protected HttpURLConnection(URL url) + { + super(url); + } + + public abstract void disconnect(); + + public abstract boolean usingProxy(); + + public static void setFollowRedirects(boolean set) + { + // Throw an exception if an extant security mgr precludes + // setting the factory. + SecurityManager s = System.getSecurityManager(); + if (s != null) + s.checkSetFactory(); + + followRedirects = set; + } + + public static boolean getFollowRedirects() + { + return followRedirects; + } + + public void setRequestMethod(String method) throws ProtocolException + { + if (connected) + throw new ProtocolException("Already connected"); + + if (method.equals("GET") || method.equals("POST") || + method.equals("HEAD") || method.equals("OPTIONS") || + method.equals("PUT") || method.equals("DELETE") || + method.equals("TRACE")) + this.method = method; + else + throw new ProtocolException("Invalid HTTP request method"); + } + + public String getRequestMethod() + { + return method; + } + + public int getResponseCode() throws IOException + { + getResponseVals(); + return responseCode; + } + + public String getResponseMessage() throws IOException + { + getResponseVals(); + return responseMessage; + } + + private void getResponseVals() throws IOException + { + // Response is the first header received from the connection. + String respField = getHeaderField(0); + if (! respField.startsWith("HTTP/")) + { + // Set to default values on failure. + responseCode = -1; + responseMessage = null; + return; + } + + int firstSpc, nextSpc; + firstSpc = respField.indexOf(' '); + nextSpc = respField.indexOf(' ', firstSpc + 1); + responseMessage = respField.substring(nextSpc + 1); + String codeStr = respField.substring(firstSpc + 1, nextSpc); + try + { + responseCode = Integer.parseInt(codeStr); + } + catch (NumberFormatException e) + { + // Set to default values on failure. + responseCode = -1; + responseMessage = null; + } + if (responseCode == HTTP_NOT_FOUND) + throw new FileNotFoundException(url.toString()); + else if (responseCode >= 400) + throw new IOException(url.toString() + " " + respField); + } + + // TODO12: public Permission getPermission() throws IOException + // { + // } + + // TODO12: public InputStream getErrorStream() + // { + // } +} |