home *** CD-ROM | disk | FTP | other *** search
- package sun.applet;
-
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.SocketPermission;
- import java.net.URL;
- import java.net.URLClassLoader;
- import java.net.URLConnection;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import java.security.CodeSource;
- import java.security.PermissionCollection;
- import java.security.PrivilegedActionException;
- import java.security.SecureClassLoader;
- import java.security.cert.Certificate;
- import java.util.Enumeration;
- import sun.awt.AppContext;
-
- public class AppletClassLoader extends URLClassLoader {
- private URL base;
- private CodeSource codesource;
- private AccessControlContext acc;
- private AppletThreadGroup threadGroup;
- private AppContext appContext;
- int usageCount = 0;
- // $FF: renamed from: mh sun.applet.AppletMessageHandler
- private static AppletMessageHandler field_0 = new AppletMessageHandler("appletclassloader");
-
- protected AppletClassLoader(URL var1) {
- super(new URL[0]);
- this.base = var1;
- this.codesource = new CodeSource(var1, (Certificate[])null);
- this.acc = AccessController.getContext();
- }
-
- URL getBaseURL() {
- return this.base;
- }
-
- public URL[] getURLs() {
- URL[] var1 = super.getURLs();
- URL[] var2 = new URL[var1.length + 1];
- System.arraycopy(var1, 0, var2, 0, var1.length);
- var2[var2.length - 1] = this.base;
- return var2;
- }
-
- void addJar(String var1) {
- URL var2;
- try {
- var2 = new URL(this.base, var1);
- } catch (MalformedURLException var4) {
- throw new IllegalArgumentException("name");
- }
-
- ((URLClassLoader)this).addURL(var2);
- }
-
- public synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- int var3 = var1.lastIndexOf(46);
- if (var3 != -1) {
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- var4.checkPackageAccess(var1.substring(0, var3));
- }
- }
-
- try {
- return super.loadClass(var1, var2);
- } catch (ClassNotFoundException var7) {
- throw var7;
- } catch (RuntimeException var8) {
- throw var8;
- } catch (Error var9) {
- throw var9;
- }
- }
-
- protected Class findClass(String var1) throws ClassNotFoundException {
- try {
- return super.findClass(var1);
- } catch (ClassNotFoundException var5) {
- String var2 = var1.replace('.', '/').concat(".class");
-
- try {
- byte[] var3 = (byte[])AccessController.doPrivileged(new 1(this, var2), this.acc);
- if (var3 != null) {
- return ((SecureClassLoader)this).defineClass(var1, var3, 0, var3.length, this.codesource);
- } else {
- throw new ClassNotFoundException(var1);
- }
- } catch (PrivilegedActionException var4) {
- throw new ClassNotFoundException(var1, var4.getException());
- }
- }
- }
-
- protected PermissionCollection getPermissions(CodeSource var1) {
- PermissionCollection var2 = super.getPermissions(var1);
- URL var3 = var1.getLocation();
- if (var3.getProtocol().equals("file")) {
- String var4 = var3.getFile().replace('/', File.separatorChar);
- if (!var4.endsWith(File.separator)) {
- int var5 = var4.lastIndexOf(File.separatorChar);
- if (var5 != -1) {
- var4 = var4.substring(0, var5 + 1) + "-";
- var2.add(new FilePermission(var4, "read"));
- }
- }
-
- var2.add(new SocketPermission("localhost", "connect,accept"));
- AccessController.doPrivileged(new 2(this, var2));
- if (this.base.getProtocol().equals("file")) {
- String var7 = this.base.getFile().replace('/', File.separatorChar);
- if (var7.endsWith(File.separator)) {
- var7 = var7 + "-";
- }
-
- var2.add(new FilePermission(var7, "read"));
- }
- }
-
- return var2;
- }
-
- private static byte[] getBytes(URL var0) throws IOException {
- URLConnection var1 = var0.openConnection();
- if (var1 instanceof HttpURLConnection) {
- HttpURLConnection var2 = (HttpURLConnection)var1;
- int var3 = var2.getResponseCode();
- if (var3 >= 400) {
- throw new IOException("open HTTP connection failed.");
- }
- }
-
- int var11 = var1.getContentLength();
- InputStream var13 = var1.getInputStream();
-
- byte[] var4;
- try {
- int var5;
- if (var11 != -1) {
- for(var4 = new byte[var11]; var11 > 0; var11 -= var5) {
- var5 = var13.read(var4, var4.length - var11, var11);
- if (var5 == -1) {
- throw new IOException("unexpected EOF");
- }
- }
- } else {
- var4 = new byte[1024];
- var5 = 0;
-
- while((var11 = var13.read(var4, var5, var4.length - var5)) != -1) {
- var5 += var11;
- if (var5 >= var4.length) {
- byte[] var6 = new byte[var5 * 2];
- System.arraycopy(var4, 0, var6, 0, var5);
- var4 = var6;
- }
- }
-
- if (var5 != var4.length) {
- byte[] var15 = new byte[var5];
- System.arraycopy(var4, 0, var15, 0, var5);
- var4 = var15;
- }
- }
- } finally {
- var13.close();
- }
-
- return var4;
- }
-
- public URL findResource(String var1) {
- URL var2 = super.findResource(var1);
- if (var2 == null) {
- try {
- var2 = new URL(this.base, var1);
- if (!this.resourceExists(var2)) {
- var2 = null;
- }
- } catch (Exception var4) {
- var2 = null;
- }
- }
-
- return var2;
- }
-
- private boolean resourceExists(URL var1) {
- boolean var2 = true;
-
- try {
- URLConnection var3 = var1.openConnection();
- if (var3 instanceof HttpURLConnection) {
- HttpURLConnection var4 = (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 Enumeration findResources(String var1) throws IOException {
- URL var2 = new URL(this.base, var1);
- if (!this.resourceExists(var2)) {
- var2 = null;
- }
-
- Enumeration var3 = super.findResources(var1);
- return new 3(this, var3, var2);
- }
-
- Class loadCode(String var1) throws ClassNotFoundException {
- var1 = var1.replace('/', '.');
- var1 = var1.replace(File.separatorChar, '.');
- String var2 = var1;
- if (var1.endsWith(".class") || var1.endsWith(".java")) {
- var1 = var1.substring(0, var1.lastIndexOf(46));
- }
-
- try {
- return ((ClassLoader)this).loadClass(var1);
- } catch (ClassNotFoundException var4) {
- return ((ClassLoader)this).loadClass(var2);
- }
- }
-
- synchronized ThreadGroup getThreadGroup() {
- if (this.threadGroup == null || this.threadGroup.isDestroyed()) {
- AccessController.doPrivileged(new 4(this));
- }
-
- return this.threadGroup;
- }
-
- AppContext getAppContext() {
- return this.appContext;
- }
-
- synchronized void grab() {
- ++this.usageCount;
- this.getThreadGroup();
- }
-
- synchronized void release() {
- if (this.usageCount > 1) {
- --this.usageCount;
- } else {
- if (this.appContext != null) {
- try {
- this.appContext.dispose();
- } catch (IllegalThreadStateException var2) {
- }
- }
-
- this.usageCount = 0;
- this.appContext = null;
- this.threadGroup = null;
- }
-
- }
-
- private static void printError(String var0, Throwable var1) {
- String var2 = null;
- if (var1 == null) {
- var2 = field_0.getMessage("filenotfound", var0);
- } else if (var1 instanceof IOException) {
- var2 = field_0.getMessage("fileioexception", var0);
- } else if (var1 instanceof ClassFormatError) {
- var2 = field_0.getMessage("fileformat", var0);
- } else if (var1 instanceof ThreadDeath) {
- var2 = field_0.getMessage("filedeath", var0);
- } else if (var1 instanceof Error) {
- var2 = field_0.getMessage("fileerror", var1.toString(), var0);
- }
-
- if (var2 != null) {
- System.err.println(var2);
- }
-
- }
-
- // $FF: synthetic method
- static URL access$000(AppletClassLoader var0) {
- return var0.base;
- }
-
- // $FF: synthetic method
- static byte[] access$100(URL var0) throws IOException {
- return getBytes(var0);
- }
-
- // $FF: synthetic method
- static AppletThreadGroup access$202(AppletClassLoader var0, AppletThreadGroup var1) {
- return var0.threadGroup = var1;
- }
-
- // $FF: synthetic method
- static AppletThreadGroup access$200(AppletClassLoader var0) {
- return var0.threadGroup;
- }
-
- // $FF: synthetic method
- static AppContext access$302(AppletClassLoader var0, AppContext var1) {
- return var0.appContext = var1;
- }
- }
-