home *** CD-ROM | disk | FTP | other *** search
- package sun.applet;
-
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.security.Identity;
- import java.util.Hashtable;
- import java.util.Vector;
- import sun.net.www.protocol.http.HttpURLConnection;
-
- public class AppletClassLoader extends ClassLoader {
- private static boolean debug;
- Vector archives = new Vector();
- protected boolean verboseClassLoading = false;
- URL base;
- AppletResourceLoader resources;
- AppletThreadGroup threadGroup;
- private final Object threadGroupSynchronizer = new Object();
- protected Hashtable rawClasses = new Hashtable();
- private static AppletMessageHandler amh = new AppletMessageHandler("appletclassloader");
-
- protected AppletClassLoader(URL var1) {
- this.base = var1;
- this.resources = new AppletResourceLoader(this);
- }
-
- protected AppletClassLoader(URL var1, AppletResourceLoader var2) {
- this.base = var1;
- this.resources = var2;
- }
-
- protected URL getCodeBase() {
- return this.base;
- }
-
- private Class loadClass(String var1, URL var2) throws IOException {
- InputStream var3 = null;
-
- Class var4;
- try {
- URLConnection var7 = var2.openConnection();
- var7.setAllowUserInteraction(false);
- var3 = HttpURLConnection.openConnectionCheckRedirects(var7);
- int var8 = var7.getContentLength();
- byte[] var9 = new byte[var8 == -1 ? 4096 : var8];
- int var10 = 0;
- Thread var12 = Thread.currentThread();
-
- int var11;
- while((var11 = var3.read(var9, var10, var9.length - var10)) >= 0 && !var12.isInterrupted()) {
- if ((var10 += var11) == var9.length) {
- if (var8 >= 0) {
- break;
- }
-
- byte[] var13 = new byte[var10 * 2];
- System.arraycopy(var9, 0, var13, 0, var10);
- var9 = var13;
- }
- }
-
- if (var12.isInterrupted()) {
- throw new AppletIOException("loadclass.throw.interrupted", var2);
- }
-
- var4 = ((ClassLoader)this).defineClass(var1, var9, 0, var10);
- } catch (IOException var17) {
- throw var17;
- } catch (Throwable var18) {
- throw new AppletIOException("loadclass.throw.notloaded", var2);
- } finally {
- if (var3 != null) {
- var3.close();
- }
-
- }
-
- return var4;
- }
-
- static URL makeRelativeURLWithSecurity(URL var0, String var1) throws MalformedURLException {
- URL var2 = new URL(var0, var1);
- String var3 = var0.getHost();
- String var4 = var2.getHost();
- if (var0.getProtocol().equals(var2.getProtocol()) && (var3 != null || var4 == null) && (var3 == null || var3.equals(var4)) && var0.getPort() == var2.getPort()) {
- return var2;
- } else {
- throw new SecurityException("illegal relative URL");
- }
- }
-
- public Class loadClass(String var1) throws ClassNotFoundException {
- return this.loadClass(var1, true);
- }
-
- protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- Class var3 = ((ClassLoader)this).findLoadedClass(var1);
- if (var3 == null) {
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- int var5 = var1.lastIndexOf(46);
- if (var5 >= 0) {
- var4.checkPackageAccess(var1.substring(0, var5));
- }
- }
-
- try {
- return ((ClassLoader)this).findSystemClass(var1);
- } catch (ClassNotFoundException var6) {
- var3 = this.findClass(var1);
- }
- }
-
- if (var3 == null) {
- throw new ClassNotFoundException(var1);
- } else {
- if (var2) {
- ((ClassLoader)this).resolveClass(var3);
- }
-
- return var3;
- }
- }
-
- private synchronized Class loadCode(String var1, String var2, String var3) throws ClassNotFoundException, IOException {
- Class var4 = ((ClassLoader)this).findLoadedClass(var3);
- if (var4 != null) {
- return var4;
- } else {
- AppletClassEntry var5 = (AppletClassEntry)this.rawClasses.get(var3);
- if (var5 == null) {
- SecurityManager var26 = System.getSecurityManager();
- if (var26 != null) {
- int var7 = var3.lastIndexOf(46);
- if (var7 >= 0) {
- String var8 = var3.substring(0, var7);
- var26.checkPackageAccess(var8);
- }
- }
-
- try {
- return ((ClassLoader)this).findSystemClass(var3);
- } catch (ClassNotFoundException var24) {
- try {
- URL var27 = makeRelativeURLWithSecurity(this.base, var1 + var2);
- this.verbose(amh.getMessage("loadcode.verbose", var27.toString(), var3));
- var4 = this.loadClass(var3, var27);
- } catch (FileNotFoundException var18) {
- this.errorMsg("filenotfound", var3);
- } catch (ClassFormatError var19) {
- this.errorMsg("fileformat", var3);
- } catch (IOException var20) {
- throw var20;
- } catch (Exception var21) {
- this.errorMsg("fileexception", ((Throwable)var21).toString(), var3);
- } catch (ThreadDeath var22) {
- this.errorMsg("filedeath", var3);
- throw var22;
- } catch (Error var23) {
- this.errorMsg("fileerror", ((Throwable)var23).toString(), var3);
- }
-
- if (var4 != null) {
- ((ClassLoader)this).resolveClass(var4);
- }
-
- return var4;
- }
- } else {
- Class var6;
- try {
- Class var9 = super.defineClass(var5.classBuf, var5.start, var5.len);
- if (var5.ids != null) {
- ((ClassLoader)this).setSigners(var9, var5.ids);
- }
-
- var6 = var9;
- } finally {
- this.rawClasses.remove(var3);
- }
-
- return var6;
- }
- }
- }
-
- Class loadCode(String var1) throws ClassNotFoundException {
- this.debug("AppletClassLoader(" + this.base.toString() + ").loadCode(" + var1 + ")");
- String var2 = ".class";
- String var3 = ".java";
- int var6 = var1.lastIndexOf(46);
- String var7 = "";
- if (var6 != -1) {
- var7 = var1.substring(var6);
- }
-
- if (var6 != -1 && var1.indexOf(47) != -1) {
- String var21 = var1.substring(0, var6);
- String var25 = var21.replace('/', '.');
-
- try {
- return this.loadCode(var21, var7, var25);
- } catch (IOException var11) {
- throw new ClassNotFoundException(var25);
- }
- } else if (!var7.equals(var3) && !var7.equals(var2)) {
- String var16 = var1.replace('.', '/');
- var7 = var2;
- String var22 = var16.replace('/', '.');
-
- try {
- return this.loadCode(var16, var7, var22);
- } catch (IOException var12) {
- } catch (ClassNotFoundException var13) {
- }
-
- if (var6 < 0) {
- var6 = var1.length();
- }
-
- var16 = var1.substring(0, var6);
- var16 = var16.replace('.', '/');
- var7 = var1.substring(var6);
- var22 = var16.replace('/', '.');
-
- try {
- return this.loadCode(var16, var7, var22);
- } catch (IOException var9) {
- } catch (ClassNotFoundException var10) {
- }
-
- var16 = var1.substring(0, var6);
- var16 = var16.replace('.', '/');
- var7 = var1.substring(var6);
- var22 = var1.replace('/', '.');
-
- try {
- return this.loadCode(var16, var7, var22);
- } catch (IOException var8) {
- throw new ClassNotFoundException(var22);
- }
- } else {
- String var4 = var1.substring(0, var6);
- var4 = var4.replace('.', '/');
- var7 = var2;
- String var5 = var4.replace('/', '.');
-
- try {
- return this.loadCode(var4, var7, var5);
- } catch (IOException var14) {
- throw new ClassNotFoundException(var5);
- }
- }
- }
-
- public AppletClassEntry defineClassFromBytes(String var1, byte[] var2, int var3, int var4) {
- SecurityManager var5 = System.getSecurityManager();
- String var6 = "";
- int var7 = var1.lastIndexOf(46);
- if (var7 >= 0) {
- var6 = var1.substring(0, var7);
- }
-
- if (var5 != null) {
- var5.checkPackageDefinition(var6);
- }
-
- AppletClassEntry var8 = new AppletClassEntry(var2, var3, var4, var1, (Identity[])null);
- this.rawClasses.put(var8, var8);
- this.rawClasses.put(var1, var8);
- return var8;
- }
-
- void errorMsg(String var1, String var2) {
- System.err.println(amh.getMessage(var1, var2));
- }
-
- void errorMsg(String var1, String var2, String var3) {
- System.err.println(amh.getMessage(var1, var2, var3));
- }
-
- private synchronized Class findClass(String var1) {
- Class var2 = ((ClassLoader)this).findLoadedClass(var1);
- if (var2 != null) {
- return var2;
- } else {
- AppletClassEntry var3 = (AppletClassEntry)this.rawClasses.get(var1);
- if (var3 == null) {
- this.verbose(amh.getMessage("findclass.verbose.findclass", Thread.currentThread().getName(), var1));
- SecurityManager var16 = System.getSecurityManager();
- if (var16 != null) {
- int var5 = var1.lastIndexOf(46);
- if (var5 >= 0) {
- var16.checkPackageDefinition(var1.substring(0, var5));
- }
- }
-
- String var17 = var1.replace('.', '/') + ".class";
-
- try {
- URL var6 = makeRelativeURLWithSecurity(this.base, var17);
- this.verbose(amh.getMessage("findclass.verbose.openstream", var6.toString(), var1));
- var2 = this.loadClass(var1, var6);
- } catch (Exception var12) {
- } catch (ThreadDeath var13) {
- throw var13;
- } catch (Error var14) {
- }
-
- return var2;
- } else {
- Class var4;
- try {
- Class var7 = super.defineClass(var3.classBuf, var3.start, var3.len);
- if (var3.ids != null) {
- ((ClassLoader)this).setSigners(var7, var3.ids);
- }
-
- var4 = var7;
- } finally {
- this.rawClasses.remove(var1);
- }
-
- return var4;
- }
- }
- }
-
- public AppletResourceLoader getResourceLoader() {
- return this.resources;
- }
-
- private boolean resourceExists(URL var1) {
- boolean var2 = true;
-
- try {
- URLConnection var3 = var1.openConnection();
- if (var3 instanceof java.net.HttpURLConnection) {
- java.net.HttpURLConnection var4 = (java.net.HttpURLConnection)var3;
- int var5 = var4.getResponseCode();
- if (var5 == 200) {
- return true;
- }
-
- if (var5 >= 400) {
- return false;
- }
- } else {
- InputStream var7 = var1.openStream();
- var7.close();
- }
- } catch (Exception var6) {
- var2 = false;
- }
-
- return var2;
- }
-
- public URL getResource(String var1) {
- this.verbose(amh.getMessage("getresource.verbose.forname", var1));
- URL var2 = ClassLoader.getSystemResource(var1);
- if (var2 != null) {
- this.verbose(amh.getMessage("getresource.verbose.found", var1));
- return var2;
- } else {
- String var3 = this.resources.getResourceAsName(var1);
-
- try {
- var2 = new URL(var3);
- if (!this.resourceExists(var2)) {
- var2 = null;
- }
- } catch (Exception var4) {
- var2 = null;
- }
-
- return var2;
- }
- }
-
- public InputStream getResourceAsStream(String var1) {
- this.verbose("AppletClassLoader.getResourceAsStream for name: " + var1);
- InputStream var2 = ClassLoader.getSystemResourceAsStream(var1);
- if (var2 != null) {
- this.verbose(amh.getMessage("getresourceasstream.verbose", var1));
- return var2;
- } else {
- return this.resources.getResourceAsStream(var1);
- }
- }
-
- protected ThreadGroup getThreadGroup() {
- Object var1 = this.threadGroupSynchronizer;
- synchronized(var1){}
-
- try {
- if (this.threadGroup == null || this.threadGroup.isDestroyed()) {
- this.threadGroup = new AppletThreadGroup(this.base + "-threadGroup");
- this.threadGroup.setDaemon(true);
- }
- } catch (Throwable var3) {
- throw var3;
- }
-
- return this.threadGroup;
- }
-
- private void debug(String var1) {
- if (debug) {
- System.err.println(var1);
- }
-
- }
-
- private void verbose(String var1) {
- if (this.verboseClassLoading) {
- System.out.println(var1);
- }
-
- }
- }
-