home *** CD-ROM | disk | FTP | other *** search
- package netscape.applet;
-
- import java.io.ByteArrayInputStream;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import netscape.misc.WeakLink;
- import netscape.security.AppletSecurity;
- import netscape.security.AppletSecurityException;
- import netscape.security.Principal;
- import netscape.security.PrivilegeManager;
- import netscape.security.Target;
-
- public class AppletClassLoader extends ClassLoader {
- URL codeBaseURL;
- URL[] archiveURL;
- MozillaAppletContext context;
- static boolean wantTiming;
- long loaderTime;
- String scriptOrigin;
- boolean isReusable;
- Principal codeBasePrincipal;
- Principal[] matchPrincipalAry;
- public static final String MANIFEST_FILENAME = "META-INF/manifest.mf";
- private Hashtable nameToArchive;
- private String[] archiveFile;
- private boolean[] capturedArchive;
- private int[] nativeArchive;
- private int[] nativeZig;
- byte[] inputBuf;
- static Vector classloaders = new Vector(10);
- private static boolean capturingClasses;
- private static final boolean MARIMBA_ENABLED = true;
- private CastanetChannelInfo channelInfo;
- private Hashtable codebaseEnv;
-
- String grabArchiveFile(int var1) throws IOException {
- return this.grabArchiveFile(var1, this.archiveURL[var1]);
- }
-
- private String grabArchiveFile(int var1, URL var2) throws IOException {
- String var3 = var2.getFile();
- if (!var3.endsWith(".jar") && !var3.endsWith(".zip")) {
- return null;
- } else {
- String var4;
- if (capturingClasses) {
- int var5 = var3.lastIndexOf(47);
- String var6 = var3.substring(var5 + 1);
- var4 = this.getCaptureDir() + "/" + var6;
- } else {
- var4 = this.getTempName();
- if (var4 == null) {
- return null;
- }
- }
-
- SecurityManager.enablePrivilege("UniversalFileAccess");
- SecurityManager.enablePrivilege("UniversalConnect");
- FileOutputStream var16 = new FileOutputStream(var4);
- long var17 = 0L;
- if (wantTiming) {
- var17 = System.currentTimeMillis();
- }
-
- InputStream var8 = null;
-
- try {
- URLConnection var11 = var2.openConnection();
- var11.setAllowUserInteraction(false);
- var8 = var11.getInputStream();
- if (this.inputBuf == null) {
- this.inputBuf = new byte[4096];
- }
-
- Thread var13 = Thread.currentThread();
-
- int var12;
- while((var12 = var8.read(this.inputBuf)) >= 0 && !var13.isInterrupted()) {
- var16.write(this.inputBuf, 0, var12);
- }
-
- if (var13.isInterrupted()) {
- throw new IOException("interrupted: " + this);
- }
- } finally {
- if (var8 != null) {
- var8.close();
- }
-
- if (var16 != null) {
- var16.close();
- }
-
- }
-
- SecurityManager.revertPrivilege();
- if (wantTiming) {
- long var9 = System.currentTimeMillis();
- long var18 = var9 - var17;
- this.loaderTime += var18;
- System.err.println("# Archive download time: " + var2 + ": " + var18 + " (total = " + this.loaderTime + ")");
- }
-
- if (capturingClasses) {
- System.err.println("#\tCaptured archive " + var4);
- this.capturedArchive[var1] = true;
- } else if (this.context != null && MozillaAppletContext.debug >= 2) {
- System.err.println("# Loading classes from downloaded archive file: " + var2);
- }
-
- return var4;
- }
- }
-
- native String getTempName();
-
- private native int openArchive0(String var1) throws IOException;
-
- private native byte[] loadFromArchive0(int var1, String var2) throws IOException;
-
- private native void closeArchive0(int var1) throws IOException;
-
- void openArchive(int var1) {
- this.openArchive(var1, this.archiveURL[var1]);
- }
-
- private void openArchive(int var1, URL var2) {
- try {
- this.archiveFile[var1] = this.grabArchiveFile(var1, var2);
- if (this.archiveFile[var1] == null) {
- return;
- }
-
- this.nativeArchive[var1] = this.openArchive0(this.archiveFile[var1]);
- if (this.nativeArchive[var1] != 0) {
- this.nativeZig[var1] = this.setupZignature();
- if (this.nativeZig[var1] != 0) {
- if (!this.loadManifest(this.nativeArchive[var1], this.nativeZig[var1], this.codeBaseURL.getFile()) || this.loadSignatures(this.nativeArchive[var1], this.nativeZig[var1], this.codeBaseURL.getFile()) <= 0) {
- this.nativeZig[var1] = 0;
- }
-
- return;
- }
- }
- } catch (IOException var4) {
- ((Throwable)var4).printStackTrace();
- System.err.println("# Unable to load archive " + this.archiveURL[var1] + ": " + var4);
- this.nativeZig[var1] = 0;
- }
-
- }
-
- byte[] loadFromArchive(String var1, int var2) throws IOException {
- return this.nativeArchive[var2] != 0 ? this.loadFromArchive0(this.nativeArchive[var2], var1) : null;
- }
-
- void closeArchive() {
- for(int var1 = this.archiveURL.length - 1; var1 >= 0; --var1) {
- if (this.nativeArchive[var1] != 0) {
- try {
- this.closeArchive0(this.nativeArchive[var1]);
- if (this.context != null && MozillaAppletContext.debug >= 5) {
- System.err.println("# Closed downloaded archive: " + this.archiveURL[var1]);
- }
- } catch (IOException var4) {
- if (this.context != null && MozillaAppletContext.debug >= 5) {
- System.err.println("# Failed to close downloaded archive: " + this.archiveURL[var1]);
- }
- }
-
- this.nativeArchive[var1] = 0;
- if (!this.capturedArchive[var1]) {
- File var2 = new File(this.archiveFile[var1]);
- SecurityManager.enablePrivilege("UniversalFileRead");
- SecurityManager.enablePrivilege("UniversalFileDelete");
- boolean var3 = var2.delete();
- SecurityManager.revertPrivilege();
- if (this.context != null && MozillaAppletContext.debug >= 5) {
- if (var3) {
- System.err.println("# Deleted downloaded archive: " + this.archiveFile[var1]);
- } else {
- System.err.println("# Failed to delete downloaded archive: " + this.archiveFile[var1]);
- }
- }
- }
- }
- }
-
- }
-
- static synchronized AppletClassLoader getClassLoader(MozillaAppletContext var0, URL var1, URL[] var2, String var3, boolean var4) {
- if (var2 == null) {
- var2 = new URL[0];
- }
-
- boolean var5 = false;
- AppletClassLoader var6 = null;
- SecurityManager.enablePrivilege("UniversalConnect");
- String var8 = var1.getFile();
- int var9 = var8.lastIndexOf(47);
- URL var7 = var1;
- if (var9 > 0 && var9 < var8.length() - 1) {
- try {
- var7 = new URL(var1, var8.substring(0, var9 + 1));
- } catch (MalformedURLException var31) {
- }
- }
-
- for(int var10 = 0; var10 < classloaders.size(); ++var10) {
- WeakLink var11 = (WeakLink)classloaders.elementAt(var10);
- AppletClassLoader var12 = (AppletClassLoader)var11.get();
- if (var12 == null) {
- var5 = true;
- } else if (var7.equals(var12.codeBaseURL)) {
- label145: {
- boolean var10000;
- if (var3 == null) {
- if (var12.scriptOrigin == null) {
- break label145;
- }
-
- var10000 = false;
- } else {
- var10000 = var3.equals(var12.scriptOrigin);
- }
-
- if (!var10000) {
- continue;
- }
- }
-
- if ((var3 == null || var0 == var12.context) && var12.isReusable) {
- if (!var4) {
- var6 = var12;
- int var13 = var12.archiveURL.length;
- int var14 = var13 + var2.length;
- URL[] var15 = new URL[var14];
- String[] var16 = new String[var14];
- boolean[] var17 = new boolean[var14];
- int[] var18 = new int[var14];
- int[] var19 = new int[var14];
-
- for(int var20 = var2.length - 1; var20 >= 0; --var20) {
- var15[var13 + var20] = var2[var20];
- var16[var13 + var20] = null;
- var17[var13 + var20] = false;
- var18[var13 + var20] = 0;
- var19[var13 + var20] = 0;
-
- for(int var21 = var13 - 1; var21 >= 0; --var21) {
- if (var6.archiveURL[var21] != null && var2[var20].getFile().equals(var6.archiveURL[var21].getFile())) {
- var15[var13 + var20] = null;
- --var14;
- break;
- }
- }
- }
-
- for(int var34 = var13 - 1; var34 >= 0; --var34) {
- var15[var34] = var6.archiveURL[var34];
- var16[var34] = var6.archiveFile[var34];
- var17[var34] = var6.capturedArchive[var34];
- var18[var34] = var6.nativeArchive[var34];
- var19[var34] = var6.nativeZig[var34];
- }
-
- URL[] var22 = new URL[var14];
- String[] var23 = new String[var14];
- boolean[] var24 = new boolean[var14];
- int[] var25 = new int[var14];
- int[] var26 = new int[var14];
- int var27 = var14 - 1;
-
- for(int var28 = var15.length - 1; var28 >= 0; --var28) {
- if (var15[var28] != null) {
- var22[var27] = var15[var28];
- var23[var27] = var16[var28];
- var24[var27] = var17[var28];
- var25[var27] = var18[var28];
- var26[var27] = var19[var28];
- --var27;
- }
- }
-
- var6.archiveFile = var23;
- var6.capturedArchive = var24;
- var6.nativeArchive = var25;
- var6.nativeZig = var26;
-
- for(int var29 = var13; var29 < var22.length; ++var29) {
- var6.openArchive(var29, var22[var29]);
- }
-
- var6.archiveURL = var22;
- if (MozillaAppletContext.debug >= 8) {
- System.err.println("# reusing class loader " + var6 + "\n" + "#\tcontext = " + var0 + "\n" + "#\tcodebase = " + var7);
-
- for(int var30 = 0; var30 < var6.archiveURL.length; ++var30) {
- System.err.println("#\tarchive = " + var6.archiveURL[var30]);
- }
-
- System.err.println("#\tscriptOrigin = " + var3);
- }
- break;
- }
-
- if (MozillaAppletContext.debug >= 8) {
- System.err.println("# preventing reuse of " + var12);
- }
-
- var12.isReusable = false;
- }
- }
- }
-
- SecurityManager.revertPrivilege();
- if (var6 == null) {
- var6 = new AppletClassLoader(var0, var1, var2);
- var6.scriptOrigin = var3;
- classloaders.addElement(new WeakLink(var6));
- }
-
- if (var5) {
- for(int var32 = classloaders.size() - 1; var32 >= 0; --var32) {
- WeakLink var33 = (WeakLink)classloaders.elementAt(var32);
- if (var33.get() == null) {
- classloaders.removeElementAt(var32);
- }
-
- if (MozillaAppletContext.debug >= 8) {
- System.err.println("# classloader was removed");
- }
- }
- }
-
- return var6;
- }
-
- AppletClassLoader(MozillaAppletContext var1, URL var2, URL[] var3) {
- this.nameToArchive = new Hashtable();
- System.getSecurityManager().checkCreateClassLoader();
- this.scriptOrigin = null;
- this.isReusable = true;
- this.codeBasePrincipal = new Principal(var2);
- String var4 = var2.getFile();
- int var5 = var4.lastIndexOf(47);
- if (var5 > 0 && var5 < var4.length() - 1) {
- try {
- var2 = new URL(var2, var4.substring(0, var5 + 1));
- } catch (MalformedURLException var8) {
- }
- }
-
- this.codeBaseURL = var2;
- if (var3 == null) {
- var3 = new URL[0];
- }
-
- this.archiveURL = var3;
- this.context = var1;
- int var6 = var3.length;
- this.archiveFile = new String[var6];
- this.capturedArchive = new boolean[var6];
- this.nativeArchive = new int[var6];
- this.nativeZig = new int[var6];
-
- for(int var9 = var6 - 1; var9 >= 0; --var9) {
- this.archiveFile[var9] = null;
- this.capturedArchive[var9] = false;
- this.nativeArchive[var9] = 0;
- this.nativeZig[var9] = 0;
- }
-
- if (MozillaAppletContext.debug > 5) {
- System.err.println("# new class loader " + this + "\n" + "#\tcontext = " + var1 + "\n" + "#\tcodebase = " + var2);
-
- for(int var7 = 0; var7 < var6; ++var7) {
- System.err.println("#\tarchive = " + var3[var7]);
- }
- }
-
- for(int var10 = var6 - 1; var10 >= 0; --var10) {
- if (this.archiveURL[var10] != null) {
- this.openArchive(var10);
- }
- }
-
- }
-
- void close() {
- if (this.archiveURL != null) {
- this.closeArchive();
- }
-
- if (this.channelInfo != null) {
- this.channelInfo.closeZips();
- }
-
- }
-
- protected void finalize() {
- this.close();
- if (MozillaAppletContext.debug >= 8) {
- System.err.println("# finalized: " + this);
- }
-
- }
-
- protected AppletClassLoader(URL var1) {
- this((MozillaAppletContext)null, var1, (URL[])null);
- System.getSecurityManager().checkCreateClassLoader();
- }
-
- String getScriptOrigin() {
- return this.scriptOrigin;
- }
-
- public URL getCodeBase() {
- return this.codeBaseURL;
- }
-
- private Class loadClass(String var1, URL var2, String var3) throws IOException {
- SecurityManager.enablePrivilege("UniversalConnect");
- byte[] var4 = var2.getData();
- SecurityManager.revertPrivilege();
- if (capturingClasses) {
- this.captureClassFile(var1, var4);
- }
-
- return ((ClassLoader)this).defineClass(var1, var4, 0, var4.length, 0, var3);
- }
-
- public Class loadClass(String var1) throws ClassNotFoundException {
- return this.loadClass(var1, true);
- }
-
- protected final Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- Class var3;
- if (wantTiming) {
- long var4 = System.currentTimeMillis();
- var3 = this.loadClass1(var1, var2);
- long var6 = System.currentTimeMillis();
- long var8 = var6 - var4;
- this.loaderTime += var8;
- System.err.println("# Class load time: " + var1 + ": " + var8 + " (total = " + this.loaderTime + ")");
- } else {
- var3 = this.loadClass1(var1, var2);
- }
-
- return var3;
- }
-
- private Class loadClass1(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 (NoClassDefFoundError var8) {
- if (this.channelInfo == null) {
- throw var8;
- }
- } catch (ClassNotFoundException var9) {
- }
-
- var3 = this.findClass(var1);
- }
-
- if (var3 == null) {
- throw new ClassNotFoundException(var1);
- } else {
- Integer var10 = (Integer)this.nameToArchive.get(var1);
- if (var10 != null) {
- int var11 = var10;
- if (var11 != -1 && this.nativeArchive[var11] != 0) {
- System.getSecurityManager().checkURLConnect(this.codeBaseURL, this.archiveURL[var11]);
- }
- }
-
- if (var2) {
- try {
- ((ClassLoader)this).resolveClass(var3);
- } catch (NoClassDefFoundError var6) {
- if (this.channelInfo == null) {
- throw var6;
- }
-
- throw new ClassNotFoundException(var1);
- } catch (UnknownError var7) {
- if (this.channelInfo == null) {
- throw var7;
- }
-
- throw new ClassNotFoundException(var1);
- }
- }
-
- return var3;
- }
- }
-
- private synchronized Class findClass(String var1) throws ClassNotFoundException {
- boolean var3 = true;
- Class var4 = ((ClassLoader)this).findLoadedClass(var1);
- if (var4 != null) {
- return var4;
- } else {
- if (MozillaAppletContext.debug >= 2) {
- System.err.println("# Loading class " + var1);
- }
-
- SecurityManager var5 = System.getSecurityManager();
- if (var5 != null) {
- int var6 = var1.lastIndexOf(46);
- if (var6 >= 0) {
- var5.checkPackageDefinition(var1.substring(0, var6));
- }
- }
-
- String var15 = var1.replace('.', '/') + ".class";
-
- int var2;
- for(var2 = this.archiveURL.length - 1; var2 >= 0; --var2) {
- if (this.nativeArchive[var2] != 0) {
- try {
- byte[] var7 = this.loadFromArchive(var15, var2);
- if (var7 != null) {
- var4 = ((ClassLoader)this).defineClass(var1, var7, 0, var7.length, this.nativeZig[var2], var15);
- if (var4 != null && this.context != null && MozillaAppletContext.debug >= 2) {
- System.err.println("# Loaded " + var15 + " from " + this.archiveURL[var2]);
- }
-
- var3 = false;
- if (var4 != null) {
- this.nameToArchive.put(var1, new Integer(var2));
- break;
- }
- }
- } catch (IOException var13) {
- if (MozillaAppletContext.debug >= 2) {
- System.err.println("# Failed to load " + var15 + " from " + this.archiveURL[var2]);
- }
- }
- }
- }
-
- if (var4 == null) {
- var2 = -1;
-
- URL var16;
- try {
- var16 = new URL(this.codeBaseURL, var15);
- } catch (MalformedURLException var10) {
- throw new ClassNotFoundException(var1);
- }
-
- if (this.context != null && MozillaAppletContext.debug >= 5) {
- System.err.println("# Fetching " + var16);
- }
-
- try {
- var4 = this.loadClass(var1, var16, var15);
- var3 = false;
- } catch (IOException var11) {
- if (this.channelInfo != null) {
- try {
- var4 = this.marimbaLoad(var1);
- var3 = false;
- } catch (IOException var9) {
- }
- }
-
- if (var4 == null) {
- throw new ClassNotFoundException(var1);
- }
- } catch (SecurityException var12) {
- if (this.context != null && MozillaAppletContext.debug >= 5) {
- System.err.println("# Exception while loading " + var15 + " from downloaded archive " + var16.toString() + "\n# Exception: " + ((Throwable)var12).toString());
- }
-
- throw var12;
- }
- }
-
- if (!var1.equals(var4.getName())) {
- Object var14 = null;
- throw new ClassFormatError(var1 + " != " + var4.getName());
- } else {
- if (!var3) {
- this.setPrincipalAry(var4, var15, var2);
- }
-
- return var4;
- }
- }
- }
-
- static boolean getCaptureClassFiles() {
- return capturingClasses;
- }
-
- static void setCaptureClassFiles(boolean var0) {
- capturingClasses = var0;
- }
-
- String getCaptureDir() throws IOException {
- String var1 = this.codeBaseURL.toString();
- if (var1.startsWith("http://")) {
- var1 = var1.substring(7);
- }
-
- if (var1.endsWith("/")) {
- var1 = var1.substring(0, var1.length() - 1);
- }
-
- var1 = var1.replace('/', '_').replace(':', '_');
- SecurityManager.enablePrivilege("UniversalFileRead");
- SecurityManager.enablePrivilege("UniversalFileWrite");
- File var2 = new File(var1);
- if ((!var2.exists() || !var2.isDirectory()) && !var2.mkdir()) {
- throw new IOException(var2 + " is not a directory");
- } else {
- return var1;
- }
- }
-
- void captureClassFile(String var1, byte[] var2) {
- try {
- String var3 = this.getCaptureDir();
- SecurityManager.enablePrivilege("UniversalFileRead");
- SecurityManager.enablePrivilege("UniversalFileWrite");
-
- File var6;
- do {
- int var4 = var1.indexOf(46);
- if (var4 == -1) {
- File var9 = new File(var3 + "/" + var1 + ".class");
- FileOutputStream var10 = new FileOutputStream(var9);
- var10.write(var2, 0, var2.length);
- System.err.println("#\tCaptured class " + var9);
- var10.close();
- return;
- }
-
- String var5 = var1.substring(0, var4);
- var1 = var1.substring(var4 + 1);
- var3 = var3 + "/" + var5;
- var6 = new File(var3);
- } while(var6.exists() && var6.isDirectory() || var6.mkdir());
-
- throw new IOException("Can't create " + var6);
- } catch (SecurityException var7) {
- System.err.println("#\tCan't capture class: " + var7);
- } catch (IOException var8) {
- System.err.println("#\tCan't capture class: " + var8);
- }
- }
-
- byte[] getResource(URL var1) {
- byte[] var2 = null;
- String var3 = var1.getFile();
- String var4 = this.codeBaseURL.getFile();
- if (!var3.startsWith(var4)) {
- return null;
- } else {
- String var5 = var3.substring(var4.length());
-
- for(int var6 = this.archiveURL.length - 1; var6 >= 0; --var6) {
- try {
- var2 = this.loadFromArchive(var5, var6);
- if (var2 != null && this.context != null && MozillaAppletContext.debug >= 5) {
- System.err.println("# Loaded " + var5 + " from " + this.archiveURL[var6]);
- }
-
- if (var2 != null) {
- break;
- }
-
- if (var2 == null && this.context != null && MozillaAppletContext.debug >= 5) {
- System.err.println("# " + var5 + " in " + this.archiveURL[var6] + " not found.");
- }
- } catch (IOException var7) {
- if (MozillaAppletContext.debug >= 5) {
- System.err.println("# Failed to load " + var5 + " from " + this.archiveURL[var6]);
- }
- }
- }
-
- return var2;
- }
- }
-
- public InputStream getResourceAsStream(String var1) {
- System.getSecurityManager().checkResourceAccess(var1);
- Object var2 = null;
-
- try {
- URL var5 = new URL(this.codeBaseURL, var1);
- byte[] var3 = this.getResource(var5);
- return var3 == null ? null : new ByteArrayInputStream(var3);
- } catch (MalformedURLException var4) {
- return null;
- }
- }
-
- private boolean setPrincipalAry(Class var1, String var2) {
- return this.setPrincipalAry(var1, var2, 0);
- }
-
- private boolean setPrincipalAry(Class var1, String var2, int var3) {
- Object var4 = null;
- int var5 = 1;
- Object[] var6 = null;
- if (var3 >= 0 && var3 < this.archiveURL.length) {
- var6 = getCertificates(this.nativeZig[var3], var1, var2);
- if (var6 != null) {
- var5 += var6.length;
- }
- }
-
- Principal[] var13 = new Principal[var5];
-
- for(int var7 = var5 - 1; var7-- > 0; var13[var7] = new Principal(14, (byte[])var6[var7], var1)) {
- }
-
- var13[var5 - 1] = this.codeBasePrincipal;
-
- try {
- if (this.matchPrincipalAry != null) {
- PrivilegeManager var10 = AppletSecurity.getPrivilegeManager();
- if (var10 != null && var10.comparePrincipalArray(var13, this.matchPrincipalAry) == 1) {
- var13 = new Principal[]{this.codeBasePrincipal};
- throw new AppletSecurityException("mismatch of principals");
- }
- }
- } finally {
- this.setPrincipals(var1, var13);
- }
-
- return true;
- }
-
- public boolean checkMatchPrincipalAlways(int var1) {
- PrivilegeManager var5 = AppletSecurity.getPrivilegeManager();
- if (var5 == null) {
- return true;
- } else {
- this.matchPrincipalAry = var5.getClassPrincipalsFromStack(var1 + 1);
- Enumeration var2 = ((ClassLoader)this).getClassNames();
-
- while(var2.hasMoreElements()) {
- String var4 = (String)var2.nextElement();
- Class var3 = ((ClassLoader)this).findLoadedClass(var4);
- if (var3 != null && !var5.checkMatchPrincipal(var3, var1 + 1)) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- private native int setupZignature();
-
- private native int destroyZignature(int var1);
-
- private native boolean loadManifest(int var1, int var2, String var3);
-
- private native int loadSignatures(int var1, int var2, String var3);
-
- private native boolean verifySignature(int var1, Class var2, String var3);
-
- private static native Object[] getCertificates(int var0, Class var1, String var2);
-
- private native void setPrincipals(Class var1, Principal[] var2);
-
- public AppletClassLoader(URL var1, CastanetChannelInfo var2) {
- this((MozillaAppletContext)null, var1, (URL[])null);
- System.getSecurityManager().checkCreateClassLoader();
- this.channelInfo = var2;
- }
-
- public Class classFromBytes(byte[] var1, String var2) {
- if (this.channelInfo == null) {
- return null;
- } else {
- Class var3 = ((ClassLoader)this).findLoadedClass(var2);
- if (var3 != null) {
- return var3;
- } else {
- try {
- var3 = ((ClassLoader)this).findSystemClass(var2);
- if (var3 != null) {
- return var3;
- }
- } catch (NoClassDefFoundError var8) {
- } catch (ClassNotFoundException var9) {
- }
-
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- int var5 = var2.lastIndexOf(46);
- if (var5 >= 0) {
- var4.checkPackageDefinition(var2.substring(0, var5));
- }
- }
-
- PrivilegeManager var12 = PrivilegeManager.getPrivilegeManager();
- if (var12 != null) {
- Target var6 = Target.findTarget("MarimbaInternalTarget");
- if (var6 == null) {
- throw new AppletSecurityException("classFromBytes call denied");
- }
-
- var12.checkPrivilegeEnabled(var6);
- }
-
- try {
- var3 = ((ClassLoader)this).defineClass(var2, var1, 0, var1.length);
- return var3;
- } catch (NoClassDefFoundError var7) {
- return null;
- }
- }
- }
- }
-
- private Class marimbaLoad(String var1) throws IOException, ClassNotFoundException {
- if (this.channelInfo == null) {
- return null;
- } else {
- Class var2 = null;
- int var3 = this.channelInfo.getPathlen();
- if (var3 != 0) {
- String var4 = var1.replace('.', '/') + ".class";
-
- for(int var5 = 0; var5 < var3; ++var5) {
- URL var6 = this.channelInfo.getURL(var5);
- if (var6 != null) {
- try {
- var2 = this.loadClass(var1, new URL(var6, var4), var4);
- if (var2 != null) {
- return var2;
- }
- } catch (NoClassDefFoundError var14) {
- } catch (MalformedURLException var15) {
- } catch (FileNotFoundException var16) {
- }
- }
-
- ZipFile var7 = this.channelInfo.getZip(var5);
- if (var7 != null) {
- ZipEntry var8 = var7.getEntry(var4);
- if (var8 != null) {
- int var9 = (int)var8.getSize();
- byte[] var10 = new byte[var9];
- InputStream var11 = var7.getInputStream(var8);
-
- for(int var12 = 0; var12 < var9; var12 += var11.read(var10, var12, var9 - var12)) {
- }
-
- var11.close();
-
- try {
- var2 = ((ClassLoader)this).defineClass(var1, var10, 0, var10.length);
- } catch (NoClassDefFoundError var13) {
- }
-
- if (var2 != null) {
- return var2;
- }
- }
- }
- }
- }
-
- return null;
- }
- }
-
- public boolean marimbaCheckRead(String var1, boolean var2) {
- return this.channelInfo != null ? this.channelInfo.checkRead(var1, var2) : false;
- }
-
- public boolean marimbaCheckWrite(String var1, boolean var2) {
- return this.channelInfo != null ? this.channelInfo.checkWrite(var1, var2) : false;
- }
-
- public String marimbaGetHost() {
- return this.channelInfo != null ? this.channelInfo.getHost() : null;
- }
-
- boolean marimbaCheckThreadGroup(ThreadGroup var1) {
- return this.channelInfo == null ? false : this.channelInfo.checkThreadGroup(var1);
- }
-
- void marimbaCheckTopLevelWindow(Object var1) {
- if (this.channelInfo != null) {
- this.channelInfo.checkTopLevelWindow(var1);
- }
- }
-
- Hashtable getCodebaseEnv() {
- if (this.codebaseEnv == null) {
- this.initCodebaseEnv();
- }
-
- return this.codebaseEnv;
- }
-
- synchronized void initCodebaseEnv() {
- if (this.codebaseEnv == null) {
- this.codebaseEnv = new Hashtable();
- }
-
- }
- }
-