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