home *** CD-ROM | disk | FTP | other *** search
- package sun.applet;
-
- import java.applet.AudioClip;
- import java.awt.Image;
- import java.awt.Toolkit;
- import java.io.BufferedInputStream;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.FilterInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.security.Identity;
- import java.security.IdentityScope;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
- import java.util.zip.ZipInputStream;
- import sun.misc.Ref;
- import sun.tools.jar.JarImageSource;
- import sun.tools.jar.JarVerifierStream;
-
- public class AppletResourceLoader {
- static boolean debug;
- static boolean verboseResourceLoading;
- private static Hashtable imgHash = new Hashtable();
- private static Hashtable audioHash = new Hashtable();
- private static Hashtable resourceHash = new Hashtable();
- private static Hashtable mimeHash = new Hashtable();
- AppletClassLoader loader;
- IdentityScope scope;
-
- private void verbose(String var1) {
- if (verboseResourceLoading) {
- System.out.println(var1);
- }
-
- }
-
- static void debug(String var0) {
- if (debug) {
- System.out.println(var0);
- }
-
- }
-
- static void debug(String var0, Throwable var1) {
- if (debug) {
- var1.printStackTrace();
- }
-
- System.out.println("sun.applet.AppletResourceLoader:::" + var0);
- }
-
- public AppletResourceLoader(AppletClassLoader var1) {
- this.loader = var1;
- this.scope = IdentityScope.getSystemScope();
- }
-
- void loadJar(URL var1, String var2) throws IOException {
- this.loadJar(var1, (new URL(var1, var2)).openStream());
- }
-
- public void loadJar(URL var1, InputStream var2) throws IOException {
- JarVerifierStream var3 = null;
- Hashtable var4 = new Hashtable();
-
- try {
- var3 = new JarVerifierStream(var2);
- Object var7 = null;
- byte[] var8 = new byte[2048];
-
- while((var21 = var3.getNextEntry()) != null) {
- String var9 = var21.getName();
- String var10 = null;
- Object var11 = null;
- ByteArrayOutputStream var12 = new ByteArrayOutputStream();
-
- int var13;
- while((var13 = ((FilterInputStream)var3).read(var8)) > 0) {
- var12.write(var8, 0, var13);
- }
-
- byte[] var14 = var12.toByteArray();
- if (var10 == null) {
- var10 = this.guessManifestType(var9);
- }
-
- if (var10 == null) {
- ByteArrayInputStream var15 = new ByteArrayInputStream(var14);
- var10 = URLConnection.guessContentTypeFromStream(var15);
- }
-
- if (var10 == null) {
- var10 = "input-stream/input-stream";
- }
-
- debug("loading " + var9 + " (most likely guessed mime-type: " + var10 + ")");
- if (var10.startsWith("image")) {
- this.putLocalResource(new URL(var1, var9), var14, var10);
- var11 = this.createImage(var14, var1, var9, var10);
- } else if (var10.startsWith("audio")) {
- URL var24 = new URL(var1, var9);
- this.putLocalResource(var24, var14, var10);
- AppletAudioClip var16 = new AppletAudioClip(var14);
- audioHash.put(var24, var16);
- var11 = var16;
- } else if (var10.startsWith("application/java-vm")) {
- this.putLocalResource(new URL(var1, var9), var14, var10);
- String var25 = var9.substring(0, var9.length() - 6).replace('/', '.');
- var11 = this.loader.defineClassFromBytes(var25, var14, 0, var14.length);
- } else if (!var10.equals("manifest/manifest") && !var10.equals("manifest/signature-bin")) {
- this.putLocalResource(new URL(var1, var9), var14, var10);
- ByteArrayInputStream var26 = new ByteArrayInputStream(var14);
- var11 = var26;
- }
-
- if (var11 != null) {
- var4.put(var9, var11);
- var11 = null;
- }
- }
-
- Enumeration var22 = var3.getBlocks();
- var3.getNameToHash();
- var3.getManifest();
- if (var22 != null) {
- this.signObjects(var3.getVerifiedSignatures(), var4);
- } else {
- debug("BLOCK is null");
- }
- } catch (IOException var19) {
- debug("IOException loading archive: " + var19);
- ((Throwable)var19).printStackTrace();
- } finally {
- debug("Closing jar input stream");
- if (var3 != null) {
- ((ZipInputStream)var3).close();
- }
-
- }
-
- }
-
- private void signObjects(Hashtable var1, Hashtable var2) {
- Enumeration var3 = var1.keys();
-
- while(var3.hasMoreElements()) {
- String var4 = (String)var3.nextElement();
- Vector var5 = (Vector)var1.get(var4);
- Object var6 = var2.get(var4);
- Identity[] var7 = new Identity[var5.size()];
- var5.copyInto(var7);
- AppletClassEntry var8;
- if (var6 instanceof AppletClassEntry && (var8 = (AppletClassEntry)this.loader.rawClasses.get(var6)) != null && var8 == var6) {
- var8.ids = var7;
- }
- }
-
- }
-
- String guessManifestType(String var1) {
- var1 = var1.toUpperCase();
- if (var1.startsWith("/")) {
- var1 = var1.substring(1);
- }
-
- if (!var1.startsWith("META-INF/")) {
- return null;
- } else if (var1.equalsIgnoreCase("META-INF/MANIFEST.MF")) {
- return "manifest/manifest";
- } else if (!var1.endsWith("DSA") && !var1.endsWith("PK7") && !var1.endsWith("PGP")) {
- return var1.endsWith("SF") ? "manifest/signature-asc" : null;
- } else {
- return "manifest/signature-bin";
- }
- }
-
- public static synchronized AudioClip getAudioClip(URL var0) {
- System.getSecurityManager().checkConnect(var0.getHost(), var0.getPort());
- Object var1 = (AudioClip)audioHash.get(var0);
- if (var1 == null) {
- audioHash.put(var0, var1 = new AppletAudioClip(var0));
- }
-
- return (AudioClip)var1;
- }
-
- Image createImage(byte[] var1, URL var2, String var3, String var4) throws MalformedURLException {
- debug("creating image: " + var3);
- BufferedInputStream var5 = new BufferedInputStream(new ByteArrayInputStream(var1));
- JarImageSource var6 = new JarImageSource(var2, var5, var4);
- Image var7 = Toolkit.getDefaultToolkit().createImage(var6);
- URL var8 = new URL(var2, var3);
- AppletImageRef var9 = new AppletImageRef(var8);
- ((Ref)var9).setThing(var7);
- imgHash.put(var8, var9);
- return var7;
- }
-
- public static synchronized Image getImage(URL var0) {
- return (Image)getImageRef(var0).get();
- }
-
- public static synchronized Ref getImageRef(URL var0) {
- AppletImageRef var1 = (AppletImageRef)imgHash.get(var0);
- if (var1 == null) {
- var1 = new AppletImageRef(var0);
- imgHash.put(var0, var1);
- }
-
- return var1;
- }
-
- public static void flushImages() {
- imgHash = new Hashtable();
- }
-
- void putLocalResource(URL var1, byte[] var2, String var3) {
- resourceHash.put(var1, var2);
- mimeHash.put(var1, var3);
- }
-
- public static synchronized Object getLocalResource(URL var0) {
- Object var1 = mimeHash.get(var0);
- if (var1 == null) {
- return null;
- } else {
- String var2 = (String)var1;
- if (var2.startsWith("audio") && (var1 = audioHash.get(var0)) != null) {
- return var1;
- } else {
- byte[] var3 = (byte[])resourceHash.get(var0);
- BufferedInputStream var4 = new BufferedInputStream(new ByteArrayInputStream(var3));
- if (var2.startsWith("image")) {
- JarImageSource var5 = new JarImageSource(var0, var4, var2);
- return var5;
- } else {
- return var4;
- }
- }
- }
- }
-
- public static InputStream getLocalResourceStream(URL var0) {
- Object var1 = null;
- if ((var1 = resourceHash.get(var0)) != null) {
- byte[] var2 = (byte[])var1;
- BufferedInputStream var4 = new BufferedInputStream(new ByteArrayInputStream(var2));
- return (InputStream)var4;
- } else {
- return null;
- }
- }
-
- public String getResourceAsName(String var1) {
- this.verbose("AppletResourceLoader.getResourceAsName for name: " + var1);
- URL var2 = this.loader.getCodeBase();
-
- URL var3;
- try {
- var3 = new URL(var2, var1);
- } catch (Exception var7) {
- return null;
- }
-
- Object var4 = resourceHash.get(var3);
- if (var4 != null) {
- this.verbose("Found resource: " + var1 + " in some jar archive for base: " + var2);
-
- try {
- var3 = new URL("appletresource", var2.getHost(), var2.getPort(), "/" + var2.toExternalForm() + "/+/" + var1);
- return var3.toExternalForm();
- } catch (Exception var6) {
- this.verbose("Exception " + var6 + " while building a resource URL");
- return null;
- }
- } else {
- return var3.toExternalForm();
- }
- }
-
- public InputStream getResourceAsStream(String var1) {
- this.verbose("AppletResourceLoader.getResourceAsStream for name: " + var1);
- URL var2 = this.loader.getCodeBase();
-
- URL var3;
- try {
- var3 = new URL(var2, var1);
- } catch (Exception var9) {
- return null;
- }
-
- InputStream var4 = getLocalResourceStream(var3);
- if (var4 != null) {
- this.verbose("Found resource: " + var1 + " in jar archive file");
- return var4;
- } else {
- this.verbose("Opening stream to: " + var3 + " to get resource " + var1);
-
- try {
- URLConnection var5 = var3.openConnection();
- if (var5 instanceof HttpURLConnection) {
- HttpURLConnection var6 = (HttpURLConnection)var5;
- int var7 = var6.getResponseCode();
- if (var7 == 200) {
- var4 = var3.openStream();
- }
-
- if (var7 >= 400) {
- var4 = null;
- }
- } else {
- var4 = var3.openStream();
- }
-
- return var4;
- } catch (Exception var8) {
- return null;
- }
- }
- }
-
- void resetLocalResources() {
- resourceHash.clear();
- }
- }
-