home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / java / net / URLConnection.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  7.1 KB  |  346 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.util.Date;
  7. import java.util.Hashtable;
  8. import java.util.StringTokenizer;
  9.  
  10. public abstract class URLConnection {
  11.    protected URL url;
  12.    protected boolean doInput = true;
  13.    protected boolean doOutput = false;
  14.    private static boolean defaultAllowUserInteraction;
  15.    protected boolean allowUserInteraction;
  16.    private static boolean defaultUseCaches = true;
  17.    protected boolean useCaches;
  18.    protected long ifModifiedSince;
  19.    public static FileNameMap fileNameMap;
  20.    protected boolean connected;
  21.    static ContentHandlerFactory factory;
  22.    private static Hashtable handlers = new Hashtable();
  23.    private static ContentHandler UnknownContentHandlerP = new UnknownContentHandler();
  24.    private static final String contentClassPrefix = "sun.net.www.content";
  25.    private static final String contentPathProp = "java.content.handler.pkgs";
  26.  
  27.    public abstract void connect() throws IOException;
  28.  
  29.    protected URLConnection(URL var1) {
  30.       this.allowUserInteraction = defaultAllowUserInteraction;
  31.       this.useCaches = defaultUseCaches;
  32.       this.connected = false;
  33.       this.url = var1;
  34.    }
  35.  
  36.    public URL getURL() {
  37.       return this.url;
  38.    }
  39.  
  40.    public int getContentLength() {
  41.       return this.getHeaderFieldInt("content-length", -1);
  42.    }
  43.  
  44.    public String getContentType() {
  45.       return this.getHeaderField("content-type");
  46.    }
  47.  
  48.    public String getContentEncoding() {
  49.       return this.getHeaderField("content-encoding");
  50.    }
  51.  
  52.    public long getExpiration() {
  53.       return this.getHeaderFieldDate("expires", 0L);
  54.    }
  55.  
  56.    public long getDate() {
  57.       return this.getHeaderFieldDate("date", 0L);
  58.    }
  59.  
  60.    public long getLastModified() {
  61.       return this.getHeaderFieldDate("last-modified", 0L);
  62.    }
  63.  
  64.    public String getHeaderField(String var1) {
  65.       return null;
  66.    }
  67.  
  68.    public int getHeaderFieldInt(String var1, int var2) {
  69.       try {
  70.          return Integer.parseInt(this.getHeaderField(var1));
  71.       } catch (Throwable var3) {
  72.          return var2;
  73.       }
  74.    }
  75.  
  76.    public long getHeaderFieldDate(String var1, long var2) {
  77.       try {
  78.          return Date.parse(this.getHeaderField(var1));
  79.       } catch (Throwable var4) {
  80.          return var2;
  81.       }
  82.    }
  83.  
  84.    public String getHeaderFieldKey(int var1) {
  85.       return null;
  86.    }
  87.  
  88.    public String getHeaderField(int var1) {
  89.       return null;
  90.    }
  91.  
  92.    public Object getContent() throws IOException {
  93.       return this.getContentHandler().getContent(this);
  94.    }
  95.  
  96.    public InputStream getInputStream() throws IOException {
  97.       throw new UnknownServiceException("protocol doesn't support input");
  98.    }
  99.  
  100.    public OutputStream getOutputStream() throws IOException {
  101.       throw new UnknownServiceException("protocol doesn't support output");
  102.    }
  103.  
  104.    public String toString() {
  105.       return this.getClass().getName() + ":" + this.url;
  106.    }
  107.  
  108.    public void setDoInput(boolean var1) {
  109.       if (this.connected) {
  110.          throw new IllegalAccessError("Already connected");
  111.       } else {
  112.          this.doInput = var1;
  113.       }
  114.    }
  115.  
  116.    public boolean getDoInput() {
  117.       return this.doInput;
  118.    }
  119.  
  120.    public void setDoOutput(boolean var1) {
  121.       if (this.connected) {
  122.          throw new IllegalAccessError("Already connected");
  123.       } else {
  124.          this.doOutput = var1;
  125.       }
  126.    }
  127.  
  128.    public boolean getDoOutput() {
  129.       return this.doOutput;
  130.    }
  131.  
  132.    public void setAllowUserInteraction(boolean var1) {
  133.       if (this.connected) {
  134.          throw new IllegalAccessError("Already connected");
  135.       } else {
  136.          this.allowUserInteraction = var1;
  137.       }
  138.    }
  139.  
  140.    public boolean getAllowUserInteraction() {
  141.       return this.allowUserInteraction;
  142.    }
  143.  
  144.    public static void setDefaultAllowUserInteraction(boolean var0) {
  145.       defaultAllowUserInteraction = var0;
  146.    }
  147.  
  148.    public static boolean getDefaultAllowUserInteraction() {
  149.       return defaultAllowUserInteraction;
  150.    }
  151.  
  152.    public void setUseCaches(boolean var1) {
  153.       if (this.connected) {
  154.          throw new IllegalAccessError("Already connected");
  155.       } else {
  156.          this.useCaches = var1;
  157.       }
  158.    }
  159.  
  160.    public boolean getUseCaches() {
  161.       return this.useCaches;
  162.    }
  163.  
  164.    public void setIfModifiedSince(long var1) {
  165.       if (this.connected) {
  166.          throw new IllegalAccessError("Already connected");
  167.       } else {
  168.          this.ifModifiedSince = var1;
  169.       }
  170.    }
  171.  
  172.    public long getIfModifiedSince() {
  173.       return this.ifModifiedSince;
  174.    }
  175.  
  176.    public boolean getDefaultUseCaches() {
  177.       return defaultUseCaches;
  178.    }
  179.  
  180.    public void setDefaultUseCaches(boolean var1) {
  181.       defaultUseCaches = var1;
  182.    }
  183.  
  184.    public void setRequestProperty(String var1, String var2) {
  185.       if (this.connected) {
  186.          throw new IllegalAccessError("Already connected");
  187.       }
  188.    }
  189.  
  190.    public String getRequestProperty(String var1) {
  191.       if (this.connected) {
  192.          throw new IllegalAccessError("Already connected");
  193.       } else {
  194.          return null;
  195.       }
  196.    }
  197.  
  198.    public static void setDefaultRequestProperty(String var0, String var1) {
  199.    }
  200.  
  201.    public static String getDefaultRequestProperty(String var0) {
  202.       return null;
  203.    }
  204.  
  205.    public static synchronized void setContentHandlerFactory(ContentHandlerFactory var0) {
  206.       if (factory != null) {
  207.          throw new Error("factory already defined");
  208.       } else {
  209.          SecurityManager var1 = System.getSecurityManager();
  210.          if (var1 != null) {
  211.             var1.checkSetFactory();
  212.          }
  213.  
  214.          factory = var0;
  215.       }
  216.    }
  217.  
  218.    synchronized ContentHandler getContentHandler() throws UnknownServiceException {
  219.       String var1 = this.getContentType();
  220.       ContentHandler var2 = null;
  221.       if (var1 == null) {
  222.          throw new UnknownServiceException("no content-type");
  223.       } else {
  224.          try {
  225.             var2 = (ContentHandler)handlers.get(var1);
  226.             if (var2 != null) {
  227.                return var2;
  228.             }
  229.          } catch (Exception var5) {
  230.          }
  231.  
  232.          if (factory != null) {
  233.             var2 = factory.createContentHandler(var1);
  234.          }
  235.  
  236.          if (var2 == null) {
  237.             try {
  238.                var2 = this.lookupContentHandlerClassFor(var1);
  239.             } catch (Exception var4) {
  240.                ((Throwable)var4).printStackTrace();
  241.                var2 = UnknownContentHandlerP;
  242.             }
  243.  
  244.             handlers.put(var1, var2);
  245.          }
  246.  
  247.          return var2;
  248.       }
  249.    }
  250.  
  251.    private ContentHandler lookupContentHandlerClassFor(String var1) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
  252.       String var2 = this.typeToPackageName(var1);
  253.       String var3 = this.getContentHandlerPkgPrefixes();
  254.       StringTokenizer var4 = new StringTokenizer(var3, "|");
  255.  
  256.       while(var4.hasMoreTokens()) {
  257.          String var5 = var4.nextToken().trim();
  258.  
  259.          try {
  260.             String var6 = var5 + "." + var2;
  261.             ContentHandler var7 = (ContentHandler)Class.forName(var6).newInstance();
  262.             return var7;
  263.          } catch (Exception var8) {
  264.          }
  265.       }
  266.  
  267.       return UnknownContentHandlerP;
  268.    }
  269.  
  270.    private String typeToPackageName(String var1) {
  271.       int var2 = var1.length();
  272.       char[] var3 = new char[var2];
  273.       var1.getChars(0, var2, var3, 0);
  274.  
  275.       for(int var4 = 0; var4 < var2; ++var4) {
  276.          char var5 = var3[var4];
  277.          if (var5 == '/') {
  278.             var3[var4] = '.';
  279.          } else if ((var5 < 'A' || var5 > 'Z') && (var5 < 'a' || var5 > 'z') && (var5 < '0' || var5 > '9')) {
  280.             var3[var4] = '_';
  281.          }
  282.       }
  283.  
  284.       return new String(var3);
  285.    }
  286.  
  287.    private String getContentHandlerPkgPrefixes() {
  288.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  289.       String var1 = System.getProperty("java.content.handler.pkgs", "");
  290.       if (var1 != "") {
  291.          var1 = var1 + "|";
  292.       }
  293.  
  294.       return var1 + "sun.net.www.content";
  295.    }
  296.  
  297.    protected static String guessContentTypeFromName(String var0) {
  298.       String var1 = null;
  299.       if (fileNameMap != null) {
  300.          var1 = fileNameMap.getContentTypeFor(var0);
  301.       }
  302.  
  303.       return var1;
  304.    }
  305.  
  306.    public static String guessContentTypeFromStream(InputStream var0) throws IOException {
  307.       var0.mark(10);
  308.       int var1 = var0.read();
  309.       int var2 = var0.read();
  310.       int var3 = var0.read();
  311.       int var4 = var0.read();
  312.       int var5 = var0.read();
  313.       int var6 = var0.read();
  314.       var0.reset();
  315.       if (var1 == 202 && var2 == 254 && var3 == 186 && var4 == 190) {
  316.          return "application/java-vm";
  317.       } else if (var1 == 172 && var2 == 237) {
  318.          return "application/x-java-serialized-object";
  319.       } else if (var1 == 71 && var2 == 73 && var3 == 70 && var4 == 56) {
  320.          return "image/gif";
  321.       } else if (var1 == 35 && var2 == 100 && var3 == 101 && var4 == 102) {
  322.          return "image/x-bitmap";
  323.       } else if (var1 == 33 && var2 == 32 && var3 == 88 && var4 == 80 && var5 == 77 && var6 == 50) {
  324.          return "image/x-pixmap";
  325.       } else if (var1 != 60 || var2 != 33 && (var6 != 62 || (var2 != 104 || (var3 != 116 || var4 != 109 || var5 != 108) && (var3 != 101 || var4 != 97 || var5 != 100)) && (var2 != 98 || var3 != 111 || var4 != 100 || var5 != 121))) {
  326.          if (var1 == 46 && var2 == 115 && var3 == 110 && var4 == 100) {
  327.             return "audio/basic";
  328.          } else if (var1 == 100 && var2 == 110 && var3 == 115 && var4 == 46) {
  329.             return "audio/basic";
  330.          } else if (var1 != 60 || var2 != 33 && (var2 != 104 || (var3 != 116 || var4 != 109 || var5 != 108) && (var3 != 101 || var4 != 97 || var5 != 100)) && (var2 != 98 || var3 != 111 || var4 != 100 || var5 != 121) && (var2 != 72 || (var3 != 84 || var4 != 77 || var5 != 76) && (var3 != 69 || var4 != 65 || var5 != 68)) && (var2 != 66 || var3 != 79 || var4 != 68 || var5 != 89)) {
  331.             if (var1 == 255 && var2 == 216 && var3 == 255 && var4 == 224) {
  332.                return "image/jpeg";
  333.             } else if (var1 == 255 && var2 == 216 && var3 == 255 && var4 == 238) {
  334.                return "image/jpg";
  335.             } else {
  336.                return var1 == 82 && var2 == 73 && var3 == 70 && var4 == 70 ? "audio/x-wav" : null;
  337.             }
  338.          } else {
  339.             return "text/html";
  340.          }
  341.       } else {
  342.          return "text/html";
  343.       }
  344.    }
  345. }
  346.