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.IOException;
- import java.io.InputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.Hashtable;
- import java.util.zip.ZipInputStream;
- import sun.misc.Ref;
- import sun.net.www.protocol.http.HttpURLConnection;
- 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;
-
- 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;
- }
-
- void loadJar(URL var1, String var2) throws IOException {
- URL var3 = AppletClassLoader.makeRelativeURLWithSecurity(var1, var2);
- URLConnection var4 = var3.openConnection();
- InputStream var5 = HttpURLConnection.openConnectionCheckRedirects(var4);
- this.loadJar(var1, var5);
- }
-
- public void loadJar(URL var1, InputStream var2) throws IOException {
- JarVerifierStream var3 = null;
- Hashtable var4 = new Hashtable();
- byte[] var5 = new byte[8192];
- ByteArrayOutputStream var6 = new ByteArrayOutputStream(2048);
-
- try {
- var3 = new JarVerifierStream(var2);
- Object var9 = null;
-
- while((var21 = var3.getNextEntry()) != null) {
- String var10 = var21.getName();
- String var11 = null;
- Object var12 = null;
- var6.reset();
-
- int var13;
- while((var13 = var3.read(var5, 0, var5.length)) != -1) {
- var6.write(var5, 0, var13);
- }
-
- byte[] var14 = var6.toByteArray();
- if (var11 == null) {
- var11 = this.guessManifestType(var10);
- }
-
- if (var11 == null) {
- ByteArrayInputStream var15 = new ByteArrayInputStream(var14);
- var11 = URLConnection.guessContentTypeFromStream(var15);
- }
-
- if (var11 == null) {
- var11 = "input-stream/input-stream";
- }
-
- debug("loading " + var10 + " (most likely guessed mime-type: " + var11 + ")");
- if (var11.startsWith("image")) {
- this.putLocalResource(new URL(var1, var10), var14, var11);
- } else if (var11.startsWith("audio")) {
- this.putLocalResource(new URL(var1, var10), var14, var11);
- AppletAudioClip var23 = new AppletAudioClip(var14);
- audioHash.put(new URL(var1, var10), var23);
- var12 = var23;
- } else if (!var11.startsWith("application/java-vm") && !var11.startsWith("application/x-java-vm")) {
- if (!var11.equals("manifest/manifest") && !var11.equals("manifest/signature-bin")) {
- this.putLocalResource(new URL(var1, var10), var14, var11);
- }
- } else {
- this.markLocalClass(new URL(var1, var10));
- String var24 = var10.substring(0, var10.length() - 6).replace('/', '.');
- AppletClassEntry var16 = this.loader.defineClassFromBytes(var24, var14, 0, var14.length);
- var12 = var16;
- var16.ids = var3.getIdentities(var10);
- }
-
- if (var12 != null) {
- var4.put(var10, var12);
- var12 = null;
- }
- }
- } catch (IOException var19) {
- debug("IOException loading archive: " + var19);
- ((Throwable)var19).printStackTrace();
- } finally {
- debug("Closing jar input stream");
- if (var3 != null) {
- ((ZipInputStream)var3).close();
- }
-
- }
-
- }
-
- 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;
- }
-
- public static void flushAudioClips() {
- audioHash = new Hashtable();
- }
-
- 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) {
- System.getSecurityManager().checkConnect(var0.getHost(), var0.getPort());
- 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();
- }
-
- private void markLocalClass(URL var1) {
- resourceHash.put(var1, "A CLASS FILE");
- mimeHash.put(var1, "application/java-vm");
- }
-
- private void putLocalResource(URL var1, byte[] var2, String var3) {
- resourceHash.put(var1, var2);
- mimeHash.put(var1, var3);
- }
-
- public static synchronized Object getLocalResource(URL var0) {
- System.getSecurityManager().checkConnect(var0.getHost(), var0.getPort());
- 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 {
- var1 = resourceHash.get(var0);
- if (var1 instanceof String) {
- throw new AppletSecurityException("getresource.noclassaccess", var0.toString());
- } else {
- byte[] var3 = (byte[])var1;
- 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) {
- System.getSecurityManager().checkConnect(var0.getHost(), var0.getPort());
- Object var1 = null;
- if ((var1 = resourceHash.get(var0)) != null) {
- if (var1 instanceof String) {
- throw new AppletSecurityException("getresource.noclassaccess", var0.toString());
- } else {
- 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 java.net.HttpURLConnection) {
- java.net.HttpURLConnection var6 = (java.net.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();
- }
- }
-