home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / net / URL.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  7.6 KB  |  443 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.Serializable;
  8. import java.security.AccessController;
  9. import java.util.Hashtable;
  10. import java.util.StringTokenizer;
  11. import sun.security.action.GetPropertyAction;
  12.  
  13. public final class URL implements Serializable {
  14.    static final long serialVersionUID = -7627629688361524110L;
  15.    private static final String protocolPathProp = "java.protocol.handler.pkgs";
  16.    private String protocol;
  17.    private String host;
  18.    private int port;
  19.    private String file;
  20.    private transient String query;
  21.    private String authority;
  22.    private transient String path;
  23.    private transient String userInfo;
  24.    private String ref;
  25.    transient InetAddress hostAddress;
  26.    transient URLStreamHandler handler;
  27.    private int hashCode;
  28.    private static NetPermission specifyHandlerPerm;
  29.    static URLStreamHandlerFactory factory;
  30.    static Hashtable handlers = new Hashtable();
  31.    private static Object streamHandlerLock = new Object();
  32.  
  33.    public URL(String var1, String var2, int var3, String var4) throws MalformedURLException {
  34.       this(var1, var2, var3, var4, (URLStreamHandler)null);
  35.    }
  36.  
  37.    public URL(String var1, String var2, String var3) throws MalformedURLException {
  38.       this(var1, var2, -1, var3);
  39.    }
  40.  
  41.    public URL(String var1, String var2, int var3, String var4, URLStreamHandler var5) throws MalformedURLException {
  42.       this.port = -1;
  43.       this.hashCode = -1;
  44.       if (var5 != null) {
  45.          SecurityManager var6 = System.getSecurityManager();
  46.          if (var6 != null) {
  47.             this.checkSpecifyHandler(var6);
  48.          }
  49.       }
  50.  
  51.       this.protocol = var1;
  52.       this.host = var2;
  53.       int var8 = var4.indexOf(35);
  54.       this.file = var8 < 0 ? var4 : var4.substring(0, var8);
  55.       this.ref = var8 < 0 ? null : var4.substring(var8 + 1);
  56.       int var7 = var4.lastIndexOf(63);
  57.       if (var7 != -1) {
  58.          this.query = var4.substring(var7 + 1);
  59.          this.path = var4.substring(0, var7);
  60.       } else {
  61.          this.path = var4;
  62.       }
  63.  
  64.       if (var5 == null && (var5 = getURLStreamHandler(var1)) == null) {
  65.          throw new MalformedURLException("unknown protocol: " + var1);
  66.       } else {
  67.          this.handler = var5;
  68.          this.port = var3;
  69.          if (var2 != null && var2.length() > 0) {
  70.             this.authority = var3 == -1 ? var2 : var2 + ":" + var3;
  71.          }
  72.  
  73.       }
  74.    }
  75.  
  76.    public URL(String var1) throws MalformedURLException {
  77.       this((URL)null, var1);
  78.    }
  79.  
  80.    public URL(URL var1, String var2) throws MalformedURLException {
  81.       this((URL)var1, var2, (URLStreamHandler)null);
  82.    }
  83.  
  84.    public URL(URL var1, String var2, URLStreamHandler var3) throws MalformedURLException {
  85.       this.port = -1;
  86.       this.hashCode = -1;
  87.       String var4 = var2;
  88.       int var8 = 0;
  89.       String var9 = null;
  90.       boolean var10 = false;
  91.       if (var3 != null) {
  92.          SecurityManager var11 = System.getSecurityManager();
  93.          if (var11 != null) {
  94.             this.checkSpecifyHandler(var11);
  95.          }
  96.       }
  97.  
  98.       try {
  99.          int var6;
  100.          for(var6 = var2.length(); var6 > 0 && var2.charAt(var6 - 1) <= ' '; --var6) {
  101.          }
  102.  
  103.          while(var8 < var6 && var2.charAt(var8) <= ' ') {
  104.             ++var8;
  105.          }
  106.  
  107.          if (var2.regionMatches(true, var8, "url:", 0, 4)) {
  108.             var8 += 4;
  109.          }
  110.  
  111.          if (var8 < var2.length() && var2.charAt(var8) == '#') {
  112.             var10 = true;
  113.          }
  114.  
  115.          char var7;
  116.          for(int var5 = var8; !var10 && var5 < var6 && (var7 = var2.charAt(var5)) != '/'; ++var5) {
  117.             if (var7 == ':') {
  118.                String var16 = var2.substring(var8, var5).toLowerCase();
  119.                if (this.isValidProtocol(var16)) {
  120.                   var9 = var16;
  121.                   var8 = var5 + 1;
  122.                }
  123.                break;
  124.             }
  125.          }
  126.  
  127.          this.protocol = var9;
  128.          if (var1 != null && (var9 == null || var9.equalsIgnoreCase(var1.protocol))) {
  129.             if (var3 == null) {
  130.                var3 = var1.handler;
  131.             }
  132.  
  133.             if (var1.path != null && var1.path.startsWith("/")) {
  134.                var9 = null;
  135.             }
  136.  
  137.             if (var9 == null) {
  138.                this.protocol = var1.protocol;
  139.                this.authority = var1.authority;
  140.                this.userInfo = var1.userInfo;
  141.                this.host = var1.host;
  142.                this.port = var1.port;
  143.                this.file = var1.file;
  144.             }
  145.          }
  146.  
  147.          if (this.protocol == null) {
  148.             throw new MalformedURLException("no protocol: " + var4);
  149.          } else if (var3 == null && (var3 = getURLStreamHandler(this.protocol)) == null) {
  150.             throw new MalformedURLException("unknown protocol: " + this.protocol);
  151.          } else {
  152.             this.handler = var3;
  153.             int var15 = var2.indexOf(35, var8);
  154.             if (var15 >= 0) {
  155.                this.ref = var2.substring(var15 + 1, var6);
  156.                var6 = var15;
  157.             }
  158.  
  159.             var3.parseURL(this, var2, var8, var6);
  160.          }
  161.       } catch (MalformedURLException var13) {
  162.          throw var13;
  163.       } catch (Exception var14) {
  164.          throw new MalformedURLException(((Throwable)var14).toString());
  165.       }
  166.    }
  167.  
  168.    private boolean isValidProtocol(String var1) {
  169.       int var2 = var1.length();
  170.       if (var2 < 1) {
  171.          return false;
  172.       } else {
  173.          char var3 = var1.charAt(0);
  174.          if (!Character.isLetter(var3)) {
  175.             return false;
  176.          } else {
  177.             for(int var4 = 1; var4 < var2; ++var4) {
  178.                var3 = var1.charAt(var4);
  179.                if (!Character.isLetterOrDigit(var3) && var3 != '.' && var3 != '+' && var3 != '-') {
  180.                   return false;
  181.                }
  182.             }
  183.  
  184.             return true;
  185.          }
  186.       }
  187.    }
  188.  
  189.    private void checkSpecifyHandler(SecurityManager var1) {
  190.       if (specifyHandlerPerm == null) {
  191.          specifyHandlerPerm = new NetPermission("specifyStreamHandler");
  192.       }
  193.  
  194.       var1.checkPermission(specifyHandlerPerm);
  195.    }
  196.  
  197.    protected void set(String var1, String var2, int var3, String var4, String var5) {
  198.       synchronized(this) {
  199.          this.protocol = var1;
  200.          this.host = var2;
  201.          this.authority = var3 == -1 ? var2 : var2 + ":" + var3;
  202.          this.port = var3;
  203.          this.file = var4;
  204.          this.ref = var5;
  205.          this.hashCode = -1;
  206.          this.hostAddress = null;
  207.          int var7 = var4.lastIndexOf(63);
  208.          if (var7 != -1) {
  209.             this.query = var4.substring(var7 + 1);
  210.             this.path = var4.substring(0, var7);
  211.          } else {
  212.             this.path = var4;
  213.          }
  214.  
  215.       }
  216.    }
  217.  
  218.    protected void set(String var1, String var2, int var3, String var4, String var5, String var6, String var7, String var8) {
  219.       synchronized(this) {
  220.          this.protocol = var1;
  221.          this.host = var2;
  222.          this.port = var3;
  223.          this.file = var7 == null ? var6 : var6 + "?" + var7;
  224.          this.userInfo = var5;
  225.          this.path = var6;
  226.          this.ref = var8;
  227.          this.hashCode = -1;
  228.          this.hostAddress = null;
  229.          this.query = var7;
  230.          this.authority = var4;
  231.       }
  232.    }
  233.  
  234.    public String getQuery() {
  235.       return this.query;
  236.    }
  237.  
  238.    public String getPath() {
  239.       return this.path;
  240.    }
  241.  
  242.    public String getUserInfo() {
  243.       return this.userInfo;
  244.    }
  245.  
  246.    public String getAuthority() {
  247.       return this.authority;
  248.    }
  249.  
  250.    public int getPort() {
  251.       return this.port;
  252.    }
  253.  
  254.    public String getProtocol() {
  255.       return this.protocol;
  256.    }
  257.  
  258.    public String getHost() {
  259.       return this.host;
  260.    }
  261.  
  262.    public String getFile() {
  263.       return this.file;
  264.    }
  265.  
  266.    public String getRef() {
  267.       return this.ref;
  268.    }
  269.  
  270.    public boolean equals(Object var1) {
  271.       if (!(var1 instanceof URL)) {
  272.          return false;
  273.       } else {
  274.          URL var2 = (URL)var1;
  275.          return this.handler.equals(this, var2);
  276.       }
  277.    }
  278.  
  279.    public synchronized int hashCode() {
  280.       if (this.hashCode != -1) {
  281.          return this.hashCode;
  282.       } else {
  283.          this.hashCode = this.handler.hashCode(this);
  284.          return this.hashCode;
  285.       }
  286.    }
  287.  
  288.    public boolean sameFile(URL var1) {
  289.       return this.handler.sameFile(this, var1);
  290.    }
  291.  
  292.    public String toString() {
  293.       return this.toExternalForm();
  294.    }
  295.  
  296.    public String toExternalForm() {
  297.       return this.handler.toExternalForm(this);
  298.    }
  299.  
  300.    public URLConnection openConnection() throws IOException {
  301.       return this.handler.openConnection(this);
  302.    }
  303.  
  304.    public final InputStream openStream() throws IOException {
  305.       return this.openConnection().getInputStream();
  306.    }
  307.  
  308.    public final Object getContent() throws IOException {
  309.       return this.openConnection().getContent();
  310.    }
  311.  
  312.    public final Object getContent(Class[] var1) throws IOException {
  313.       return this.openConnection().getContent(var1);
  314.    }
  315.  
  316.    public static void setURLStreamHandlerFactory(URLStreamHandlerFactory var0) {
  317.       Object var1 = streamHandlerLock;
  318.       synchronized(var1) {
  319.          if (factory != null) {
  320.             throw new Error("factory already defined");
  321.          } else {
  322.             SecurityManager var2 = System.getSecurityManager();
  323.             if (var2 != null) {
  324.                var2.checkSetFactory();
  325.             }
  326.  
  327.             handlers.clear();
  328.             factory = var0;
  329.          }
  330.       }
  331.    }
  332.  
  333.    static URLStreamHandler getURLStreamHandler(String var0) {
  334.       URLStreamHandler var1 = (URLStreamHandler)handlers.get(var0);
  335.       if (var1 == null) {
  336.          boolean var2 = false;
  337.          if (factory != null) {
  338.             var1 = factory.createURLStreamHandler(var0);
  339.             var2 = true;
  340.          }
  341.  
  342.          if (var1 == null) {
  343.             Object var3 = null;
  344.             String var14 = (String)AccessController.doPrivileged(new GetPropertyAction("java.protocol.handler.pkgs", ""));
  345.             if (var14 != "") {
  346.                var14 = var14 + "|";
  347.             }
  348.  
  349.             var14 = var14 + "sun.net.www.protocol";
  350.             StringTokenizer var4 = new StringTokenizer(var14, "|");
  351.  
  352.             while(var1 == null && var4.hasMoreTokens()) {
  353.                String var5 = var4.nextToken().trim();
  354.  
  355.                try {
  356.                   String var6 = var5 + "." + var0 + ".Handler";
  357.                   Class var7 = null;
  358.  
  359.                   try {
  360.                      var7 = Class.forName(var6);
  361.                   } catch (ClassNotFoundException var12) {
  362.                      ClassLoader var9 = ClassLoader.getSystemClassLoader();
  363.                      if (var9 != null) {
  364.                         var7 = var9.loadClass(var6);
  365.                      }
  366.                   }
  367.  
  368.                   if (var7 != null) {
  369.                      var1 = (URLStreamHandler)var7.newInstance();
  370.                   }
  371.                } catch (Exception var13) {
  372.                }
  373.             }
  374.          }
  375.  
  376.          Object var16 = streamHandlerLock;
  377.          synchronized(var16) {
  378.             Object var17 = null;
  379.             URLStreamHandler var18 = (URLStreamHandler)handlers.get(var0);
  380.             if (var18 != null) {
  381.                return var18;
  382.             }
  383.  
  384.             if (!var2 && factory != null) {
  385.                var18 = factory.createURLStreamHandler(var0);
  386.             }
  387.  
  388.             if (var18 != null) {
  389.                var1 = var18;
  390.             }
  391.  
  392.             if (var1 != null) {
  393.                handlers.put(var0, var1);
  394.             }
  395.          }
  396.       }
  397.  
  398.       return var1;
  399.    }
  400.  
  401.    private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
  402.       var1.defaultWriteObject();
  403.    }
  404.  
  405.    private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  406.       var1.defaultReadObject();
  407.       if ((this.handler = getURLStreamHandler(this.protocol)) == null) {
  408.          throw new IOException("unknown protocol: " + this.protocol);
  409.       } else {
  410.          if (this.authority == null && (this.host != null && this.host.length() > 0 || this.port != -1)) {
  411.             if (this.host == null) {
  412.                this.host = "";
  413.             }
  414.  
  415.             this.authority = this.port == -1 ? this.host : this.host + ":" + this.port;
  416.             int var5 = this.host.lastIndexOf(64);
  417.             if (var5 != -1) {
  418.                this.userInfo = this.host.substring(0, var5);
  419.                this.host = this.host.substring(var5 + 1);
  420.             }
  421.          } else if (this.authority != null) {
  422.             int var2 = this.authority.indexOf(64);
  423.             if (var2 != -1) {
  424.                this.userInfo = this.authority.substring(0, var2);
  425.             }
  426.          }
  427.  
  428.          Object var6 = null;
  429.          Object var3 = null;
  430.          if (this.file != null) {
  431.             int var4 = this.file.lastIndexOf(63);
  432.             if (var4 != -1) {
  433.                this.file.substring(var4 + 1);
  434.                this.file.substring(0, var4);
  435.             } else {
  436.                String var7 = this.file;
  437.             }
  438.          }
  439.  
  440.       }
  441.    }
  442. }
  443.