home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.security.AccessController;
- import java.util.Hashtable;
- import java.util.StringTokenizer;
- import sun.security.action.GetPropertyAction;
-
- public final class URL implements Serializable {
- static final long serialVersionUID = -7627629688361524110L;
- private static final String protocolPathProp = "java.protocol.handler.pkgs";
- private String protocol;
- private String host;
- private int port;
- private String file;
- private transient String query;
- private String authority;
- private transient String path;
- private transient String userInfo;
- private String ref;
- transient InetAddress hostAddress;
- transient URLStreamHandler handler;
- private int hashCode;
- private static NetPermission specifyHandlerPerm;
- static URLStreamHandlerFactory factory;
- static Hashtable handlers = new Hashtable();
- private static Object streamHandlerLock = new Object();
-
- public URL(String var1, String var2, int var3, String var4) throws MalformedURLException {
- this(var1, var2, var3, var4, (URLStreamHandler)null);
- }
-
- public URL(String var1, String var2, String var3) throws MalformedURLException {
- this(var1, var2, -1, var3);
- }
-
- public URL(String var1, String var2, int var3, String var4, URLStreamHandler var5) throws MalformedURLException {
- this.port = -1;
- this.hashCode = -1;
- if (var5 != null) {
- SecurityManager var6 = System.getSecurityManager();
- if (var6 != null) {
- this.checkSpecifyHandler(var6);
- }
- }
-
- this.protocol = var1;
- this.host = var2;
- int var8 = var4.indexOf(35);
- this.file = var8 < 0 ? var4 : var4.substring(0, var8);
- this.ref = var8 < 0 ? null : var4.substring(var8 + 1);
- int var7 = var4.lastIndexOf(63);
- if (var7 != -1) {
- this.query = var4.substring(var7 + 1);
- this.path = var4.substring(0, var7);
- } else {
- this.path = var4;
- }
-
- if (var5 == null && (var5 = getURLStreamHandler(var1)) == null) {
- throw new MalformedURLException("unknown protocol: " + var1);
- } else {
- this.handler = var5;
- this.port = var3;
- if (var2 != null && var2.length() > 0) {
- this.authority = var3 == -1 ? var2 : var2 + ":" + var3;
- }
-
- }
- }
-
- public URL(String var1) throws MalformedURLException {
- this((URL)null, var1);
- }
-
- public URL(URL var1, String var2) throws MalformedURLException {
- this((URL)var1, var2, (URLStreamHandler)null);
- }
-
- public URL(URL var1, String var2, URLStreamHandler var3) throws MalformedURLException {
- this.port = -1;
- this.hashCode = -1;
- String var4 = var2;
- int var8 = 0;
- String var9 = null;
- boolean var10 = false;
- if (var3 != null) {
- SecurityManager var11 = System.getSecurityManager();
- if (var11 != null) {
- this.checkSpecifyHandler(var11);
- }
- }
-
- try {
- int var6;
- for(var6 = var2.length(); var6 > 0 && var2.charAt(var6 - 1) <= ' '; --var6) {
- }
-
- while(var8 < var6 && var2.charAt(var8) <= ' ') {
- ++var8;
- }
-
- if (var2.regionMatches(true, var8, "url:", 0, 4)) {
- var8 += 4;
- }
-
- if (var8 < var2.length() && var2.charAt(var8) == '#') {
- var10 = true;
- }
-
- char var7;
- for(int var5 = var8; !var10 && var5 < var6 && (var7 = var2.charAt(var5)) != '/'; ++var5) {
- if (var7 == ':') {
- String var16 = var2.substring(var8, var5).toLowerCase();
- if (this.isValidProtocol(var16)) {
- var9 = var16;
- var8 = var5 + 1;
- }
- break;
- }
- }
-
- this.protocol = var9;
- if (var1 != null && (var9 == null || var9.equalsIgnoreCase(var1.protocol))) {
- if (var3 == null) {
- var3 = var1.handler;
- }
-
- if (var1.path != null && var1.path.startsWith("/")) {
- var9 = null;
- }
-
- if (var9 == null) {
- this.protocol = var1.protocol;
- this.authority = var1.authority;
- this.userInfo = var1.userInfo;
- this.host = var1.host;
- this.port = var1.port;
- this.file = var1.file;
- }
- }
-
- if (this.protocol == null) {
- throw new MalformedURLException("no protocol: " + var4);
- } else if (var3 == null && (var3 = getURLStreamHandler(this.protocol)) == null) {
- throw new MalformedURLException("unknown protocol: " + this.protocol);
- } else {
- this.handler = var3;
- int var15 = var2.indexOf(35, var8);
- if (var15 >= 0) {
- this.ref = var2.substring(var15 + 1, var6);
- var6 = var15;
- }
-
- var3.parseURL(this, var2, var8, var6);
- }
- } catch (MalformedURLException var13) {
- throw var13;
- } catch (Exception var14) {
- throw new MalformedURLException(((Throwable)var14).toString());
- }
- }
-
- private boolean isValidProtocol(String var1) {
- int var2 = var1.length();
- if (var2 < 1) {
- return false;
- } else {
- char var3 = var1.charAt(0);
- if (!Character.isLetter(var3)) {
- return false;
- } else {
- for(int var4 = 1; var4 < var2; ++var4) {
- var3 = var1.charAt(var4);
- if (!Character.isLetterOrDigit(var3) && var3 != '.' && var3 != '+' && var3 != '-') {
- return false;
- }
- }
-
- return true;
- }
- }
- }
-
- private void checkSpecifyHandler(SecurityManager var1) {
- if (specifyHandlerPerm == null) {
- specifyHandlerPerm = new NetPermission("specifyStreamHandler");
- }
-
- var1.checkPermission(specifyHandlerPerm);
- }
-
- protected void set(String var1, String var2, int var3, String var4, String var5) {
- synchronized(this) {
- this.protocol = var1;
- this.host = var2;
- this.authority = var3 == -1 ? var2 : var2 + ":" + var3;
- this.port = var3;
- this.file = var4;
- this.ref = var5;
- this.hashCode = -1;
- this.hostAddress = null;
- int var7 = var4.lastIndexOf(63);
- if (var7 != -1) {
- this.query = var4.substring(var7 + 1);
- this.path = var4.substring(0, var7);
- } else {
- this.path = var4;
- }
-
- }
- }
-
- protected void set(String var1, String var2, int var3, String var4, String var5, String var6, String var7, String var8) {
- synchronized(this) {
- this.protocol = var1;
- this.host = var2;
- this.port = var3;
- this.file = var7 == null ? var6 : var6 + "?" + var7;
- this.userInfo = var5;
- this.path = var6;
- this.ref = var8;
- this.hashCode = -1;
- this.hostAddress = null;
- this.query = var7;
- this.authority = var4;
- }
- }
-
- public String getQuery() {
- return this.query;
- }
-
- public String getPath() {
- return this.path;
- }
-
- public String getUserInfo() {
- return this.userInfo;
- }
-
- public String getAuthority() {
- return this.authority;
- }
-
- public int getPort() {
- return this.port;
- }
-
- public String getProtocol() {
- return this.protocol;
- }
-
- public String getHost() {
- return this.host;
- }
-
- public String getFile() {
- return this.file;
- }
-
- public String getRef() {
- return this.ref;
- }
-
- public boolean equals(Object var1) {
- if (!(var1 instanceof URL)) {
- return false;
- } else {
- URL var2 = (URL)var1;
- return this.handler.equals(this, var2);
- }
- }
-
- public synchronized int hashCode() {
- if (this.hashCode != -1) {
- return this.hashCode;
- } else {
- this.hashCode = this.handler.hashCode(this);
- return this.hashCode;
- }
- }
-
- public boolean sameFile(URL var1) {
- return this.handler.sameFile(this, var1);
- }
-
- public String toString() {
- return this.toExternalForm();
- }
-
- public String toExternalForm() {
- return this.handler.toExternalForm(this);
- }
-
- public URLConnection openConnection() throws IOException {
- return this.handler.openConnection(this);
- }
-
- public final InputStream openStream() throws IOException {
- return this.openConnection().getInputStream();
- }
-
- public final Object getContent() throws IOException {
- return this.openConnection().getContent();
- }
-
- public final Object getContent(Class[] var1) throws IOException {
- return this.openConnection().getContent(var1);
- }
-
- public static void setURLStreamHandlerFactory(URLStreamHandlerFactory var0) {
- Object var1 = streamHandlerLock;
- synchronized(var1) {
- if (factory != null) {
- throw new Error("factory already defined");
- } else {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkSetFactory();
- }
-
- handlers.clear();
- factory = var0;
- }
- }
- }
-
- static URLStreamHandler getURLStreamHandler(String var0) {
- URLStreamHandler var1 = (URLStreamHandler)handlers.get(var0);
- if (var1 == null) {
- boolean var2 = false;
- if (factory != null) {
- var1 = factory.createURLStreamHandler(var0);
- var2 = true;
- }
-
- if (var1 == null) {
- Object var3 = null;
- String var14 = (String)AccessController.doPrivileged(new GetPropertyAction("java.protocol.handler.pkgs", ""));
- if (var14 != "") {
- var14 = var14 + "|";
- }
-
- var14 = var14 + "sun.net.www.protocol";
- StringTokenizer var4 = new StringTokenizer(var14, "|");
-
- while(var1 == null && var4.hasMoreTokens()) {
- String var5 = var4.nextToken().trim();
-
- try {
- String var6 = var5 + "." + var0 + ".Handler";
- Class var7 = null;
-
- try {
- var7 = Class.forName(var6);
- } catch (ClassNotFoundException var12) {
- ClassLoader var9 = ClassLoader.getSystemClassLoader();
- if (var9 != null) {
- var7 = var9.loadClass(var6);
- }
- }
-
- if (var7 != null) {
- var1 = (URLStreamHandler)var7.newInstance();
- }
- } catch (Exception var13) {
- }
- }
- }
-
- Object var16 = streamHandlerLock;
- synchronized(var16) {
- Object var17 = null;
- URLStreamHandler var18 = (URLStreamHandler)handlers.get(var0);
- if (var18 != null) {
- return var18;
- }
-
- if (!var2 && factory != null) {
- var18 = factory.createURLStreamHandler(var0);
- }
-
- if (var18 != null) {
- var1 = var18;
- }
-
- if (var1 != null) {
- handlers.put(var0, var1);
- }
- }
- }
-
- return var1;
- }
-
- private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
- var1.defaultWriteObject();
- }
-
- private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- if ((this.handler = getURLStreamHandler(this.protocol)) == null) {
- throw new IOException("unknown protocol: " + this.protocol);
- } else {
- if (this.authority == null && (this.host != null && this.host.length() > 0 || this.port != -1)) {
- if (this.host == null) {
- this.host = "";
- }
-
- this.authority = this.port == -1 ? this.host : this.host + ":" + this.port;
- int var5 = this.host.lastIndexOf(64);
- if (var5 != -1) {
- this.userInfo = this.host.substring(0, var5);
- this.host = this.host.substring(var5 + 1);
- }
- } else if (this.authority != null) {
- int var2 = this.authority.indexOf(64);
- if (var2 != -1) {
- this.userInfo = this.authority.substring(0, var2);
- }
- }
-
- Object var6 = null;
- Object var3 = null;
- if (this.file != null) {
- int var4 = this.file.lastIndexOf(63);
- if (var4 != -1) {
- this.file.substring(var4 + 1);
- this.file.substring(0, var4);
- } else {
- String var7 = this.file;
- }
- }
-
- }
- }
- }
-