diff options
Diffstat (limited to 'khtml/java/org')
17 files changed, 0 insertions, 4621 deletions
diff --git a/khtml/java/org/kde/javascript/JSObject.java b/khtml/java/org/kde/javascript/JSObject.java deleted file mode 100644 index 11e7f9f99..000000000 --- a/khtml/java/org/kde/javascript/JSObject.java +++ /dev/null @@ -1,183 +0,0 @@ -package org.kde.javascript; - -import java.applet.Applet; -import org.kde.kjas.server.KJASAppletContext; -import org.kde.kjas.server.Main; - -public class JSObject extends netscape.javascript.JSObject { - public String returnvalue = null; - public Thread thread; - - private String jsobject; - private int id; - private Applet applet; - private String appletID = null; - - /* JavaScript code: - * __lc=[[JS objects],call func(index,script,appletname,isglobal)] - */ - private final static String decls = "if(!window.__lc) window.__lc=[[window],function(i,s,a,g){var v;var len=window.__lc[0].length;if(i>=len)v='E unknown object';else{var r;try{r=eval((g?'':'window.__lc[0][i]')+s);}catch(e){v='E '+e;r='E ';}finally{var t=typeof r;if(t=='undefined')v='V ';else if(t=='number')v='N '+r;else if(t=='string'){if(r!='E ')v='S '+r;}else{window.__lc[0][len]=r;v=''+len+' '+(r==window.__lc?'[array]':r);}}}a.__lc_ret=v},0]"; - - public JSObject(Applet a, String name, int _id) { - Main.info("JSObject.ctor: " + name); - jsobject = new String(name); - applet = a; - id = _id; - KJASAppletContext kc = (KJASAppletContext)applet.getAppletContext(); - appletID = kc.getAppletID(a); - if (id == 0) { - kc.evaluateJavaScript(decls, appletID, null); - } - } - - int getId() { - return id; - } - - private String escapeString(String string) { - StringBuffer sb = new StringBuffer(); - int idx = 0; - boolean cr = false; - char [] chars = string.toCharArray(); - while (idx < chars.length) { - if (cr && chars[idx] != '\n') { - cr = false; - sb.append("\\n"); - } - switch (chars[idx]) { - case '\\': - sb.append("\\\\"); - break; - case '"': - sb.append("\\\""); - break; - case '\n': - cr = false; - sb.append("\\n"); - break; - case '\r': - cr = true; - break; - default: - sb.append(chars[idx]); - } - idx++; - } - if (cr) - sb.append("\\n"); - return sb.toString(); - } - - private Object evaluate(String script, boolean global) throws netscape.javascript.JSException { - Main.info("evaluate (\"" + script + "\")"); - - KJASAppletContext kc = (KJASAppletContext) applet.getAppletContext(); - //String appletname = kc.getAppletName(appletID); - thread = Thread.currentThread(); - - if (!kc.evaluateJavaScript("window.__lc[1](" + id + ",\"" + escapeString(script) + "\",this" + (global ? ",true)" : ")"), appletID, this)) { - Main.debug("evaluate on not active applet"); - return null; - } - boolean timedout = true; - try { - Thread.sleep(30000); - } catch (InterruptedException ex) { - timedout = false; - } - thread = null; - if (timedout || returnvalue == null) - return null; - - /* lets see what we've got */ - String retval = returnvalue; - int pos = retval.indexOf(' '); - String type = retval.substring(0, pos); - if (type.equals("V")) // Void - return null; - String value = retval.substring(pos+1); - if (type.equals("E")) // Error - throw new netscape.javascript.JSException("Script error: " + value); - Main.info("value=" + value + " (type=" + type + ")"); - if (type.equals("N")) // Number - return new Double(value); - if (type.equals("S")) // String - return value; - - /* Is it an applet? */ - if (value.startsWith("[object APPLET ref=")) { - int p1 = value.indexOf('='); - int p2 = value.indexOf(']', p1+1); - int applethashcode = Integer.parseInt(value.substring(p1+1, p2)); - java.util.Enumeration e = kc.getApplets(); - while (e.hasMoreElements()) { - Applet app = (Applet) e.nextElement(); - if (app.hashCode() == applethashcode) - return app; - } - return null; - } - /* Is it a Java object then? */ - if (value.startsWith("[object ") && value.indexOf("ref=") > 0) { - int p1 = value.indexOf("ref="); - int p2 = value.indexOf(']', p1+4); - int objecthashcode = Integer.parseInt(value.substring(p1+4, p2)); - return kc.getJSReferencedObject(applet, objecthashcode); - } - /* Ok, make it a JSObject */ - return new JSObject(applet, value, Integer.parseInt(type)); - } - private String convertValueJ2JS(Object o) { - if (o == null) - return new String("null"); - if (o instanceof java.lang.Number || o instanceof java.lang.Boolean) - return o.toString(); - if (o instanceof netscape.javascript.JSObject) - return new String("window.__lc[0][" + ((JSObject)o).getId() + "]"); - return new String("\"" + escapeString(o.toString()) + "\""); - } - public Object call(String func, Object [] args) throws netscape.javascript.JSException { - Main.info("JSObject.call: " + jsobject + "." + func); - String script = new String("." + func + "("); - for (int i = 0; args != null && i < args.length; i++) - script += (i > 0 ? "," : "") + convertValueJ2JS(args[i]); - script += ")"; - return evaluate(script, false); - } - public Object eval(String s) throws netscape.javascript.JSException { - return evaluate(s, true); - } - public boolean equals(Object obj) { - Main.info("JSObject.equals"); - return super.equals(obj); - } - public Object getMember(String name) throws netscape.javascript.JSException { - Main.info("JSObject.getMember: " + jsobject + "." + name); - return evaluate("." + name, false); - } - public void setMember(String name, java.lang.Object o) throws netscape.javascript.JSException { - Main.info("JSObject.setMember: " + jsobject + "." + name); - evaluate("." + name + "=" + convertValueJ2JS(o), false); - } - public void removeMember(String name) throws netscape.javascript.JSException { - Main.info("JSObject.removeMember: " + jsobject + "." + name); - evaluate("." + name + "=null", false); - } - /* get array element; JS: this[index] */ - public Object getSlot(int index)throws netscape.javascript.JSException { - Main.info("JSObject.getSlot: " + jsobject + "[" + index + "]"); - return evaluate("[" + index + "]", false); - } - public void setSlot(int index, Object o) throws netscape.javascript.JSException { - Main.info("JSObject.setSlot: " + jsobject + "[" + index + "]"); - evaluate("[" + index + "]=" + convertValueJ2JS(o), false); - } - public String toString(){ - Main.info("JSObject.toString: " + jsobject); - return new String(jsobject); - } - public static JSObject getWindow(Applet a, int dummy) { - Main.info("JSObject.getWindow"); - return new JSObject(a, "[WINDOW]", 0); - } -} diff --git a/khtml/java/org/kde/kjas/server/Console.java b/khtml/java/org/kde/kjas/server/Console.java deleted file mode 100644 index d089f3cd8..000000000 --- a/khtml/java/org/kde/kjas/server/Console.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Appendable.java - * - * Created on 16. Mai 2002, 23:23 - */ - -package org.kde.kjas.server; - -/** - * - * @author till - */ -public interface Console { - - public void clear(); - public void append(String text); - - public void setVisible(boolean visible); - -} diff --git a/khtml/java/org/kde/kjas/server/KJASAppletClassLoader.java b/khtml/java/org/kde/kjas/server/KJASAppletClassLoader.java deleted file mode 100644 index c6defa848..000000000 --- a/khtml/java/org/kde/kjas/server/KJASAppletClassLoader.java +++ /dev/null @@ -1,360 +0,0 @@ -package org.kde.kjas.server; - -import java.net.*; -import java.io.*; -import java.util.*; -import java.util.zip.*; -import java.util.jar.*; -import java.security.*; -/** - * ClassLoader used to download and instantiate Applets. - * <P> - * NOTE: The class loader extends Java 1.2 specific class. - */ -public final class KJASAppletClassLoader - extends URLClassLoader -{ - private static Hashtable loaders = new Hashtable(); - - public static synchronized void removeLoaders() - { - loaders.clear(); - } - - public static synchronized KJASAppletClassLoader getLoader( String docBase, String codeBase, String archives ) - { - SecurityManager security = System.getSecurityManager(); - if (security != null) { - security.checkCreateClassLoader(); - } - URL docBaseURL; - KJASAppletClassLoader loader = null; - try - { - docBaseURL = new URL( docBase ); - - URL codeBaseURL = getCodeBaseURL( docBaseURL, codeBase ); - String key = codeBaseURL.toString(); - if (archives != null) - key += archives; - - Main.debug( "CL: getLoader: key = " + key ); - - loader = (KJASAppletClassLoader) loaders.get( key ); - if( loader == null ) - { - URL [] urlList = {}; - loader = new KJASAppletClassLoader( urlList, docBaseURL, codeBaseURL); - loaders.put( key, loader ); - } - else - { - Main.debug( "CL: reusing classloader" ); - } - } catch( MalformedURLException e ) { Main.kjas_err( "bad DocBase URL", e ); } - return loader; - } - - public static URL getCodeBaseURL( URL docBaseURL, String codeBase ) - { - URL codeBaseURL = null; - try - { - //first determine what the real codeBase is: 3 cases - //#1. codeBase is absolute URL- use that - //#2. codeBase is relative to docBase, create url from those - //#3. last resort, use docBase as the codeBase - if(codeBase != null) - { - //we need to do this since codeBase should be a directory - if( !codeBase.endsWith("/") ) - codeBase = codeBase + "/"; - - try - { - codeBaseURL = new URL( codeBase ); - } catch( MalformedURLException mue ) - { - try - { - codeBaseURL = new URL( docBaseURL, codeBase ); - } catch( MalformedURLException mue2 ) {} - } - } - - if(codeBaseURL == null) - { - //fall back to docBase but fix it up... - String file = docBaseURL.getFile(); - if( file == null || (file.length() == 0) ) - codeBaseURL = docBaseURL; - else if( file.endsWith( "/" ) ) - codeBaseURL = docBaseURL; - else - { - //delete up to the ending '/' - String urlString = docBaseURL.toString(); - int dot_index = urlString.lastIndexOf( '/' ); - String newfile = urlString.substring( 0, dot_index+1 ); - codeBaseURL = new URL( newfile ); - } - } - }catch( Exception e ) { Main.kjas_err( "CL: exception ", e ); } - return codeBaseURL; - } - - public static KJASAppletClassLoader getLoader( String key ) - { - SecurityManager security = System.getSecurityManager(); - if (security != null) { - security.checkCreateClassLoader(); - } - if( loaders.containsKey( key ) ) - return (KJASAppletClassLoader) loaders.get( key ); - - return null; - } - - /********************************************************************************* - ****************** KJASAppletClassLoader Implementation ************************* - **********************************************************************************/ - private URL docBaseURL; - private URL codeBaseURL; - private Vector archives; - private String dbgID; - private static int globalId = 0; - private int myId = 0; - private Vector statusListeners = new Vector(); - private AccessControlContext acc; - // a mapping JS referenced Java objects - private Hashtable jsReferencedObjects = new Hashtable(); - final static RuntimePermission kjas_access = new RuntimePermission("accessClassInPackage.org.kde.kjas.server"); - - public KJASAppletClassLoader( URL[] urlList, URL _docBaseURL, URL _codeBaseURL) - { - super(urlList); - acc = AccessController.getContext(); - synchronized(KJASAppletClassLoader.class) { - myId = ++globalId; - } - docBaseURL = _docBaseURL; - codeBaseURL = _codeBaseURL; - archives = new Vector(); - - dbgID = "CL-" + myId + "(" + codeBaseURL.toString() + "): "; - } - - protected void addURL(URL url) { - Main.debug(this + " add URL: " + url); - super.addURL(url); - } - - public void addStatusListener(StatusListener lsnr) { - statusListeners.add(lsnr); - } - public void removeStatusListener(StatusListener lsnr) { - statusListeners.remove(lsnr); - } - public void showStatus(String msg) { - Enumeration en = statusListeners.elements(); - while (en.hasMoreElements()) { - StatusListener lsnr = (StatusListener)en.nextElement(); - lsnr.showStatus(msg); - } - } - - public void paramsDone() { - // simply builds up the search path - // put the archives first because they are - // cached. - for( int i = 0; i < archives.size(); ++i ) { - String jar = (String)archives.elementAt( i ); - try { - URL jarURL = new URL(codeBaseURL, jar); - addURL(jarURL); - Main.debug("added archive URL \"" + jarURL + "\" to KJASAppletClassLoader"); - } catch (MalformedURLException e) { - Main.kjas_err("Could not construct URL for jar file: " + codeBaseURL + " + " + jar, e); - } - } - // finally add code base url and docbase url - addURL(codeBaseURL); - - // the docBaseURL has to be fixed. - // strip file part from end otherwise this - // will be interpreted as an archive - // (should this perhaps be done generally ??) - String dbs = docBaseURL.toString(); - int idx = dbs.lastIndexOf("/"); - if (idx > 0) { - dbs = dbs.substring(0, idx+1); - } - URL docDirURL = null; - try { - docDirURL = new URL(dbs); - } catch (MalformedURLException e) { - Main.debug("Could not make a new URL from docBaseURL=" + docBaseURL); - } - if (docDirURL != null && !codeBaseURL.equals(docDirURL)) { - addURL(docDirURL); - } - } - - void addArchiveName( String jarname ) - { - if( !archives.contains( jarname ) ) - { - archives.add( jarname ); - } - } - - - public URL getDocBase() - { - return docBaseURL; - } - - public URL getCodeBase() - { - return codeBaseURL; - } - - Hashtable getJSReferencedObjects() { - return jsReferencedObjects; - } - /*************************************************************************** - **** Class Loading Methods - **************************************************************************/ - public synchronized Class findClass( String name ) throws ClassNotFoundException - { - Class rval = null; - //check the loaded classes - rval = findLoadedClass( name ); - if( rval == null ) { - try { - rval = super.findClass(name); - } catch (ClassFormatError cfe) { - Main.debug(name + ": Catched " + cfe + ". Trying to repair..."); - rval = loadFixedClass( name ); - } catch (Exception ex) { - Main.debug("findClass " + name + " " + ex.getMessage()); - } - } - if (rval == null) { - throw new ClassNotFoundException("Class: " + name); - } - return rval; - } - public Class loadClass(String name) throws ClassNotFoundException { - if (name.startsWith("org.kde.kjas.server")) { - SecurityManager sec = System.getSecurityManager(); - if (sec != null) - sec.checkPermission(kjas_access); - } - return super.loadClass(name); - } - private Hashtable loadedClasses = new Hashtable(); - - private synchronized final Class loadFixedClass(String name) throws ClassNotFoundException { - final String fileName = name.replace('.', '/') + ".class"; - try { - // try to get the class as resource - final URL u = getResource(fileName); - Main.debug(dbgID + name + ": got URL: " + u); - if (u == null) { - throw new ClassNotFoundException(fileName + ": invalid resource URL."); - } - java.security.cert.Certificate[] certs = {}; // FIXME - CodeSource cs = new CodeSource(u, certs); - InputStream instream = (InputStream)AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - try { - return u.openStream(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return null; - } - } - }, acc - ); - if (instream == null) { - throw new ClassNotFoundException(name + ": could not be loaded."); - } - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - int cnt; - int total = 0; - int bufSize = 1024; - byte [] buffer = new byte[bufSize]; - while ((cnt = instream.read(buffer, 0, bufSize)) > 0) { - total += cnt; - byteStream.write(buffer, 0, cnt); - } - Main.debug(dbgID + name + ": " + total + " bytes"); - - Class cl = fixAndDefineClass(name, byteStream.toByteArray(), 0, total, cs); - if (cl != null) { - loadedClasses.put(name, cl); - } - return cl; - - } catch (Throwable e) { - e.printStackTrace(); - throw new ClassNotFoundException("triggered by " + e); - } - } - - public URL findResource( String name) - { - Main.debug( dbgID + "findResource, name = " + name ); - String displayName = name; - try { - URL u = new URL(name); - String filename = u.getFile(); - if (filename != null && filename.length() > 0) { - displayName = filename; - } - } catch (Throwable e) { - } - showStatus("Loading: " + displayName); - URL url = super.findResource( name ); - Main.debug("findResource for " + name + " returns " + url); - return url; - } - - protected PermissionCollection getPermissions(CodeSource cs) { - Main.debug(dbgID + " getPermissions(" + cs + ")"); - PermissionCollection permissions = super.getPermissions(cs); - Enumeration perms_enum = permissions.elements(); - while (perms_enum.hasMoreElements()) { - Main.debug(this + " Permission: " + perms_enum.nextElement()); - } - return permissions; - } - - - /** - * define the class <b>name</b>. If <b>name</b> is broken, try to fix it. - */ - private final Class fixAndDefineClass( - String name, - byte[] b, - int off, - int len, - CodeSource cs) throws ClassFormatError - { - KJASBrokenClassFixer fixer = new KJASBrokenClassFixer(); - if (fixer.process(b, off, len)) { - Main.debug(name + " fixed"); - } else { - Main.info(name + " could not be fixed"); - } - return defineClass(name, - fixer.getProcessedData(), - fixer.getProcessedDataOffset(), - fixer.getProcessedDataLength(), - cs); - } - - -} diff --git a/khtml/java/org/kde/kjas/server/KJASAppletContext.java b/khtml/java/org/kde/kjas/server/KJASAppletContext.java deleted file mode 100644 index f868b7b64..000000000 --- a/khtml/java/org/kde/kjas/server/KJASAppletContext.java +++ /dev/null @@ -1,473 +0,0 @@ -package org.kde.kjas.server; - -import java.applet.*; -import java.util.*; -import java.net.*; -import java.awt.*; -import java.awt.event.*; -import java.io.*; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import org.kde.javascript.JSObject; - -final class KJASAuthenticator extends Authenticator { - private Hashtable authentication; - - KJASAuthenticator() { - authentication = new Hashtable(); - setDefault(this); - } - final void addURL(URL url, String user, String password, String authname) { - String key = new String(url.getProtocol() + ":" + url.getHost() + ":" + - url.getPort() + "_" + authname); - String [] auths = { user, password }; - authentication.put(key, auths); - } - final protected PasswordAuthentication getPasswordAuthentication() { - URL url; - String key = new String(getRequestingProtocol() + ":" + getRequestingHost() + ":" + getRequestingPort() + "_" + getRequestingPrompt()); - String [] auths = (String []) authentication.get(key); - if (auths != null) { - char [] pw = new char[auths[1].length()]; - auths[1].getChars(0, auths[1].length(), pw, 0); - return new PasswordAuthentication(auths[0], pw); - } - return null; - } -} - -/** - * The context in which applets live. - */ -public class KJASAppletContext implements AppletContext -{ - private Hashtable stubs; - private Hashtable images; - private Vector pendingImages; - private Hashtable streams; - private Stack jsobjects; - - private String myID; - private KJASAppletClassLoader loader; - private boolean active; - private final static KJASAuthenticator authenticator = new KJASAuthenticator(); - - /** - * Create a KJASAppletContext - */ - public KJASAppletContext( String _contextID ) - { - stubs = new Hashtable(); - images = new Hashtable(); - pendingImages = new Vector(); - streams = new Hashtable(); - jsobjects = new Stack(); - myID = _contextID; - active = true; - } - - public String getID() - { - return myID; - } - - public String getAppletID(Applet applet) - { - Enumeration e = stubs.keys(); - while ( e.hasMoreElements() ) - { - String appletID = (String) e.nextElement(); - KJASAppletStub stub = (KJASAppletStub) stubs.get(appletID); - if (stub.getApplet() == applet) - return appletID; - } - return null; - } - - public Applet getAppletById(String appletId) { - return ((KJASAppletStub) stubs.get( appletId )).getApplet(); - } - - public String getAppletName(String appletID) { - KJASAppletStub stub = (KJASAppletStub) stubs.get(appletID); - if (stub == null) - return null; - return stub.getAppletName(); - } - public void createApplet( String appletID, String name, - String className, String docBase, - String username, String password, String authname, - String codeBase, String archives, - String width, String height, - String windowName, Hashtable params ) - { - //do kludges to support mess with parameter table and - //the applet variables - String key = new String( "ARCHIVE" ); - if (params.containsKey(key)) { - String param_archive = (String)params.get(key); - if (archives == null) { - // There is no 'archive' attribute - // but a 'archive' param. fix archive list - // from param value - archives = param_archive; - } else { - // there is already an archive attribute. - // just add the value of the param to the list. - // But ignore bill$ personal archive format called - // .cab because java doesn't understand it. - if (!param_archive.toLowerCase().endsWith(".cab")) { - archives = param_archive + "," + archives; - } - } - } else if (archives != null) { - // add param if it is not present - params.put( key, archives); - } - - if( codeBase == null ) - { - key = new String( "CODEBASE" ); - if( params.containsKey( key ) ) - codeBase = (String) params.get( key ); - } - - if (username != null && !username.equals("")) { - try { - URL url = new URL(docBase); - int port = url.getPort(); - if (port < 0) - port = url.getDefaultPort(); - authenticator.addURL(new URL(url.getProtocol(), url.getHost(), port, ""), username, password, authname); - } catch (MalformedURLException muex) { - } - } - try - { - String sorted_archives = ""; - TreeSet archive_set = new TreeSet(); - if( archives != null ) - { - StringTokenizer parser = new StringTokenizer( archives, ",", false ); - while( parser.hasMoreTokens() ) - archive_set.add ( parser.nextToken().trim() ); - } - Iterator it = archive_set.iterator(); - while (it.hasNext()) - sorted_archives += (String) it.next(); - KJASAppletClassLoader loader = - KJASAppletClassLoader.getLoader( docBase, codeBase, sorted_archives ); - it = archive_set.iterator(); - while (it.hasNext()) - loader.addArchiveName( (String) it.next() ); - loader.paramsDone(); - - KJASAppletStub stub = new KJASAppletStub - ( - this, appletID, loader.getCodeBase(), - loader.getDocBase(), name, className, - new Dimension( Integer.parseInt(width), Integer.parseInt(height) ), - params, windowName, loader - ); - stubs.put( appletID, stub ); - - stub.createApplet(); - } - catch ( Exception e ) - { - Main.kjas_err( "Something bad happened in createApplet: " + e, e ); - } - } - - public void initApplet( String appletID ) - { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if( stub == null ) - { - Main.debug( "could not init and show applet: " + appletID ); - } - else - { - stub.initApplet(); - } - } - - public void destroyApplet( String appletID ) - { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - - if( stub == null ) - { - Main.debug( "could not destroy applet: " + appletID ); - } - else - { - //Main.debug( "stopping applet: " + appletID ); - stubs.remove( appletID ); - - stub.destroyApplet(); - } - } - - public void startApplet( String appletID ) - { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if( stub == null ) - { - Main.debug( "could not start applet: " + appletID ); - } - else - { - stub.startApplet(); - } - } - - public void stopApplet( String appletID ) - { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if( stub == null ) - { - Main.debug( "could not stop applet: " + appletID ); - } - else - { - stub.stopApplet(); - } - } - - public void destroy() - { - Enumeration e = stubs.elements(); - while ( e.hasMoreElements() ) - { - KJASAppletStub stub = (KJASAppletStub) e.nextElement(); - stub.destroyApplet(); - stub.loader.getJSReferencedObjects().clear(); - } - - stubs.clear(); - active = false; - } - - /*************************************************************************** - **** AppletContext interface - ***************************************************************************/ - public Applet getApplet( String appletName ) - { - if( active ) - { - Enumeration e = stubs.elements(); - while( e.hasMoreElements() ) - { - KJASAppletStub stub = (KJASAppletStub) e.nextElement(); - - if( stub.getAppletName().equals( appletName ) ) - return stub.getApplet(); - } - } - - return null; - } - - public Enumeration getApplets() - { - if( active ) - { - Vector v = new Vector(); - Enumeration e = stubs.elements(); - while( e.hasMoreElements() ) - { - KJASAppletStub stub = (KJASAppletStub) e.nextElement(); - v.add( stub.getApplet() ); - } - - return v.elements(); - } - - return null; - } - - public AudioClip getAudioClip( URL url ) - { - Main.debug( "getAudioClip, url = " + url ); - //AudioClip clip = java.applet.Applet.newAudioClip(url); - AudioClip clip = new KJASAudioClip(url); - Main.debug( "got AudioClip " + clip); - return clip; - // return new KJASSoundPlayer( myID, url ); - } - - public void addImage( String url, byte[] data ) - { - Main.debug( "addImage for url = " + url ); - images.put( url, data ); - if (Main.cacheImages) { - pendingImages.remove(url); - } - } - - public Image getImage( URL url ) - { - if( active && url != null ) - { - // directly load images using JVM - if (true) { - // Main.info("Getting image using ClassLoader:" + url); - if (loader != null) { - url = loader.findResource(url.toString()); - //Main.debug("Resulting URL:" + url); - } - Toolkit kit = Toolkit.getDefaultToolkit(); - Image img = kit.createImage(url); - return img; - } - - //check with the Web Server - String str_url = url.toString(); - Main.debug( "getImage, url = " + str_url ); - if (Main.cacheImages && images.containsKey(str_url)) { - Main.debug("Cached: url=" + str_url); - } - else - { - if (Main.cacheImages) { - if (!pendingImages.contains(str_url)) { - Main.protocol.sendGetURLDataCmd( myID, str_url ); - pendingImages.add(str_url); - } - } else { - Main.protocol.sendGetURLDataCmd( myID, str_url ); - } - while( !images.containsKey( str_url ) && active ) - { - try { Thread.sleep( 200 ); } - catch( InterruptedException e ){} - } - } - if( images.containsKey( str_url ) ) - { - byte[] data = (byte[]) images.get( str_url ); - if( data.length > 0 ) - { - Toolkit kit = Toolkit.getDefaultToolkit(); - return kit.createImage( data ); - } else return null; - } - } - - return null; - } - - public void showDocument( URL url ) - { - //Main.debug( "showDocument, url = " + url ); - - if( active && (url != null) ) - { - Main.protocol.sendShowDocumentCmd( myID, url.toString() ); - } - } - - public void showDocument( URL url, String targetFrame ) - { - //Main.debug( "showDocument, url = " + url + " targetFrame = " + targetFrame ); - - if( active && (url != null) && (targetFrame != null) ) - { - Main.protocol.sendShowDocumentCmd( myID, url.toString(), targetFrame ); - } - } - - public void showStatus( String message ) - { - if( active && (message != null) ) - { - Main.protocol.sendShowStatusCmd( myID, message ); - } - } - public boolean evaluateJavaScript(String script, String appletID, JSObject jso) { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if( active && stub != null && stub.isLoaded ()) { - if( jso != null ) { - synchronized (jsobjects) { - jsobjects.push(jso); - } - } - int [] types = { KJASAppletStub.JString }; - String [] arglist = { script }; - Main.protocol.sendJavaScriptEventCmd(myID, appletID, 0, "eval", types, arglist); - return true; - } - Main.debug( "evaluateJavaScript failure, context active:" + active + " stub:" + stub); - return false; - } - - public boolean getMember(String appletID, int callid, int objid, String name) - { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if (stub == null || !stub.isLoaded()) - return false; - return stub.getMember(callid, objid, name); - } - - public boolean putMember(String appletID, int callid, int objid, String name, String value) - { - if (name.equals("__lc_ret")) { - // special case; return value of JS script evaluation - Main.debug("putValue: applet " + name + "=" + value); - JSObject jso = null; - synchronized (jsobjects) { - if (!jsobjects.empty()) - jso = (JSObject) jsobjects.pop(); - } - if (jso == null) - return false; - jso.returnvalue = value; - try { - jso.thread.interrupt(); - } catch (SecurityException ex) {} - Main.protocol.sendPutMember( myID, callid, true ); - } - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if (stub == null || !stub.isLoaded()) - return false; - return stub.putMember(callid, objid, name, value); - } - - public Object getJSReferencedObject(Applet applet, int objid) - { - return ((KJASAppletClassLoader)(applet.getClass().getClassLoader())).getJSReferencedObjects().get(new Integer(objid)); - } - boolean callMember(String appletID, int cid, int oid, String n, java.util.List args) - { - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if (stub == null || !stub.isLoaded()) - return false; - return stub.callMember( cid, oid, n, args); - } - public void derefObject(String appletID, int objid) { - if (objid == 0) - return; // that's an applet - KJASAppletStub stub = (KJASAppletStub) stubs.get( appletID ); - if (stub == null) - return; - Hashtable jsRefs = stub.loader.getJSReferencedObjects(); - if (jsRefs.remove(new Integer(objid)) == null) - Main.debug("couldn't remove referenced object"); - } - - public void setStream(String key, InputStream stream) throws IOException { - Main.debug("setStream, key = " + key); - streams.put(key, stream); - } - public InputStream getStream(String key){ - Main.debug("getStream, key = " + key); - return (InputStream) streams.get(key); - } - public Iterator getStreamKeys() { - Main.debug("getStreamKeys"); - return streams.keySet().iterator(); - } - - -} diff --git a/khtml/java/org/kde/kjas/server/KJASAppletPanel.java b/khtml/java/org/kde/kjas/server/KJASAppletPanel.java deleted file mode 100644 index d7acbdaf9..000000000 --- a/khtml/java/org/kde/kjas/server/KJASAppletPanel.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.kde.kjas.server; - -import java.applet.Applet; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Image; -import java.awt.LayoutManager; -import java.awt.Panel; -import java.net.URL; - -/** - * @author till - * - * A panel which embeds the applet and shows some - * information during class loading. - */ -public class KJASAppletPanel extends javax.swing.JPanel implements StatusListener { - private final static int LOADING = 1; - private final static int RUNNING = 2; - private final static int FAILED = 3; - - private Image load_img = null; - private Image fail_img = null; - private int status = LOADING; - private Font font; - private String msg = "Loading Applet..."; - - /** - * Constructor for KJASAppletPanel. - */ - public KJASAppletPanel() { - super(new BorderLayout()); - font = new Font("SansSerif", Font.PLAIN, 10); - URL url = - getClass().getClassLoader().getResource("images/animbean.gif"); - load_img = getToolkit().createImage(url); - //setBackground(Color.white); - } - - void setApplet(Applet applet) { - add("Center", applet); - validate(); - } - - public void showStatus(String msg) { - this.msg = msg; - if (status != RUNNING) - repaint(); - } - - public void paint(Graphics g) { - super.paint(g); - if (status == RUNNING) - return; - Image img = (status == LOADING ? load_img : fail_img); - int x = getWidth() / 2; - int y = getHeight() / 2; - if (img != null) { - //synchronized (img) { - int w = img.getWidth(this); - int h = img.getHeight(this); - int imgx = x - w / 2; - int imgy = y - h / 2; - //g.setClip(imgx, imgy, w, h); - g.drawImage(img, imgx, imgy, this); - y += img.getHeight(this) / 2; - //} - } - if (msg != null) { - //synchronized(msg) { - g.setFont(font); - FontMetrics m = g.getFontMetrics(); - int h = m.getHeight(); - int w = m.stringWidth(msg); - int msgx = x - w / 2; - int msgy = y + h; - //g.setClip(0, y, getWidth(), h); - g.drawString(msg, msgx, msgy); - //} - } - } - void showFailed() { - URL url = - getClass().getClassLoader().getResource("images/brokenbean.gif"); - fail_img = getToolkit().createImage(url); - status = FAILED; - msg = "Applet Failed."; - repaint(); - } - - void showFailed(String message) { - showFailed(); - showStatus(message); - } - - public void stopAnimation() { - status = RUNNING; - } - - public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) - { - if (img != null && img == load_img && status != LOADING) { - img.flush(); - load_img = null; - Main.debug("flushing image"); - return false; - } - return super.imageUpdate(img, flags, x, y, w, h); - } -} diff --git a/khtml/java/org/kde/kjas/server/KJASAppletStub.java b/khtml/java/org/kde/kjas/server/KJASAppletStub.java deleted file mode 100644 index e090183d7..000000000 --- a/khtml/java/org/kde/kjas/server/KJASAppletStub.java +++ /dev/null @@ -1,807 +0,0 @@ -package org.kde.kjas.server; - -import java.applet.*; -import java.util.*; -import java.net.*; -import java.awt.*; -import java.awt.event.*; -import javax.swing.JFrame; -import java.security.PrivilegedAction; -import java.security.AccessController; -import java.security.AccessControlContext; -import java.security.ProtectionDomain; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -/** - * The stub used by Applets to communicate with their environment. - * - */ -public final class KJASAppletStub - implements AppletStub -{ - private KJASAppletContext context; // The containing context. - private Hashtable params; // Maps parameter names to values - private URL codeBase; // The URL directory where files are - private URL docBase; // The document that referenced the applet - private boolean active; // Is the applet active? - private String appletName; // The name of this applet instance - private String appletID; // The id of this applet- for use in callbacks - private Dimension appletSize; - private String windowName; - private String className; - private Class appletClass; - private JFrame frame; - - /** - * out of bounds applet state :-), perform an action - */ - public static final int ACTION = -1; - /** - * applet state unknown - */ - public static final int UNKNOWN = 0; - /** - * the applet class has been loaded - */ - public static final int CLASS_LOADED = 1; - /** - * the applet has been instanciated - */ - public static final int INSTANCIATED = 2; - /** - * the applet has been initialized - */ - public static final int INITIALIZED = 3; - /** - * the applet has been started - */ - public static final int STARTED = 4; - /** - * the applet has been stopped - */ - public static final int STOPPED = 5; - /** - * the applet has been destroyed - */ - public static final int DESTROYED = 6; - /** - * request for termination of the applet thread - */ - private static final int TERMINATE = 7; - /** - * like TERMINATE, an end-point state - */ - private static final int FAILED = 8; - - - //private KJASAppletClassLoader loader; - KJASAppletClassLoader loader; - private KJASAppletPanel panel; - private Applet app; - KJASAppletStub me; - - /** - * Interface for so called LiveConnect actions, put-, get- and callMember - */ - // keep this in sync with KParts::LiveConnectExtension::Type - private final static int JError = -1; - private final static int JVoid = 0; - private final static int JBoolean = 1; - private final static int JFunction = 2; - private final static int JNumber = 3; - private final static int JObject = 4; - final static int JString = 5; - - interface AppletAction { - void apply(); - void fail(); - } - - private class RunThread extends Thread { - private int request_state = CLASS_LOADED; - private int current_state = UNKNOWN; - private Vector actions = new Vector(); - private AccessControlContext acc = null; - - RunThread() { - super("KJAS-AppletStub-" + appletID + "-" + appletName); - setContextClassLoader(loader); - } - /** - * Ask applet to go to the next state - */ - synchronized void requestState(int nstate) { - if (nstate > current_state) { - request_state = nstate; - notifyAll(); - } - } - synchronized void requestAction(AppletAction action) { - actions.add(action); - notifyAll(); - } - /** - * Get the asked state - */ - synchronized private int getRequestState() { - while (request_state == current_state) { - if (!actions.isEmpty()) { - if (current_state >= INITIALIZED && current_state < STOPPED) - return ACTION; - else { - AppletAction action = (AppletAction) actions.remove(0); - action.fail(); - } - } else { - try { - wait (); - } catch(InterruptedException ie) { - } - } - } - if (request_state == DESTROYED && current_state == STARTED) - return current_state + 1; // make sure we don't skip stop() - return request_state; - } - /** - * Get the current state - */ - synchronized int getAppletState() { - return current_state; - } - /** - * Set the current state - */ - synchronized private void setState(int nstate) { - current_state = nstate; - } - /** - * Put applet in asked state - * Note, kjavaapletviewer asks for create/start/stop/destroy, the - * missing states instance/init/terminate, we do automatically - */ - private void doState(int nstate) throws ClassNotFoundException, IllegalAccessException, InstantiationException { - switch (nstate) { - case CLASS_LOADED: - appletClass = loader.loadClass( className ); - requestState(INSTANCIATED); - break; - case INSTANCIATED: { - Object object = null; - try { - object = appletClass.newInstance(); - app = (Applet) object; - } - catch ( ClassCastException e ) { - if ( object != null && object instanceof java.awt.Component) { - app = new Applet(); - app.setLayout(new BorderLayout()); - app.add( (Component) object, BorderLayout.CENTER); - } else - throw e; - } - acc = new AccessControlContext(new ProtectionDomain[] {app.getClass().getProtectionDomain()}); - requestState(INITIALIZED); - break; - } - case INITIALIZED: - app.setStub( me ); - app.setVisible(false); - panel.setApplet( app ); - if (appletSize.getWidth() > 0) - app.setBounds( 0, 0, appletSize.width, appletSize.height ); - else - app.setBounds( 0, 0, panel.getSize().width, panel.getSize().height ); - app.init(); - loader.removeStatusListener(panel); - // stop the loading... animation - panel.stopAnimation(); - app.setVisible(true); - break; - case STARTED: - active = true; - app.start(); - frame.validate(); - app.repaint(); - break; - case STOPPED: - active = false; - app.stop(); - if (Main.java_version > 1.399) { - // kill the windowClosing listener(s) - WindowListener[] l = frame.getWindowListeners(); - for (int i = 0; l != null && i < l.length; i++) - frame.removeWindowListener(l[i]); - } - frame.setVisible(false); - break; - case DESTROYED: - if (app != null) - app.destroy(); - frame.dispose(); - app = null; - requestState(TERMINATE); - break; - default: - return; - } - } - /** - * RunThread run(), loop until state is TERMINATE - */ - public void run() { - while (true) { - int nstate = getRequestState(); - if (nstate >= TERMINATE) - return; - if (nstate == ACTION) { - AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - AppletAction action = (AppletAction) actions.remove(0); - try { - action.apply(); - } catch (Exception ex) { - Main.debug("Error during action " + ex); - action.fail(); - } - return null; - } - }, - acc); - } else { // move to nstate - try { - doState(nstate); - } catch (Exception ex) { - Main.kjas_err("Error during state " + nstate, ex); - if (nstate < INITIALIZED) { - setState(FAILED); - setFailed(ex.toString()); - return; - } - } catch (Throwable tr) { - setState(FAILED); - setFailed(tr.toString()); - return; - } - setState(nstate); - stateChange(nstate); - } - } - } - } - private RunThread runThread = null; - - /** - * Create an AppletStub for the specified applet. The stub will be in - * the specified context and will automatically attach itself to the - * passed applet. - */ - public KJASAppletStub( KJASAppletContext _context, String _appletID, - URL _codeBase, URL _docBase, - String _appletName, String _className, - Dimension _appletSize, Hashtable _params, - String _windowName, KJASAppletClassLoader _loader ) - { - context = _context; - appletID = _appletID; - codeBase = _codeBase; - docBase = _docBase; - active = false; - appletName = _appletName; - className = _className.replace( '/', '.' ); - appletSize = _appletSize; - params = _params; - windowName = _windowName; - loader = _loader; - - String fixedClassName = _className; - if (_className.endsWith(".class") || _className.endsWith(".CLASS")) - { - fixedClassName = _className.substring(0, _className.length()-6); - } - else if (_className.endsWith(".java")|| _className.endsWith(".JAVA")) - { - fixedClassName = _className.substring(0, _className.length()-5); - } - className = fixedClassName.replace('/', '.'); - - appletClass = null; - me = this; - - - } - - private void stateChange(int newState) { - Main.protocol.sendAppletStateNotification( - context.getID(), - appletID, - newState); - } - - private void setFailed(String why) { - loader.removeStatusListener(panel); - panel.stopAnimation(); - panel.showFailed(); - Main.protocol.sendAppletFailed(context.getID(), appletID, why); - } - - void createApplet() { - panel = new KJASAppletPanel(); - frame = new JFrame(windowName); - // under certain circumstances, it may happen that the - // applet is not embedded but shown in a separate window. - // think of konqueror running under fvwm or gnome. - // than, the user should have the ability to close the window. - - frame.addWindowListener - ( - new WindowAdapter() { - public void windowClosing(WindowEvent e) { - me.destroyApplet(); - } - } - ); - frame.getContentPane().add( panel, BorderLayout.CENTER ); - try { - if (Main.java_version > 1.399) - frame.setUndecorated(true); - } catch(java.awt.IllegalComponentStateException e) { - // This happens with gcj 4.0.1, ignore for now... - } - frame.setLocation( 0, 0 ); - frame.pack(); - // resize frame for j2sdk1.5beta1.. - if (appletSize.getWidth() > 0) - frame.setBounds( 0, 0, appletSize.width, appletSize.height ); - else - frame.setBounds( 0, 0, 50, 50 ); - frame.setVisible(true); - loader.addStatusListener(panel); - runThread = new RunThread(); - runThread.start(); - } - - /** - * starts the applet managed by this stub by calling the applets start() method. - * Also marks this stub as active. - * @see java.applet.Applet#start() - * @see java.applet.AppletStub#isActive() - * - */ - void startApplet() - { - runThread.requestState(STARTED); - } - - /** - * stops the applet managed by this stub by calling the applets stop() method. - * Also marks this stub as inactive. - * @see java.applet.Applet#stop() - * @see java.applet.AppletStub#isActive() - * - */ - void stopApplet() - { - runThread.requestState(STOPPED); - } - - /** - * initialize the applet managed by this stub by calling the applets init() method. - * @see java.applet.Applet#init() - */ - void initApplet() - { - runThread.requestState(INITIALIZED); - } - - /** - * destroys the applet managed by this stub by calling the applets destroy() method. - * Also marks the the applet as inactive. - * @see java.applet.Applet#init() - */ - synchronized void destroyApplet() - { - runThread.requestState(DESTROYED); - } - - static void waitForAppletThreads() - { - Thread [] ts = new Thread[Thread.activeCount() + 5]; - int len = Thread.enumerate(ts); - for (int i = 0; i < len; i++) { - try { - if (ts[i].getName() != null && - ts[i].getName().startsWith("KJAS-AppletStub-")) { - try { - ((RunThread) ts[i]).requestState(TERMINATE); - ts[i].join(10000); - } catch (InterruptedException ie) {} - } - } catch (Exception e) {} - } - } - - /** - * get the Applet managed by this stub. - * @return the Applet or null if the applet could not be loaded - * or instanciated. - */ - Applet getApplet() - { - if (runThread != null && runThread.getAppletState() > CLASS_LOADED) - return app; - return null; - } - - /** - * get a parameter value given in the <APPLET> tag - * @param name the name of the parameter - * @return the value or null if no parameter with this name exists. - */ - - public String getParameter( String name ) - { - return (String) params.get( name.toUpperCase() ); - } - - /** - * implements the isActive method of the AppletStub interface. - * @return if the applet managed by this stub is currently active. - * @see java.applet.AppletStub#isActive() - */ - public boolean isActive() - { - return active; - } - - /** - * determines if the applet has been loaded and instanciated - * and can hence be used. - * @return true if the applet has been completely loaded. - */ - boolean isLoaded() { - if (runThread == null) - return false; - int state = runThread.getAppletState(); - return (state >= INSTANCIATED && state < DESTROYED); - } - - public void appletResize( int width, int height ) - { - if( active ) - { - if ( (width >= 0) && (height >= 0)) - { - Main.debug( "Applet #" + appletID + ": appletResize to : (" + width + ", " + height + ")" ); - Main.protocol.sendResizeAppletCmd( context.getID(), appletID, width, height ); - appletSize = new Dimension( width, height ); - //pack(); - } - } - } - - /** - * converts Object <b>arg</b> into an object of class <b>cl</b>. - * @param arg Object to convert - * @param cl Destination class - * @return An Object of the specified class with the value specified - * in <b>arg</b> - */ - private static final Object cast(Object arg, Class cl) throws NumberFormatException { - Object ret = arg; - if (arg == null) { - ret = null; - } - else if (cl.isAssignableFrom(arg.getClass())) { - return arg; - } - else if (arg instanceof String) { - String s = (String)arg; - Main.debug("Argument String: \"" + s + "\""); - if (cl == Boolean.TYPE || cl == Boolean.class) { - ret = new Boolean(s); - } else if (cl == Integer.TYPE || cl == Integer.class) { - ret = new Integer(s); - } else if (cl == Long.TYPE || cl == Long.class) { - ret = new Long(s); - } else if (cl == Float.TYPE || cl == Float.class) { - ret = new Float(s); - } else if (cl == Double.TYPE || cl == Double.class) { - ret = new Double(s); - } else if (cl == Short.TYPE || cl == Short.class) { - ret = new Short(s); - } else if (cl == Byte.TYPE || cl == Byte.class) { - ret = new Byte(s); - } else if (cl == Character.TYPE || cl == Character.class) { - ret = new Character(s.charAt(0)); - } - } - return ret; - } - private Method findMethod(Class c, String name, Class [] argcls) { - try { - Method[] methods = c.getMethods(); - for (int i = 0; i < methods.length; i++) { - Method m = methods[i]; - if (m.getName().equals(name)) { - Main.debug("Candidate: " + m); - Class [] parameterTypes = m.getParameterTypes(); - if (argcls == null) { - if (parameterTypes.length == 0) { - return m; - } - } else { - if (argcls.length == parameterTypes.length) { - for (int j = 0; j < argcls.length; j++) { - // Main.debug("Parameter " + j + " " + parameterTypes[j]); - argcls[j] = parameterTypes[j]; - } - return m; - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - private int[] getJSTypeValue(Hashtable jsRefs, Object obj, int objid, StringBuffer value) { - String val = obj.toString(); - int[] rettype = { JError, objid }; - String type = obj.getClass().getName(); - if (type.equals("boolean") || type.equals("java.lang.Boolean")) - rettype[0] = JBoolean; - else if (type.equals("int") || type.equals("long") || - type.equals("float") || type.equals("double") || - type.equals("byte") || obj instanceof java.lang.Number) - rettype[0] = JNumber; - else if (type.equals("java.lang.String")) - rettype[0] = JString; - else if (!type.startsWith("org.kde.kjas.server") && - !(obj instanceof java.lang.Class && - ((Class)obj).getName().startsWith("org.kde.kjas.server"))) { - rettype[0] = JObject; - rettype[1] = obj.hashCode(); - jsRefs.put(new Integer(rettype[1]), obj); - } - value.insert(0, val); - return rettype; - } - private class PutAction implements AppletAction { - int call_id; - int objid; - String name; - String value; - PutAction(int cid, int oid, String n, String v) { - call_id = cid; - objid = oid; - name = n; - value = v; - } - public void apply() { - Hashtable jsRefs = loader.getJSReferencedObjects(); - Object o = objid==0 ? getApplet() : jsRefs.get(new Integer(objid)); - if (o == null) { - Main.debug("Error in putValue: object " + objid + " not found"); - fail(); - return; - } - Field f; - try { - f = o.getClass().getField(name); - } catch (Exception e) { - fail(); - return; - } - if (f == null) { - Main.debug("Error in putValue: " + name + " not found"); - fail(); - return; - } - try { - String type = f.getType().getName(); - Main.debug("putValue: (" + type + ")" + name + "=" + value); - if (type.equals("boolean")) - f.setBoolean(o, Boolean.getBoolean(value)); - else if (type.equals("java.lang.Boolean")) - f.set(o, Boolean.valueOf(value)); - else if (type.equals("int")) - f.setInt(o, Integer.parseInt(value)); - else if (type.equals("java.lang.Integer")) - f.set(o, Integer.valueOf(value)); - else if (type.equals("byte")) - f.setByte(o, Byte.parseByte(value)); - else if (type.equals("java.lang.Byte")) - f.set(o, Byte.valueOf(value)); - else if (type.equals("char")) - f.setChar(o, value.charAt(0)); - else if (type.equals("java.lang.Character")) - f.set(o, new Character(value.charAt(0))); - else if (type.equals("double")) - f.setDouble(o, Double.parseDouble(value)); - else if (type.equals("java.lang.Double")) - f.set(o, Double.valueOf(value)); - else if (type.equals("float")) - f.setFloat(o, Float.parseFloat(value)); - else if (type.equals("java.lang.Float")) - f.set(o, Float.valueOf(value)); - else if (type.equals("long")) - f.setLong(o, Long.parseLong(value)); - else if (type.equals("java.lang.Long")) - f.set(o, Long.valueOf(value)); - else if (type.equals("short")) - f.setShort(o, Short.parseShort(value)); - else if (type.equals("java.lang.Short")) - f.set(o, Short.valueOf(value)); - else if (type.equals("java.lang.String")) - f.set(o, value); - else { - Main.debug("Error putValue: unsupported type: " + type); - fail(); - return; - } - } catch (Exception e) { - Main.debug("Exception in putValue: " + e.getMessage()); - fail(); - return; - } - Main.protocol.sendPutMember( context.getID(), call_id, true ); - } - public void fail() { - Main.protocol.sendPutMember( context.getID(), call_id, false ); - } - } - private class GetAction implements AppletAction { - int call_id; - int objid; - String name; - GetAction(int cid, int oid, String n) { - call_id = cid; - objid = oid; - name = n; - } - public void apply() { - Main.debug("getMember: " + name); - StringBuffer value = new StringBuffer(); - int ret[] = { JError, objid }; - Hashtable jsRefs = loader.getJSReferencedObjects(); - Object o = objid==0 ? getApplet() : jsRefs.get(new Integer(objid)); - if (o == null) { - fail(); - return; - } - Class c = o.getClass(); - try { - Field field = c.getField(name); - ret = getJSTypeValue(jsRefs, field.get(o), objid, value); - } catch (Exception ex) { - Method [] m = c.getMethods(); - for (int i = 0; i < m.length; i++) - if (m[i].getName().equals(name)) { - ret[0] = JFunction; - break; - } - } - Main.protocol.sendMemberValue(context.getID(), KJASProtocolHandler.GetMember, call_id, ret[0], ret[1], value.toString()); - } - public void fail() { - Main.protocol.sendMemberValue(context.getID(), KJASProtocolHandler.GetMember, call_id, -1, 0, ""); - } - } - private class CallAction implements AppletAction { - int call_id; - int objid; - String name; - java.util.List args; - CallAction(int cid, int oid, String n, java.util.List a) { - call_id = cid; - objid = oid; - name = n; - args = a; - } - public void apply() { - StringBuffer value = new StringBuffer(); - Hashtable jsRefs = loader.getJSReferencedObjects(); - int [] ret = { JError, objid }; - Object o = objid==0 ? getApplet() : jsRefs.get(new Integer(objid)); - if (o == null) { - fail(); - return; - } - - try { - Main.debug("callMember: " + name); - Object obj; - Class c = o.getClass(); - String type; - Class [] argcls = new Class[args.size()]; - for (int i = 0; i < args.size(); i++) - argcls[i] = name.getClass(); // String for now, will be updated by findMethod - Method m = findMethod(c, (String) name, argcls); - Main.debug("Found Method: " + m); - if (m != null) { - Object [] argobj = new Object[args.size()]; - for (int i = 0; i < args.size(); i++) { - argobj[i] = cast(args.get(i), argcls[i]); - } - Object retval = m.invoke(o, argobj); - if (retval == null) - ret[0] = JVoid; - else - ret = getJSTypeValue(jsRefs, retval, objid, value); - } - } catch (Exception e) { - Main.debug("callMember threw exception: " + e.toString()); - } - Main.protocol.sendMemberValue(context.getID(), KJASProtocolHandler.CallMember, call_id, ret[0], ret[1], value.toString()); - } - public void fail() { - Main.protocol.sendMemberValue(context.getID(), KJASProtocolHandler.CallMember, call_id, -1, 0, ""); - } - } - boolean putMember(int callid, int objid, String name, String val) { - if (runThread == null) - return false; - runThread.requestAction( new PutAction( callid, objid, name, val) ); - return true; - } - boolean getMember(int cid, int oid, String name) { - if (runThread == null) - return false; - runThread.requestAction( new GetAction( cid, oid, name) ); - return true; - } - boolean callMember(int cid, int oid, String name, java.util.List args) { - if (runThread == null) - return false; - runThread.requestAction( new CallAction( cid, oid, name, args) ); - return true; - } - /************************************************************************* - ********************** AppletStub Interface ***************************** - *************************************************************************/ - /** - * implements the getAppletContext method of the AppletStub interface. - * @return the AppletContext to which this stub belongs. - * @see java.applet.AppletStub#getAppletContext() - */ - public AppletContext getAppletContext() - { - return context; - } - - /** - * implements the getCodeBase method of the AppletStub interface. - * @return the code base of the applet as given in the <APPLET> tag. - * @see java.applet.AppletStub#getCodeBase() - */ - public URL getCodeBase() - { - return codeBase; - } - - /** - * implements the getDocumentBase method of the AppletStub interface. - * @return the code base of the applet as given in the - * <APPLET> tag or determined by the containing page. - * @see java.applet.AppletStub#getDocumentBase() - */ - public URL getDocumentBase() - { - return docBase; - } - - /** - * get the applet's name - * @return the name of the applet as given in the - * <APPLET> tag or determined by the <em>code</em> parameter. - */ - public String getAppletName() - { - return appletName; - } - -} diff --git a/khtml/java/org/kde/kjas/server/KJASAudioClip.java b/khtml/java/org/kde/kjas/server/KJASAudioClip.java deleted file mode 100644 index 3a40cf6e0..000000000 --- a/khtml/java/org/kde/kjas/server/KJASAudioClip.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.kde.kjas.server; - -import java.applet.*; -import java.net.*; -import java.util.*; -/** -* Background Audioclip Loader and Player. -* @author Till Krech (till@snafu.de) -*/ -public class KJASAudioClip implements AudioClip -{ - private AudioClip theClip; - private final static int PLAYING = 1; - private final static int LOOPING = 2; - private final static int STOPPED = 3; - private int state; - private static Hashtable cache = new Hashtable(); - - /** - * creates a new Audioclip. - * The AudioClip is loaded in background. The Constructor returns immediately. - */ - public KJASAudioClip(URL url) - { - state = STOPPED; - theClip = (AudioClip)cache.get(url); - if (theClip == null) { - final URL theUrl = url; - - new Thread - ( - new Runnable() { - public void run() { - theClip = java.applet.Applet.newAudioClip(theUrl); - cache.put(theUrl, theClip); - if (state == LOOPING) { - theClip.loop(); - } else if (state == PLAYING) { - theClip.play(); - } - } - }, "AudioClipLoader " + url.getFile() - ).start(); - } - } - - /** - * play continously when the clip is loaded - */ - public void loop() - { - state = LOOPING; - if (theClip != null) { - new Thread - ( - new Runnable() { - public void run() { - theClip.loop(); - } - }, "AudioClipLooper " - ).start(); - } - } - - /** - * play when the clip is loaded - */ - public void play() - { - state = PLAYING; - if (theClip != null) { - new Thread - ( - new Runnable() { - public void run() { - theClip.play(); - } - }, "AudioClipPlayer " - ).start(); - } - } - - /** - * stop the clip - */ - public void stop() - { - state = STOPPED; - if (theClip != null) { - theClip.stop(); - } - } - - public void finalize() { - stop(); - } -} - diff --git a/khtml/java/org/kde/kjas/server/KJASBrokenClassFixer.java b/khtml/java/org/kde/kjas/server/KJASBrokenClassFixer.java deleted file mode 100644 index aab1be4af..000000000 --- a/khtml/java/org/kde/kjas/server/KJASBrokenClassFixer.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.kde.kjas.server; -import java.lang.reflect.*; -import java.net.URLClassLoader; -import java.net.URL; -/** -* wrapper for the javaplugin.jar Broken11ClassFixer. -* Uses the reflection api to wrap the class <i>sun.plugin.security.Broken11ClassFixer</i> -* from the javaplugin.jar archive which can be found in the jre/lib directory. -*/ -public class KJASBrokenClassFixer { - private static Class fixerClass = null; - private static Method _process; - private static Method _getProcessedData; - private static Method _getProcessedDataOffset; - private static Method _getProcessedDataLength; - private static boolean initialized = false; - private static final String fixerClassName = "sun.plugin.security.Broken11ClassFixer"; - private Object fixer = null; - private byte [] bytes; - private int offset; - private int length; - - /** - * creates a new KJASBrokenClassFixer. - * If it is the first one to be created, it tries to load the class - * <i>sun.plugin.security.Broken11ClassFixer</i> from the jar file - * <i>lib/javaplugin.jar</i> in the java jre directory. - */ - public KJASBrokenClassFixer() { - init(); - if (fixerClass != null) { - try { - fixer = fixerClass.newInstance(); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - - /** - * loads the class <i>sun.plugin.security.Broken11ClassFixer</i>, - * initializes the methods, ... - */ - private synchronized void init() { - if (initialized) { - return; - } - try { - URL [] urls = { new URL( - "file", "", 0, - System.getProperty("java.home") - + System.getProperty("file.separator") - + "lib" - + System.getProperty("file.separator") - + "javaplugin.jar"), new URL( - "file", "", 0, - System.getProperty("java.home") - + System.getProperty("file.separator") - + "lib" - + System.getProperty("file.separator") - + "plugin.jar") - }; - URLClassLoader loader = new URLClassLoader(urls); - fixerClass = Class.forName(fixerClassName, true, loader); - Main.debug("Loaded " + fixerClass); - final Class [] parameterTypes = { - (new byte[1]).getClass(), - Integer.TYPE, - Integer.TYPE - }; - final Class [] noParameter = new Class[0]; - _process = fixerClass.getMethod("process", parameterTypes); - _getProcessedData = fixerClass.getMethod("getProcessedData", noParameter); - _getProcessedDataOffset = fixerClass.getMethod("getProcessedDataOffset", noParameter); - _getProcessedDataLength = fixerClass.getMethod("getProcessedDataLength", noParameter); - } catch (Throwable e) { - e.printStackTrace(); - } finally { - initialized = true; - } - } - /** - * scan the broken bytes and create new ones. - * If the wrapped class could not be loaded or - * no instance of Broken11ClassFixer could be instantiated, - * this is a noop and later calls to getProcessedData() etc. - * will return the original data passed as arguments in this - * call. - */ - public boolean process(byte [] b, int off, int len) { - if (fixer != null) { - try { - Object [] args = new Object[3]; - args[0] = b; - args[1] = new Integer(off); - args[2] = new Integer(len); - Object [] none = new Object[0]; - - _process.invoke(fixer, args); - this.bytes = (byte[])_getProcessedData.invoke(fixer, none); - this.offset = ((Integer)_getProcessedDataOffset.invoke(fixer, none)).intValue(); - this.length = ((Integer)_getProcessedDataLength.invoke(fixer, none)).intValue(); - return true; - } catch (Throwable e) { - } - } - this.bytes = b; - this.offset = off; - this.length = len; - return false; - } - - /** - * get the offset in the processed byte array - */ - public int getProcessedDataOffset() { - return offset; - } - /** - * get the length of the processed data - */ - public int getProcessedDataLength() { - return length; - } - /** - * get the processed (fixed) data - */ - public byte [] getProcessedData() { - return bytes; - } - -} diff --git a/khtml/java/org/kde/kjas/server/KJASConsole.java b/khtml/java/org/kde/kjas/server/KJASConsole.java deleted file mode 100644 index 51498b59b..000000000 --- a/khtml/java/org/kde/kjas/server/KJASConsole.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.kde.kjas.server; - -import java.awt.*; -import java.awt.event.*; -import java.io.*; - -public class KJASConsole - extends Frame - implements Console -{ - private TextArea txt; - - public KJASConsole() - { - super("Konqueror Java Console"); - - txt = new TextArea(); - txt.setEditable(false); - txt.setBackground(Color.white); - txt.setForeground(Color.black); - - Panel main = new Panel(new BorderLayout()); - Panel btns = new Panel(new BorderLayout()); - - Button clear = new Button("Clear"); - Button close = new Button("Close"); - - btns.add(clear, "West"); - btns.add(close, "East"); - - main.add(txt, "Center"); - main.add(btns, "South"); - - add( main ); - - clear.addActionListener - ( - new ActionListener() { - public void actionPerformed(ActionEvent e) { - txt.setText(""); - } - } - ); - - close.addActionListener - ( - new ActionListener() { - public void actionPerformed(ActionEvent e) { - setVisible(false); - } - } - ); - - addWindowListener - ( - new WindowAdapter() { - public void windowClosing(WindowEvent e) { - setVisible(false); - } - } - ); - - setSize(500, 300); - - PrintStream st = new PrintStream( new KJASConsoleStream(this) ); - System.setOut(st); - System.setErr(st); - - System.out.println( "Java VM version: " + - System.getProperty("java.version") ); - System.out.println( "Java VM vendor: " + - System.getProperty("java.vendor") ); - } - - public void clear() { - txt.setText(""); - } - - public void append(String msg) { - if (msg == null) { - return; - } - int length = msg.length(); - synchronized(txt) { - //get the caret position, and then get the new position - int old_pos = txt.getCaretPosition(); - txt.append(msg); - txt.setCaretPosition( old_pos + length ); - } - } -} - - diff --git a/khtml/java/org/kde/kjas/server/KJASConsoleStream.java b/khtml/java/org/kde/kjas/server/KJASConsoleStream.java deleted file mode 100644 index 2c1152ed4..000000000 --- a/khtml/java/org/kde/kjas/server/KJASConsoleStream.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.kde.kjas.server; -import java.io.*; - -class KJASConsoleStream - extends OutputStream -{ - private Console console; - private FileOutputStream dbg_log; - - public KJASConsoleStream(Console console) - { - this.console = console; - - try - { - if( Main.log ) - { - dbg_log = new FileOutputStream( "/tmp/kjas.log"); - } - } - catch( FileNotFoundException e ) {} - } - - public void close() {} - public void flush() {} - public void write(byte[] b) {} - public void write(int a) {} - - // Should be enough for the console - public void write( byte[] bytes, int offset, int length ) - { - try // Just in case - { - String msg = new String( bytes, offset, length ); - console.append(msg); - if( Main.log && dbg_log != null ) - { - dbg_log.write( msg.getBytes() ); - dbg_log.flush(); - } - } - catch(Throwable t) {} - } -} - - diff --git a/khtml/java/org/kde/kjas/server/KJASProtocolHandler.java b/khtml/java/org/kde/kjas/server/KJASProtocolHandler.java deleted file mode 100644 index f8b50a91d..000000000 --- a/khtml/java/org/kde/kjas/server/KJASProtocolHandler.java +++ /dev/null @@ -1,900 +0,0 @@ -package org.kde.kjas.server; - -import java.io.*; -import java.util.*; -import java.awt.*; -import java.net.*; - -/** - * Encapsulates the KJAS protocol and manages the contexts - * - */ -public class KJASProtocolHandler -{ - // Command codes- always need to be synced up with - // what's in kjavaappletserver.cpp - private static final int CreateContextCode = 1; - private static final int DestroyContextCode = 2; - private static final int CreateAppletCode = 3; - private static final int DestroyAppletCode = 4; - private static final int StartAppletCode = 5; - private static final int StopAppletCode = 6; - private static final int InitAppletCode = 7; - private static final int ShowDocumentCode = 8; - private static final int ShowURLInFrameCode = 9; - private static final int ShowStatusCode = 10; - private static final int ResizeAppletCode = 11; - private static final int GetURLDataCode = 12; - private static final int URLDataCode = 13; - private static final int ShutdownServerCode = 14; - private static final int JavaScriptEvent = 15; - static final int GetMember = 16; - static final int CallMember = 17; - private static final int PutMember = 18; - private static final int DerefObject = 19; - - private static final int AudioClipPlayCode = 20; - private static final int AudioClipLoopCode = 21; - private static final int AudioClipStopCode = 22; - - private static final int AppletStateNotificationCode = 23; - private static final int AppletFailedCode = 24; - private static final int DataCommand = 25; - private static final int PutURLDataCode = 26; - private static final int PutDataCode = 27; - private static final int SecurityConfirmCode = 28; - private static final int ShowConsole = 29; - - //Holds contexts in contextID-context pairs - private Hashtable contexts; - - private PushbackInputStream commands; //Stream for reading in commands - private PrintStream signals; //Stream for writing out callbacks - - //used for parsing each command as it comes in - private int cmd_index; - private final static char sep = (char) 0; - - public KJASProtocolHandler( InputStream _commands, - OutputStream _signals ) - { - commands = new PushbackInputStream( _commands ); - signals = new PrintStream( _signals ); - contexts = new Hashtable(); - } - - public void commandLoop() - { - try - { - while( true ) - { - try - { - int cmd_length = readPaddedLength( 8 ); - Main.debug( "PH: cmd_length = " + cmd_length ); - - //We need to have this while loop since we're not guaranteed to get - //all the bytes we want back, especially with large jars - byte[] cmd_data = new byte[cmd_length]; - int total_read = 0; - while( total_read < cmd_length ) - { - int numread = commands.read( cmd_data, total_read, cmd_length-total_read ); - Main.debug( "PH: read in " + numread + " bytes for command" ); - total_read += numread; - } - - //parse the rest of the command and execute it - processCommand( cmd_data ); - } - catch( NumberFormatException e ) - { - Main.kjas_err( "Could not parse out message length", e ); - e.printStackTrace(); - System.exit( 1 ); - } - catch( Throwable t ) - { - Main.debug( "commandLoop caught a throwable, still going" ); - t.printStackTrace(); - } - } - } - catch( Exception i ) - { - Main.kjas_err( "commandLoop exited on exception: ", i ); - i.printStackTrace(); - System.exit( 1 ); - } - } - - public void processCommand( byte[] command ) - { - // Sanity checks - if ( command == null ) - return; - - //do all the parsing here and pass arguments as individual variables to the - //handler functions - int cmd_length = command.length; - cmd_index = 0; - - int cmd_code_value = (int) command[cmd_index++]; - if( cmd_code_value == CreateContextCode ) - { - //parse out contextID- 1 argument - String contextID = getArg( command ); - Main.debug( "createContext, id = " + contextID ); - - KJASAppletContext context = new KJASAppletContext( contextID ); - contexts.put( contextID, context ); - } else - if( cmd_code_value == DestroyContextCode ) - { - //parse out contextID- 1 argument - String contextID = getArg( command ); - Main.debug( "destroyContext, id = " + contextID ); - - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if( contexts != null ) - { - context.destroy(); - contexts.remove( contextID ); - } - } else - if( cmd_code_value == CreateAppletCode ) - { - //9 arguments- this order is important... - final String contextID = getArg( command ); - final String appletID = getArg( command ); - final String appletName = getArg( command ); - final String className = getArg( command ); - final String baseURL = getArg( command ); - final String username = getArg( command ); - final String password = getArg( command ); - final String authname = getArg( command ); - final String codeBase = getArg( command ); - final String archives = getArg( command ); - final String width = getArg( command ); - final String height = getArg( command ); - final String title = getArg( command ); - - //get the number of parameter pairs... - String str_params = getArg( command ); - int num_params = Integer.parseInt( str_params.trim() ); - final Hashtable params = new Hashtable(); - for( int i = 0; i < num_params; i++ ) - { - String name = getArg( command ); // note name is in uppercase - if( name == null ) - name = new String(); - - String value = getArg( command ); - if( value == null ) - value = new String(); - params.put( name, value ); - //Main.debug( "parameter, name = " + name + ", value = " + value ); - } - - Main.debug( "createApplet, context = " + contextID + ", applet = " + appletID ); - Main.debug( " name = " + appletName + ", classname = " + className ); - Main.debug( " baseURL = " + baseURL + ", codeBase = " + codeBase ); - Main.debug( " archives = " + archives + ", width = " + width + - ", height = " + height ); - - final KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if( context != null ) - { - context.createApplet( appletID, appletName, className, - baseURL, username, password, authname, - codeBase, archives, - width, height, title, params ); - } - - } else - if( cmd_code_value == DestroyAppletCode ) - { - //2 arguments - String contextID = getArg( command ); - String appletID = getArg( command ); - Main.debug( "destroyApplet, context = " + contextID + ", applet = " + appletID ); - - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if ( context != null ) - context.destroyApplet( appletID ); - } else - if( cmd_code_value == StartAppletCode ) - { - //2 arguments - String contextID = getArg( command ); - String appletID = getArg( command ); - Main.debug( "startApplet, context = " + contextID + ", applet = " + appletID ); - - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if ( context != null ) - context.startApplet( appletID ); - } else - if( cmd_code_value == StopAppletCode ) - { - //2 arguments - String contextID = getArg( command ); - String appletID = getArg( command ); - Main.debug( "stopApplet, context = " + contextID + ", applet = " + appletID ); - - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if ( context != null ) - context.stopApplet( appletID ); - } else - if( cmd_code_value == ShutdownServerCode ) - { - Main.debug( "shutDownServer received" ); - KJASAppletStub.waitForAppletThreads(); - System.exit( 1 ); - } - else - if( cmd_code_value == URLDataCode ) - { - - String id = getArg( command ); - String code = getArg( command ); - Main.debug( "KIO URLData received(" + id + ") code:" + code ); - - //rest of the command should be the data... - byte[] data = null; - if (cmd_length - cmd_index > 0) { - data = new byte[ cmd_length - cmd_index ]; - System.arraycopy( command, cmd_index, data, 0, data.length ); - } - KIOConnection.setData(id, Integer.parseInt(code), data); - } else - if (cmd_code_value == GetMember) - { - int ticketnr = Integer.parseInt( getArg( command ) ); - String contextID = getArg( command ); - String appletID = getArg( command ); - int objid = Integer.parseInt( getArg( command ) ); - String name = getArg( command ); - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if ( context == null || !context.getMember(appletID, ticketnr, objid, name)) - sendMemberValue(contextID, GetMember, ticketnr, -1, 0, ""); - } else - if (cmd_code_value == PutMember) - { - int ticketnr = Integer.parseInt( getArg( command ) ); - String contextID = getArg( command ); - String appletID = getArg( command ); - int objid = Integer.parseInt( getArg( command ) ); - String name = getArg( command ); - String value = getArg( command ); - boolean ret = false; - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if (context == null || !context.putMember(appletID, ticketnr, objid, name, value)) - sendPutMember(contextID, ticketnr, false); - } else - if (cmd_code_value == CallMember) - { - int ticketnr = Integer.parseInt( getArg( command ) ); - String contextID = getArg( command ); - String appletID = getArg( command ); - int objid = Integer.parseInt( getArg( command ) ); - String name = getArg( command ); - int arg_count = Integer.parseInt( getArg( command ) ); - java.util.List args = new java.util.Vector(); - try { // fix getArg - String param = getArg(command); - while (arg_count-- > 0) { - if (param == null) - param = new String(); - args.add(param); - param = getArg(command); - } - } catch (Exception e) {} - - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if ( context == null || !context.callMember(appletID, ticketnr, objid, name, args)) - Main.protocol.sendMemberValue(contextID, CallMember, ticketnr, -1, 0, ""); - } else - if (cmd_code_value == DerefObject) - { - String contextID = getArg( command ); - String appletID = getArg( command ); - String objid = getArg( command ); - KJASAppletContext context = (KJASAppletContext) contexts.get( contextID ); - if ( context != null ) - context.derefObject(appletID, Integer.parseInt(objid)); - Main.debug( "DerefObject " + objid); - } else - if (cmd_code_value == SecurityConfirmCode) - { - String id = getArg( command ); - String confirm = getArg( command ); - Thread t = (Thread) KJASSecurityManager.confirmRequests.get(id); - Main.debug( "SecurityConfirmCode " + id + " confirm:" + confirm ); - if (t != null) { - KJASSecurityManager.confirmRequests.put(id, confirm); - try { - t.interrupt(); - } catch (SecurityException se) {} - } - } else - if (cmd_code_value == ShowConsole) - { - Main.console.setVisible(true); - } - else - { - throw new IllegalArgumentException( "Unknown command code" ); - } - } - - /************************************************************** - ***** Methods for talking to the applet server ************** - **************************************************************/ - - /** - * sends get url request - */ - public void sendGetURLDataCmd( String jobid, String url ) - { - Main.debug( "sendGetURLCmd(" + jobid + ") url = " + url ); - //length = length of args plus 1 for code, 2 for seps and 1 for end - byte [] url_bytes = url.getBytes(); - int length = jobid.length() + url_bytes.length + 4; - byte [] bytes = new byte[ length + 8 ]; - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) GetURLDataCode; - bytes[index++] = sep; - - tmp_bytes = jobid.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( url_bytes, 0, bytes, index, url_bytes.length ); - index += url_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - /** - * sends command for get url request (stop/hold/resume) or put (stop) - */ - public void sendDataCmd( String id, int cmd ) - { - Main.debug( "sendDataCmd(" + id + ") command = " + cmd ); - byte [] cmd_bytes = String.valueOf( cmd ).getBytes(); - int length = id.length() + cmd_bytes.length + 4; - byte [] bytes = new byte[ length + 8 ]; - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) DataCommand; - bytes[index++] = sep; - - tmp_bytes = id.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( cmd_bytes, 0, bytes, index, cmd_bytes.length ); - index += cmd_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - /** - * sends put url request - */ - public void sendPutURLDataCmd( String jobid, String url ) - { - Main.debug( "sendPutURLCmd(" + jobid + ") url = " + url ); - //length = length of args plus 1 for code, 2 for seps and 1 for end - byte [] url_bytes = url.getBytes(); - int length = jobid.length() + url_bytes.length + 4; - byte [] bytes = new byte[ length + 8 ]; - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) PutURLDataCode; - bytes[index++] = sep; - - tmp_bytes = jobid.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( url_bytes, 0, bytes, index, url_bytes.length ); - index += url_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - /** - * sends put data - */ - public void sendPutData( String jobid, byte [] b, int off, int len ) - { - Main.debug( "sendPutData(" + jobid + ") len = " + len ); - //length = length of args plus 1 for code, 2 for seps and 1 for end - int length = jobid.length() + len + 4; - byte [] bytes = new byte[ length + 8 ]; - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) PutDataCode; - bytes[index++] = sep; - - tmp_bytes = jobid.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( b, off, bytes, index, len ); - index += len; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - /** - * sends notification about the state of the applet. - * @see org.kde.kjas.server.KJASAppletStub for valid states - */ - public void sendAppletStateNotification( String contextID, String appletID, int state ) - { - Main.debug( "sendAppletStateNotification, contextID = " + contextID + ", appletID = " + - appletID + ", state=" + state ); - - byte [] state_bytes = String.valueOf( state ).getBytes(); - - int length = contextID.length() + appletID.length() + state_bytes.length + 5; - byte [] bytes = new byte[ length + 8 ]; //for length of message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) AppletStateNotificationCode; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = appletID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( state_bytes, 0, bytes, index, state_bytes.length ); - index += state_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - /** - * sends notification about applet failure. - * This can happen in any state. - * @param contextID context ID of the applet's context - * @param appletID ID of the applet - * @param errorMessage any message - */ - public void sendAppletFailed ( String contextID, String appletID, String errorMessage) - { - Main.debug( "sendAppletFailed, contextID = " + contextID + ", appletID = " + - appletID + ", errorMessage=" + errorMessage ); - byte [] msg_bytes = errorMessage.getBytes(); - int length = contextID.length() + appletID.length() + msg_bytes.length + 5; - byte [] bytes = new byte[ length + 8 ]; //for length of message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) AppletFailedCode; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = appletID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( msg_bytes, 0, bytes, index, msg_bytes.length ); - index += msg_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - public void sendShowDocumentCmd( String loaderKey, String url ) - { - Main.debug( "sendShowDocumentCmd from context#" + loaderKey + " url = " + url ); - - //length = length of args + 2 for seps + 1 for end + 1 for code - byte [] url_bytes = url.getBytes(); - byte [] key_bytes = loaderKey.getBytes(); - int length = key_bytes.length + url_bytes.length + 4; - byte [] bytes = new byte[ length + 8 ]; //8 for the length of this message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) ShowDocumentCode; - bytes[index++] = sep; - - System.arraycopy( key_bytes, 0, bytes, index, key_bytes.length ); - index += key_bytes.length; - bytes[index++] = sep; - - System.arraycopy( url_bytes, 0, bytes, index, url_bytes.length ); - index += url_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - public void sendShowDocumentCmd( String contextID, String url, String frame) - { - Main.debug( "sendShowDocumentCmd from context#" + contextID + - " url = " + url + ", frame = " + frame ); - - //length = length of args plus code, 3 seps, end - byte [] url_bytes = url.getBytes(); - byte [] frame_bytes = frame.getBytes(); - int length = contextID.length() + url_bytes.length + frame_bytes.length + 5; - byte [] bytes = new byte[ length + 8 ]; //for length of message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) ShowURLInFrameCode; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( url_bytes, 0, bytes, index, url_bytes.length ); - index += url_bytes.length; - bytes[index++] = sep; - - System.arraycopy( frame_bytes, 0, bytes, index, frame_bytes.length ); - index += frame_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - public void sendShowStatusCmd( String contextID, String msg ) - { - Main.debug( "sendShowStatusCmd, contextID = " + contextID + " msg = " + msg ); - - byte [] msg_bytes = msg.getBytes(); - int length = contextID.length() + msg_bytes.length + 4; - byte [] bytes = new byte[ length + 8 ]; //for length of message - int index = 0; - - byte [] tmp_bytes = getPaddedLengthBytes( length ); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) ShowStatusCode; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( msg_bytes, 0, bytes, index, msg_bytes.length ); - index += msg_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - public void sendResizeAppletCmd( String contextID, String appletID, - int width, int height ) - { - Main.debug( "sendResizeAppletCmd, contextID = " + contextID + ", appletID = " + - appletID + ", width = " + width + ", height = " + height ); - - byte [] width_bytes = String.valueOf( width ).getBytes(); - byte [] height_bytes = String.valueOf( height ).getBytes(); - - //length = length of args plus code, 4 seps, end - int length = contextID.length() + appletID.length() + width_bytes.length + - height_bytes.length + 6; - byte [] bytes = new byte[ length + 8 ]; //for length of message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) ResizeAppletCode; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = appletID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( width_bytes, 0, bytes, index, width_bytes.length ); - index += width_bytes.length; - bytes[index++] = sep; - - System.arraycopy( height_bytes, 0, bytes, index, height_bytes.length ); - index += height_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - public void sendJavaScriptEventCmd( String contextID, String appletID, int objid, String event, int [] types, String [] args ) - { - Main.debug( "sendJavaScriptEventCmd, contextID = " + contextID + " event = " + event ); - String objstr = new String("" + objid); - int length = contextID.length() + appletID.length() + event.length() + objstr.length() + 6; - byte [][][] arglist = null; - if (types != null) { - arglist = new byte[args.length][2][]; - for (int i = 0; i < types.length; i++) { - arglist[i][0] = (new String("" + types[i])).getBytes(); - arglist[i][1] = args[i].getBytes(); - length += 2 + arglist[i][0].length + arglist[i][1].length; - } - } - byte [] bytes = new byte[ length + 8 ]; //for length of message - int index = 0; - - byte [] tmp_bytes = getPaddedLengthBytes( length ); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) JavaScriptEvent; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = appletID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = objstr.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = event.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - if (types != null) - for (int i = 0; i < types.length; i++) { - System.arraycopy( arglist[i][0], 0, bytes, index, arglist[i][0].length ); - index += arglist[i][0].length; - bytes[index++] = sep; - System.arraycopy( arglist[i][1], 0, bytes, index, arglist[i][1].length ); - index += arglist[i][1].length; - bytes[index++] = sep; - } - - signals.write( bytes, 0, bytes.length ); - } - public void sendMemberValue( String contextID, int cmd, int ticketnr, int type, int rid, String value ) - { - Main.debug( "sendMemberValue, contextID = " + contextID + " value = " + value + " type=" + type + " rid=" + rid ); - - String strticket = String.valueOf( ticketnr ); - String strtype = String.valueOf( type ); - String strobj = String.valueOf( rid ); - byte [] value_bytes = value.getBytes(); - int length = contextID.length() + value_bytes.length + strtype.length() + strobj.length() + strticket.length() + 7; - byte [] bytes = new byte[ length + 8 ]; //for length of message - int index = 0; - - byte [] tmp_bytes = getPaddedLengthBytes( length ); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) cmd; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = strticket.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = strtype.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - tmp_bytes = strobj.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( value_bytes, 0, bytes, index, value_bytes.length ); - index += value_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - private void sendAudioClipCommand(String contextId, String url, int cmd) { - byte [] url_bytes = url.getBytes(); - int length = contextId.length() + url_bytes.length + 4; - byte [] bytes = new byte[ length + 8 ]; - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) cmd; - bytes[index++] = sep; - - tmp_bytes = contextId.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( url_bytes, 0, bytes, index, url_bytes.length ); - index += url_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - - public void sendAudioClipPlayCommand(String contextId, String url) { - sendAudioClipCommand(contextId, url, AudioClipPlayCode); - } - public void sendAudioClipLoopCommand(String contextId, String url) { - sendAudioClipCommand(contextId, url, AudioClipLoopCode); - } - public void sendAudioClipStopCommand(String contextId, String url) { - sendAudioClipCommand(contextId, url, AudioClipStopCode); - } - - public void sendPutMember( String contextID, int ticketnr, boolean success ) - { - Main.debug("sendPutMember, contextID = " + contextID + " success = " + success); - - byte [] ticket_bytes = String.valueOf( ticketnr ).getBytes(); - byte [] ret_bytes = String.valueOf( success ? "1" : "0" ).getBytes(); - int length = contextID.length() + ret_bytes.length + ticket_bytes.length + 5; - byte [] bytes = new byte[ length + 8 ]; //for length of message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) PutMember; - bytes[index++] = sep; - - tmp_bytes = contextID.getBytes(); - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = sep; - - System.arraycopy( ticket_bytes, 0, bytes, index, ticket_bytes.length ); - index += ticket_bytes.length; - bytes[index++] = sep; - - System.arraycopy( ret_bytes, 0, bytes, index, ret_bytes.length ); - index += ret_bytes.length; - bytes[index++] = sep; - - signals.write( bytes, 0, bytes.length ); - } - public void sendSecurityConfirm( String [] certs, int certsnr, String perm, String id ) - { - Main.debug("sendSecurityConfirm, ID = " + id + " certsnr = " + certsnr); - - byte [] id_bytes = id.getBytes(); - byte [] perm_bytes = perm.getBytes(); - byte [] certsnr_bytes = String.valueOf( certsnr ).getBytes(); - int length = perm_bytes.length + id_bytes.length + certsnr_bytes.length + 5; - for (int i = 0; i < certsnr; i++) - length += certs[i].length() + 1; - byte [] bytes = new byte[ length + 8 ]; //for length of message - byte [] tmp_bytes = getPaddedLengthBytes( length ); - int index = 0; - - System.arraycopy( tmp_bytes, 0, bytes, index, tmp_bytes.length ); - index += tmp_bytes.length; - bytes[index++] = (byte) SecurityConfirmCode; - bytes[index++] = sep; - - System.arraycopy( id_bytes, 0, bytes, index, id_bytes.length ); - index += id_bytes.length; - bytes[index++] = sep; - - System.arraycopy( perm_bytes, 0, bytes, index, perm_bytes.length ); - index += perm_bytes.length; - bytes[index++] = sep; - - System.arraycopy( certsnr_bytes, 0, bytes, index, certsnr_bytes.length ); - index += certsnr_bytes.length; - bytes[index++] = sep; - - for (int i = 0; i < certsnr; i++) { - byte [] cert_bytes = certs[i].getBytes(); - System.arraycopy( cert_bytes, 0, bytes, index, cert_bytes.length ); - index += cert_bytes.length; - bytes[index++] = sep; - } - - signals.write( bytes, 0, bytes.length ); - } - /************************************************************** - ***** Utility functions for parsing commands **************** - **************************************************************/ - private String getArg( byte[] command ) - { - int begin = cmd_index; - while( 0 != ((int) command[cmd_index++]) ); - - if( cmd_index > (begin + 1) ) - { - String rval = new String( command, begin, (cmd_index - begin - 1) ); - return rval; - } - else - return null; - } - - private byte[] getPaddedLengthBytes( int length ) - { - byte[] length_bytes = String.valueOf( length ).getBytes(); - if( length_bytes.length > 8 ) - throw new IllegalArgumentException( "can't create string number of length = 8" ); - byte [] bytes = { (byte) ' ', (byte) ' ', (byte) ' ', (byte) ' ', - (byte) ' ', (byte) ' ', (byte) ' ', (byte) ' '}; - System.arraycopy( length_bytes, 0, bytes, 0, length_bytes.length ); - return bytes; - } - private int readPaddedLength( int string_size ) - throws IOException - { - //read in 8 bytes for command length- length will be sent as a padded string - byte[] length = new byte[string_size]; - commands.read( length, 0, string_size ); - - String length_str = new String( length ); - return Integer.parseInt( length_str.trim() ); - } - -} diff --git a/khtml/java/org/kde/kjas/server/KJASSecurityManager.java b/khtml/java/org/kde/kjas/server/KJASSecurityManager.java deleted file mode 100644 index 0525bba0c..000000000 --- a/khtml/java/org/kde/kjas/server/KJASSecurityManager.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.kde.kjas.server; - -import java.security.*; -import java.security.cert.*; -import java.net.*; -import java.util.*; - - -public class KJASSecurityManager extends SecurityManager -{ - static Hashtable confirmRequests = new Hashtable(); - static int confirmId = 0; - Hashtable grantedPermissions = new Hashtable(); - HashSet grantAllPermissions = new HashSet(); - HashSet rejectAllPermissions = new HashSet(); - - private static final char [] base64table = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' - }; - static String encode64( byte [] data) - { - StringBuffer buf = new StringBuffer( 4*((data.length + 2)/3) ); - int i = 0, b1, b2, b3; - while (i < data.length - 2) { - b1 = data[i++]; - b2 = data[i++]; - b3 = data[i++]; - buf.append( base64table[(b1 >>> 2) & 0x3F] ); - buf.append( base64table[((b1 << 4) & 0x30) | ((b2 >>> 4) & 0xF)] ); - buf.append( base64table[((b2 << 2) & 0x3C) | ((b3 >>> 6) & 0x03)] ); - buf.append( base64table[b3 & 0x3F] ); - } - if ( i < data.length ) { - b1 = data[i++]; - buf.append( base64table[(b1 >>> 2) & 0x3F] ); - if ( i < data.length ) { - b2 = data[i++]; - buf.append( base64table[((b1 << 4) & 0x30) | ((b2 >>> 4) & 0xF)] ); - buf.append( base64table[(b2 << 2) & 0x3C] ); - } else { - buf.append( base64table[(b1 << 4) & 0x30] ); - buf.append( "=" ); - } - buf.append( '=' ); - } - return buf.toString(); - } - public KJASSecurityManager() - { - } - /** - * checks for an applets permission to access certain resources - * currently, only a check for SocketPermission is done, that the - * applet cannot connect to any other but the host, where it comes from. - * Anything else seems to be handled automagically - */ - public void checkPermission(Permission perm) throws SecurityException, NullPointerException { - // ClassLoader cl = Thread.currentThread().getContextClassLoader(); - try { - super.checkPermission(perm); - } catch (SecurityException se) { - // Don't annoy users with these - if (/*perm instanceof java.lang.RuntimePermission || */ - perm instanceof java.awt.AWTPermission) - throw se; - - // Collect certificates - HashSet signers = new HashSet(); - Class [] cls = getClassContext(); - for (int i = 1; i < cls.length; i++) { - Object[] objs = cls[i].getSigners(); - if (objs != null && objs.length > 0) { - for (int j = 0; j < objs.length; j++) - if (objs[j] instanceof X509Certificate) - signers.add( ((X509Certificate) objs[j]) ); - } - } - Main.debug("Certificates " + signers.size() + " for " + perm); - - // Check granted/denied permission - if ( grantAllPermissions.contains(signers) ) - return; - if ( rejectAllPermissions.contains(signers) ) - throw se; - Permissions permissions = (Permissions) grantedPermissions.get(signers); - if (permissions != null && permissions.implies(perm)) - return; - - // Ok, ask user what to do - String [] certs = new String[signers.size()]; - int certsnr = 0; - for (Iterator i = signers.iterator(); i.hasNext(); ) { - try { - certs[certsnr] = encode64( ((X509Certificate) i.next()).getEncoded() ); - certsnr++; - } catch (CertificateEncodingException cee) {} - } - if (certsnr == 0) - throw se; - String id = "" + confirmId++; - confirmRequests.put(id, Thread.currentThread()); - Main.protocol.sendSecurityConfirm(certs, certsnr, perm.toString(), id); - boolean granted = false; - try { - Thread.sleep(300000); - } catch (InterruptedException ie) { - if (((String) confirmRequests.get(id)).equals("yes")) { - granted = true; - permissions = (Permissions) grantedPermissions.get(signers); - if (permissions == null) { - permissions = new Permissions(); - grantedPermissions.put(signers, permissions); - } - permissions.add(perm); - } else if (((String) confirmRequests.get(id)).equals("grant")) { - grantAllPermissions.add( signers ); - granted = true; - } else if (((String) confirmRequests.get(id)).equals("reject")) { - rejectAllPermissions.add( signers ); - } // else "no", "nossl" or "invalid" - } finally { - confirmRequests.remove(id); - } - if (!granted) { - Main.debug("Permission denied" + perm); - throw se; - } - } - } - - // keytool -genkey -keystore mystore -alias myalias - // keytool -export -keystore mystore -alias myalias -file mycert - // keytool -printcert -file mycert - // keytool -import -keystore myotherstore -alias myalias -file mycert - // jarsigner -keystore mystore myjar.jar myalias - // jarsigner -verify -keystore myotherstore myjar.jar - // - // policy file (use policytool and check java.security): - // keystore "file:myotherstore", "JKS" - // grant signedBy "myalias" - // { - // permission java.io.FilePermission "<<ALL FILES>>", "read" - // } - // - // java code: - // KeyStore store = KeyStore.getInstance("JKS", "SUN"); - public void disabled___checkPermission(Permission perm) throws SecurityException, NullPointerException - { - // does not seem to work as expected, Problems with proxy - and it seems that the default - // implementation already does all that well, what I wanted to do here. - // It is likely that this method will hence disappear soon again. - Object context = getSecurityContext(); - Thread thread = Thread.currentThread(); - if (perm instanceof SocketPermission) { - // check if this is a connection back to the originating host - // if not, fall through and call super.checkPermission - // this gives normally access denied - Main.debug("*** checkPermission " + perm + " in context=" + context + " Thread=" + thread); - // use the context class loader to determine if this is one - // of our applets - ClassLoader contextClassLoader = thread.getContextClassLoader(); - Main.debug("* ClassLoader=" + contextClassLoader); - try { - // try to cast ... - KJASAppletClassLoader loader = (KJASAppletClassLoader)contextClassLoader; - // ok. cast succeeded. Now get the codebase of the loader - // because it contains the host name - URL codebase = loader.getCodeBase(); - URL docbase = loader.getDocBase(); - Main.debug("* Class Loader docbase=" + docbase + " codebase=" + codebase); - String hostname = perm.getName(); - // extract the hostname from the permission name - // which is something like "some.host.domain:XX" - // with XX as the port number - int colonIdx = hostname.indexOf(':'); - if (colonIdx > 0) { - // strip of the port - hostname = hostname.substring(0, colonIdx); - } - // Main.info("Checking " + hostname + "<->" + codebase.getHost()); - - if (hostsAreEqual(hostname, codebase.getHost())) { - // ok, host matches - String actions = perm.getActions(); - // just check if listen is specified which we do not want - // to allow - if (actions != null && actions.indexOf("listen") >= 0) { - Main.debug("* Listen is not allowed."); - } else { - // ok, just return and throw _no_ exception - Main.debug("* Hostname equals. Permission granted."); - return; - } - } else { - Main.info("Host mismatch: " + perm + " != " + codebase.getHost()); - } - } catch (ClassCastException e) { - Main.debug("* ClassLoader is not a KJASAppletClassLoader"); - } - Main.debug("* Fall through to super.checkPermission()"); - } - super.checkPermission(perm); - } - - private static final boolean hostsAreEqual(String host1, String host2) { - if (host1 == null || host2 == null) { - return false; - } - if (host1.length() == 0 || host2.length() == 0) { - return false; - } - if (host1.equalsIgnoreCase(host2)) { - return true; - } - - if ( Main.proxyHost != null && Main.proxyPort != 0) { - // if we use a proxy, we certainly cannot use DNS - return false; - } - - InetAddress inet1=null, inet2=null; - try { - inet1 = InetAddress.getByName(host1); - } catch (UnknownHostException e) { - Main.kjas_err("Unknown host:" + host1, e); - return false; - } - try { - inet2 = InetAddress.getByName(host2); - } catch (UnknownHostException e) { - Main.kjas_err("Unknown host:" + host2, e); - return false; - } - if (inet1.equals(inet2)) { - return true; - } - return false; - } -} diff --git a/khtml/java/org/kde/kjas/server/KJASSoundPlayer.java b/khtml/java/org/kde/kjas/server/KJASSoundPlayer.java deleted file mode 100644 index a37c2bbd4..000000000 --- a/khtml/java/org/kde/kjas/server/KJASSoundPlayer.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.kde.kjas.server; - -import java.applet.*; -import java.net.*; - -public class KJASSoundPlayer implements AudioClip -{ - private String file; - private String contextId; - - public KJASSoundPlayer( String _contextId, URL _file ) - { - file = _file.toString(); - contextId = _contextId; - Main.debug("KJASSoundPlayer( URL '" + _file + "')"); - } - - public void loop() - { - Main.debug("KJASSoundPlayer loop() URL='" + file + "'"); - Main.protocol.sendAudioClipLoopCommand(contextId, file); - } - - public void play() - { - Main.debug("KJASSoundPlayer play() URL='" + file + "'"); - Main.protocol.sendAudioClipPlayCommand(contextId, file); - } - - public void stop() - { - Main.debug("KJASSoundPlayer stop() URL='" + file + "'"); - Main.protocol.sendAudioClipStopCommand(contextId, file); - } -} - diff --git a/khtml/java/org/kde/kjas/server/KJASSwingConsole.java b/khtml/java/org/kde/kjas/server/KJASSwingConsole.java deleted file mode 100644 index fedda6c48..000000000 --- a/khtml/java/org/kde/kjas/server/KJASSwingConsole.java +++ /dev/null @@ -1,325 +0,0 @@ -/* This file is part of the KDE project - * - * Copyright (C) 2002 Till - * Copyright (C) 2005 Koos Vriezen <koos ! vriezen () xs4all ! nl> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -package org.kde.kjas.server; - -import java.awt.Toolkit; -import java.awt.Image; -import java.awt.BorderLayout; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.PrintStream; -import java.util.Enumeration; -import java.util.Properties; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JButton; -import javax.swing.JTextArea; -import javax.swing.border.EmptyBorder; - - -public class KJASSwingConsole implements Console { - private JFrame frame = null; - private JPanel jPanel1; - private JScrollPane jScrollPane1; - private JButton clearButton; - private JTextArea textField; - private JButton closeButton; - private JButton copyButton; - final static int NR_BUFFERS = 3; - final static int MAX_BUF_LENGTH = 3000; - private int queue_pos = 0; - private StringBuffer [] output_buffer = new StringBuffer[NR_BUFFERS]; - - private PrintStream real_stderr = new PrintStream(System.err); - - /** Creates new form KJASSwingConsole */ - public KJASSwingConsole() { - PrintStream st = new PrintStream( new KJASConsoleStream(this) ); - System.setOut(st); - System.setErr(st); - } - - private void initComponents() { - frame = new JFrame("Konqueror Java Console"); - jPanel1 = new JPanel(); - clearButton = new JButton(); - closeButton = new JButton(); - copyButton = new JButton(); - jScrollPane1 = new JScrollPane(); - textField = new JTextArea(); - - frame.setFont(new java.awt.Font("Monospaced", 0, 10)); - frame.setName("KJAS Console"); - frame.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent evt) { - exitForm(evt); - } - }); - - jPanel1.setLayout(new BorderLayout()); - jPanel1.setBorder(new EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); - clearButton.setText("clear"); - clearButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - clearButtonActionPerformed(evt); - } - }); - - jPanel1.add(clearButton, BorderLayout.WEST); - - closeButton.setText("close"); - closeButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - closeButtonActionPerformed(evt); - } - }); - - jPanel1.add(closeButton, BorderLayout.EAST); - - copyButton.setText("copy"); - copyButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - copyButtonActionPerformed(evt); - } - }); - - jPanel1.add(copyButton, BorderLayout.CENTER); - - frame.getContentPane().add(jPanel1, BorderLayout.SOUTH); - - textField.setColumns(40); - textField.setEditable(false); - textField.setRows(10); - textField.addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent evt) { - textFieldKeyPressed(evt); - } - }); - - jScrollPane1.setViewportView(textField); - - frame.getContentPane().add(jScrollPane1, BorderLayout.CENTER); - - try { - java.net.URL iconUrl = getClass().getClassLoader().getResource("images/beanicon.png"); - if (iconUrl != null) { - Toolkit tk = Toolkit.getDefaultToolkit(); - Image icon = tk.createImage(iconUrl); - frame.setIconImage(icon); - } - } catch (Throwable e) { - } - frame.pack(); - frame.setSize(500, 300); - } - - private void textFieldKeyPressed(java.awt.event.KeyEvent evt) { - // Add your handling code here: - char key = evt.getKeyChar(); - switch (key) { - case 'h': - showHelp(); - break; - case 'g': - append("Running Garbage Collection ...\n", true); - System.gc(); - case 'm': - append("Total Memory: " + Runtime.getRuntime().totalMemory() + " bytes\n", true); - append("Free Memory : " + Runtime.getRuntime().freeMemory() + " bytes\n", true); - break; - case 'c': - clear(); - break; - case 's': - showSystemProperties(); - break; - case 't': - showThreads(); - break; - case 'x': - KJASAppletClassLoader.removeLoaders(); - append("Emptied Classloader Cache\n", true); - break; - } - } - - private void showHelp() { - append("Java VM: " + System.getProperty("java.vendor") + " " + System.getProperty("java.version") + "\n", true); - String ph = System.getProperty("http.proxyHost"); - if (ph != null) { - append("Proxy: " + ph + ":" + System.getProperty("java.proxyPort") + "\n", true); - } - SecurityManager sec = System.getSecurityManager(); - if (sec == null) { - append("WARNING: Security Manager disabled!\n", true); - } else { - append("SecurityManager=" + sec + "\n", true); - } - appendSeparator(); - append("Konqueror Java Console Help\n", true); - append(" c: clear console\n", true); - append(" g: run garbage collection\n", true); - append(" h: show help\n", true); - append(" m: show memory info\n", true); - append(" s: print system properties\n", true); - append(" t: list threads\n", true); - append(" x: empty classloader cache\n", true); - appendSeparator(); - } - - private void showSystemProperties() { - append("Printing System Properties ...\n", true); - appendSeparator(); - Properties p = System.getProperties(); - for (Enumeration e = p.keys(); e.hasMoreElements();) { - Object key = e.nextElement(); - if ("line.separator".equals(key)) { - String value = (String) p.get(key); - StringBuffer unescaped = new StringBuffer(10); - for (int i = 0; i < value.length(); i++) { - char c = value.charAt(i); - if (c == '\n') unescaped.append("\\n"); - else if (c == '\r') unescaped.append("\\n"); - else unescaped.append(c); - } - append(key + " = " + unescaped + "\n", true); - } else append(key + " = " + p.get(key) + "\n", true); - } - appendSeparator(); - } - - private void showThreads() { - Thread t = Thread.currentThread(); - ThreadGroup g = t.getThreadGroup(); - ThreadGroup parent; - while ((parent = g.getParent()) != null) { - g = parent; - } - g.list(); - } - - private void copyButtonActionPerformed(java.awt.event.ActionEvent evt) { - textField.selectAll(); - textField.copy(); - } - - private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) { - frame.setVisible(false); - } - - private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) { - clear(); - } - - /** Exit the Application */ - private void exitForm(java.awt.event.WindowEvent evt) { - frame.setVisible(false); - } - - public void setVisible(boolean visible) { - if (frame == null && visible) { - initComponents(); - frame.setVisible(visible); - System.out.println( "Java VM version: " + - System.getProperty("java.version") ); - System.out.println( "Java VM vendor: " + - System.getProperty("java.vendor") ); - String ph = System.getProperty("http.proxyHost"); - String pp = System.getProperty("http.proxyPort"); - if (ph != null) { - System.out.println("Proxy: " + ph + ":" + pp); - } - SecurityManager sec = System.getSecurityManager(); - Main.debug("SecurityManager=" + sec); - if (sec == null) { - System.out.println( "WARNING: Security Manager disabled!" ); - textField.setForeground(java.awt.Color.red); - } - showHelp(); - } else if (frame != null) - frame.setVisible(visible); - - if (visible) { - for (int i = 0; i < NR_BUFFERS; i++) - if (output_buffer[(queue_pos + i + 1) % 3] != null) { - textField.append(output_buffer[(queue_pos + i + 1) % 3].toString()); - output_buffer[(queue_pos + i + 1) % 3] = null; - } - } - } - - /** - * @param args the command line arguments - */ - public static void main(String args[]) { - new KJASSwingConsole().setVisible(true); - } - - public void clear() { - textField.setText(""); - } - - private void appendSeparator() { - append("----------------------------------------------------\n", true); - } - - public void append(String txt) { - append(txt, false); - } - - public void append(String txt, boolean force) { - if (txt == null) - return; - if (frame == null || !frame.isVisible()) { - if (Main.Debug) - real_stderr.print(txt); - if (output_buffer[queue_pos] != null && - output_buffer[queue_pos].length() > MAX_BUF_LENGTH) { - queue_pos = (++queue_pos) % NR_BUFFERS; - if (output_buffer[queue_pos] != null) { - // starting overwriting old log, clear textField if exists - if (frame != null) - textField.setText(""); - output_buffer[queue_pos] = null; - } - } - if (output_buffer[queue_pos] == null) - output_buffer[queue_pos] = new StringBuffer(txt); - else - output_buffer[queue_pos].append(txt); - return; - } - int length = txt.length(); - synchronized(textField) { - //get the caret position, and then get the new position - int old_pos = textField.getCaretPosition(); - textField.append(txt); - textField.setCaretPosition( old_pos + length ); - } - } -} - diff --git a/khtml/java/org/kde/kjas/server/KJASURLStreamHandlerFactory.java b/khtml/java/org/kde/kjas/server/KJASURLStreamHandlerFactory.java deleted file mode 100644 index 58c5ff518..000000000 --- a/khtml/java/org/kde/kjas/server/KJASURLStreamHandlerFactory.java +++ /dev/null @@ -1,609 +0,0 @@ -/* This file is part of the KDE project - * - * Copyright (C) 2003 Koos Vriezen <koos ! vriezen () xs4all ! nl> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -package org.kde.kjas.server; - -import java.net.*; -import java.io.*; -import java.util.*; -import java.security.*; -/** - * - */ - -class KIOConnection -{ - final static int NOT_CONNECTED = 0; - final static int CONNECT_WAIT = 1; - final static int CONNECTED = 2; - - final static int DATA = 0; - final static int FINISHED = 1; - final static int ERRORCODE = 2; - final static int CONNECT = 6; - final static int REQUESTDATA = 7; - - final static int STOP = 0; - final static int HOLD = 1; - final static int RESUME = 2; - - protected static int id = 0; - static Hashtable jobs = new Hashtable(); // should be thread safe - - static void setData(String jobid, int code, byte [] data) { - KIOConnection job = (KIOConnection) jobs.get(jobid); - if (job == null || !job.setData(code, data)) - Main.info("KIO KJASHttpURLConnection gone (timedout/closed)"); - else - Thread.yield(); - } - - private class KJASOutputStream extends OutputStream { - KJASOutputStream() { - } - public void write(int b) throws IOException { - byte[] buf = {(byte)b}; - write(buf); - } - public synchronized void write(byte b[], int off, int len) throws IOException { - byte[] buf = new byte[len]; - System.arraycopy(b, off, buf, 0, len); - sendData(buf, false); - } - public void write(byte b[]) throws IOException { - write(b, 0, b.length); - } - public void close() throws IOException { - disconnect(); - } - public void flush() throws IOException { - checkConnected(); - sendData(null, true); - } - } - - private class KJASInputStream extends InputStream { - - KJASInputStream() { - } - public int read() throws IOException { - if (getData(true)) - return 0x00ff & in_buf[in_bufpos++]; - return -1; - } - public int read(byte[] b, int off, int len) throws IOException { - int total = 0; - do { - if (!getData(true)) break; - int nr = in_buf.length - in_bufpos; - if (nr > len) - nr = len; - System.arraycopy(in_buf, in_bufpos, b, off, nr); - len -= nr; - total += nr; - off += nr; - in_bufpos += nr; - } while (len > 0); - return total > 0 ? total : -1; - } - public int read(byte[] b) throws IOException { - return read(b, 0, b.length); - } - public int available() throws IOException { - return inAvailable(); - } - public boolean markSupported() { - return false; - } - public void close() throws IOException { - disconnect(); - } - } - - protected URL url; - protected int connect_status = 0; - protected String jobid = null; // connection id with KIO - protected LinkedList data = new LinkedList(); // not thread safe - protected int errorcode = 0; - protected boolean finished = false; // all data has arived - protected boolean onhold = false; // KIO job is suspended - protected boolean request_data = false; // need data for put job - private KJASOutputStream out = null; - private KJASInputStream in = null; - private byte [] in_buf = null; // current input buffer - private int in_bufpos = 0; // position in buffer - private boolean in_eof = false; // all data is read - private final static int LOW_BUFFER_LIMIT = 5; // put onhold off - private final static int HIGH_BUFFER_LIMIT = 10; // put onhold on - - protected KIOConnection(URL u) { - url = u; - } - protected void checkConnected() throws IOException { - if (connect_status != CONNECTED) - throw new IOException("not connected"); - } - protected boolean haveError() { - return errorcode != 0; - } - synchronized protected boolean setData(int code, byte [] d) { - // is job still there when entering the monitor - if (jobs.get(jobid) == null) - return false; - if (connect_status == CONNECT_WAIT) - connect_status = CONNECTED; - switch (code) { - case FINISHED: - if (d != null && d.length > 0) - data.addLast(d); - finished = true; - onhold = false; - jobs.remove(jobid); - Main.debug ("KIO FINISHED (" + jobid + ") " + data.size()); - break; - case DATA: - if (d.length > 0) - data.addLast(d); - // Main.debug ("KIO DATA (" + jobid + ") " + data.size()); - if (!onhold && data.size() > HIGH_BUFFER_LIMIT) { - Main.protocol.sendDataCmd(jobid, HOLD); - onhold = true; - } - break; - case ERRORCODE: - String codestr = new String(d); - errorcode = Integer.parseInt(codestr); - Main.debug ("KIO ERRORECODE(" + jobid + ") " + errorcode); - break; - case CONNECT: - Main.debug ("KIO CONNECT(" + jobid + ") "); - request_data = true; - errorcode = 0; - break; - case REQUESTDATA: - Main.debug ("KIO REQUESTDATA(" + jobid + ") "); - request_data = true; - break; - } - notifyAll(); - return true; - } - - private synchronized boolean getData(boolean mayblock) throws IOException { - if (haveError()) { - //disconnect(); - in_eof = true; - //throw new IOException("i/o error " + errorcode); - } - if (in_eof) - return false; - checkConnected(); - if (in_buf != null && in_bufpos < in_buf.length) - return true; - int datasize = data.size(); - if (datasize > 0) { - in_buf = (byte []) data.removeFirst(); - in_bufpos = 0; - } - if (onhold && datasize < LOW_BUFFER_LIMIT) { - Main.protocol.sendDataCmd(jobid, RESUME); - onhold = false; - } - if (datasize > 0) - return true; - if (finished) { - in_eof = true; - return false; - } - if (!mayblock) - return false; - try { - wait(); - } catch (InterruptedException ie) { - return false; - } - return getData(false); - } - synchronized private int inAvailable() throws IOException { - if (in_eof) - return 0; - checkConnected(); - if (!getData(false)) - return 0; - int total = in_buf.length - in_bufpos; - ListIterator it = data.listIterator(0); - while (it.hasNext()) - total += ((byte []) it.next()).length; - return total; - } - synchronized private void sendData(byte [] d, boolean force) throws IOException { - Main.debug ("KIO sendData(" + jobid + ") force:" + force + " request_data:" + request_data); - if (d != null) - data.addLast(d); - if (!request_data && !force) return; - if (data.size() == 0) return; - if (force && !request_data) { - try { - wait(10000); - } catch (InterruptedException ie) { - return; - } - if (!request_data) { - Main.debug ("KIO sendData(" + jobid + ") timeout"); - data.clear(); - disconnect(); - throw new IOException("timeout"); - } - } - byte[] buf; - int total = 0; - ListIterator it = data.listIterator(0); - while (it.hasNext()) - total += ((byte []) it.next()).length; - buf = new byte[total]; - int off = 0; - it = data.listIterator(0); - while (it.hasNext()) { - byte [] b = (byte []) it.next(); - System.arraycopy(b, 0, buf, off, b.length); - off += b.length; - } - data.clear(); - request_data = false; - Main.protocol.sendPutData(jobid, buf, 0, total); - } - synchronized void connect(boolean doInput) throws IOException { - if (connect_status == CONNECTED) - return; // javadocs: call is ignored - //(new Exception()).printStackTrace(); - Main.debug ("KIO connect " + url); - errorcode = 0; - finished = in_eof = false; - jobid = String.valueOf(id++); - jobs.put(jobid, this); - if (doInput) - Main.protocol.sendGetURLDataCmd(jobid, url.toExternalForm()); - else - Main.protocol.sendPutURLDataCmd(jobid, url.toExternalForm()); - connect_status = CONNECT_WAIT; - try { - wait(20000); - } catch (InterruptedException ie) { - errorcode = -1; - } - boolean isconnected = (connect_status == CONNECTED); - if (isconnected && !haveError()) { - if (doInput) - in = new KJASInputStream(); - else - out = new KJASOutputStream(); - Main.debug ("KIO connect(" + jobid + ") " + url); - return; - } - connect_status = NOT_CONNECTED; - jobs.remove(jobid); - if (isconnected) { - if (!finished) - Main.protocol.sendDataCmd(jobid, STOP); - Main.debug ("KIO connect error " + url); - throw new ConnectException("connection failed (not found)"); - } - Main.debug ("KIO connect timeout " + url); - throw new IOException("connection failed (timeout)"); - } - synchronized void disconnect() { - if (connect_status == NOT_CONNECTED) - return; - Main.debug ("KIO disconnect " + jobid); - //(new Exception()).printStackTrace(); - if (out != null) { - try { - out.flush(); - } catch (IOException iox) {} - } - connect_status = NOT_CONNECTED; - out = null; - in = null; - if (!finished) { - Main.protocol.sendDataCmd(jobid, STOP); - jobs.remove(jobid); - } - notifyAll(); - } - InputStream getInputStream() throws IOException { - Main.debug ("KIO getInputStream(" + jobid + ") " + url); - return in; - } - OutputStream getOutputStream() throws IOException { - Main.debug ("KIO getOutputStream(" + jobid + ") " + url); - return out; - } -} - -final class KIOHttpConnection extends KIOConnection -{ - final static int HEADERS = 3; - final static int REDIRECT = 4; - final static int MIMETYPE = 5; - - Vector headers = new Vector(); - Hashtable headersmap = new Hashtable(); - String responseMessage = null; - int responseCode = -1; - - KIOHttpConnection(URL u) { - super(u); - } - protected boolean haveError() { - return super.haveError() || - responseCode != 404 && (responseCode < 0 || responseCode >= 400); - } - protected synchronized boolean setData(int code, byte [] d) { - switch (code) { - case HEADERS: - StringTokenizer tokenizer = new StringTokenizer(new String(d), "\n"); - while (tokenizer.hasMoreTokens()) { - String token = tokenizer.nextToken(); - int pos = token.indexOf(":"); - String [] entry = { - token.substring(0, pos > -1 ? pos : token.length()).toLowerCase(), token.substring(pos > -1 ? pos+1: token.length()).trim() - }; - headers.add(entry); - headersmap.put(entry[0], entry[1]); - // Main.debug ("KIO header " + entry[0] + "=" + entry[1]); - } - responseCode = 0; - if (headersmap.size() > 0) { - String token = ((String []) headers.get(0))[0]; - if (!token.startsWith("http/1.")) break; - int spos = token.indexOf(' '); - if (spos < 0) break; - int epos = token.indexOf(' ', spos + 1); - if (epos < 0) break; - responseCode = Integer.parseInt(token.substring(spos+1, epos)); - responseMessage = token.substring(epos+1); - Main.debug ("KIO responsecode=" + responseCode); - } - break; - } - return super.setData(code, d); - } -} - -final class KIOSimpleConnection extends KIOConnection -{ - KIOSimpleConnection(URL u) { - super(u); - } -} - -final class KJASHttpURLConnection extends HttpURLConnection -{ - private KIOHttpConnection kioconnection; - - KJASHttpURLConnection(URL u) { - super(u); - kioconnection = new KIOHttpConnection(u); - } - public Map getHeaderFields() { - try { - connect(); - } catch (IOException e) { - Main.debug ("Error on implicit connect()"); - } - Main.debug ("KIO getHeaderFields"); - return kioconnection.headersmap; - } - public String getHeaderField(String name) { - try { - connect(); - } catch (IOException e) { - Main.debug ("Error on implicit connect()"); - } - String field = (String) kioconnection.headersmap.get(name); - Main.debug ("KIO getHeaderField:" + name + "=" + field); - //(new Exception()).printStackTrace(); - return field; - } - public String getHeaderField(int n) { - try { - connect(); - } catch (IOException e) { - Main.debug ("Error on implicit connect()"); - } - Main.debug ("KIO getHeaderField(" + n + ") size=" + kioconnection.headersmap.size()); - if (n >= kioconnection.headersmap.size()) - return null; - String [] entry = (String []) kioconnection.headers.get(n); - String line = entry[0]; - if (entry[1].length() > 0) - line += ":" + entry[1]; - Main.debug ("KIO getHeaderField(" + n + ")=#" + line + "#"); - return line; - } - public String getHeaderFieldKey(int n) { - try { - connect(); - } catch (IOException e) { - Main.debug ("Error on implicit connect()"); - } - Main.debug ("KIO getHeaderFieldKey " + n); - if (n >= kioconnection.headersmap.size()) - return null; - return ((String []) kioconnection.headers.get(n))[0]; - } - public int getResponseCode() throws IOException { - Main.debug ("KIO getResponseCode"); - if (kioconnection.responseCode == -1) { - try { - connect(); - } catch (IOException e) { - if (kioconnection.responseCode == -1) - throw e; - } - } - responseMessage = kioconnection.responseMessage; - return kioconnection.responseCode; - } - public boolean usingProxy() { - return false; // FIXME - } - public void connect() throws IOException { - if (connected) - return; - Main.debug ("KIO KJASHttpURLConnection.connect " + url); - SecurityManager security = System.getSecurityManager(); - if (security != null) - security.checkPermission(getPermission()); - kioconnection.connect(doInput); - connected = true; - if (kioconnection.responseCode == 404) - throw new FileNotFoundException(url.toExternalForm()); - } - public void disconnect() { - kioconnection.disconnect(); - connected = false; - } - public InputStream getInputStream() throws IOException { - doInput = true; - doOutput = false; - connect(); - return kioconnection.getInputStream(); - } - public OutputStream getOutputStream() throws IOException { - doInput = false; - doOutput = true; - connect(); - return kioconnection.getOutputStream(); - } - public InputStream getErrorStream() { - Main.debug("KIO KJASHttpURLConnection.getErrorStream" + url); - try { - if (connected && kioconnection.responseCode == 404) - return kioconnection.getInputStream(); - } catch (Exception ex) {} - return null; - } -} - -final class KJASSimpleURLConnection extends URLConnection -{ - private KIOSimpleConnection kioconnection = null; - private int default_port; - - KJASSimpleURLConnection(URL u, int p) { - super(u); - default_port = p; - } - public boolean usingProxy() { - return false; // FIXME - } - public Permission getPermission() throws IOException { - int p = url.getPort(); - if (p < 0) - p = default_port; - return new SocketPermission(url.getHost() + ":" + p, "connect"); - } - public void connect() throws IOException { - if (kioconnection != null) - return; - Main.debug ("KIO KJASSimpleURLConnection.connection " + url); - SecurityManager security = System.getSecurityManager(); - if (security != null) - security.checkPermission(getPermission()); - kioconnection = new KIOSimpleConnection(url); - kioconnection.connect(doInput); - connected = true; - } - public void disconnect() { - if (kioconnection == null) - return; - kioconnection.disconnect(); - kioconnection = null; - connected = false; - } - public InputStream getInputStream() throws IOException { - doInput = true; - doOutput = false; - if (kioconnection == null) - connect(); - return kioconnection.getInputStream(); - } - public OutputStream getOutputStream() throws IOException { - doInput = false; - doOutput = true; - if (kioconnection == null) - connect(); - return kioconnection.getOutputStream(); - } -} - - -final class KJASHttpURLStreamHandler extends URLStreamHandler -{ - KJASHttpURLStreamHandler(int port) { - default_port = port; - } - protected URLConnection openConnection(URL u) throws IOException { - URL url = new URL(u.toExternalForm()); - return new KJASHttpURLConnection(url); - } - protected int getDefaultPort() { - return default_port; - } - private int default_port; -} - -final class KJASSimpleURLStreamHandler extends URLStreamHandler -{ - KJASSimpleURLStreamHandler(int port) { - default_port = port; - } - protected URLConnection openConnection(URL u) throws IOException { - URL url = new URL(u.toExternalForm()); - return new KJASSimpleURLConnection(url, default_port); - } - protected int getDefaultPort() { - return default_port; - } - private int default_port; -} - -public final class KJASURLStreamHandlerFactory - implements URLStreamHandlerFactory -{ - public URLStreamHandler createURLStreamHandler(String protocol) { - if (protocol.equals("jar") || protocol.equals("file")) - return null; - //outputs to early: Main.debug ("createURLStreamHandler " + protocol); - Main.debug ("KIO createURLStreamHandler " + protocol); - if (protocol.equals("http")) - return new KJASHttpURLStreamHandler(80); - else if (protocol.equals("https")) - return new KJASHttpURLStreamHandler(443); - else if (protocol.equals("ftp")) - return new KJASSimpleURLStreamHandler(21); - else if (protocol.equals("smb")) - return new KJASSimpleURLStreamHandler(139); - else if (protocol.equals("fish")) - return new KJASSimpleURLStreamHandler(22); - return null; - } -} diff --git a/khtml/java/org/kde/kjas/server/Main.java b/khtml/java/org/kde/kjas/server/Main.java deleted file mode 100644 index 50ccb14f1..000000000 --- a/khtml/java/org/kde/kjas/server/Main.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.kde.kjas.server; - -import java.io.*; -import java.security.*; -import java.net.*; - -/** - * KJAS server recognizes these variablers: - * kjas.debug - makes server actions verbose - * kjas.showConsole - shows Java Console window - * kjas.log - save a transcript of the debug output to /tmp/kjas.log - */ - -public class Main -{ - //We need to save a reference to the original stdout - //for sending messages back - static final KJASProtocolHandler protocol; - static Console console = null; - private static final boolean show_console; - public static final boolean Debug; - public static final boolean log; - static final boolean cacheImages; - static float java_version = (float) 0.0; - static String proxyHost = null; - static int proxyPort = 0; - private static boolean good_jdk = true; - - /************************************************************************** - * Initialization - **************************************************************************/ - static - { - Debug = System.getProperty( "kjas.debug" ) != null; - - show_console = System.getProperty( "kjas.showConsole" ) != null; - - if( System.getProperty( "kjas.useKio" ) != null ) - URL.setURLStreamHandlerFactory( new KJASURLStreamHandlerFactory() ); - - log = System.getProperty( "kjas.log" ) != null; - - cacheImages = System.getProperty( "kjas.noImageCache" ) != null; - - // determine system proxy - proxyHost = System.getProperty( "http.proxyHost" ); - String proxyPortString = System.getProperty( "http.proxyPort" ); - try { - proxyPort = Integer.parseInt(proxyPortString); - } catch (Exception e) { - } - //Main.debug( "JVM version = " + System.getProperty( "java.version" ) ); - String version = System.getProperty("java.version").substring( 0, 3 ); - // Hack for SGI Java2 runtime - if (version == "Jav") { // Skip over JavaVM- (the first 7 chars) - version = System.getProperty("java.version").substring(7,3); - } - //Main.debug( "JVM numerical version = " + version ); - try { - java_version = Float.parseFloat( version ); - if( java_version < 1.2 ) - good_jdk = false; - } catch( NumberFormatException e ) { - good_jdk = false; - } - PrintStream protocol_stdout = System.out; - console = new KJASSwingConsole(); - protocol = new KJASProtocolHandler( System.in, protocol_stdout ); - } - - /************************************************************************** - * Public Utility functions available to the KJAS framework - **************************************************************************/ - public static void debug( String msg ) - { - if( Debug ) - { - System.out.println( "KJAS: " + msg ); - } - } - public static void info (String msg ) { - System.err.println( "KJAS: " + msg ); - } - - public static void kjas_err( String msg, Exception e ) - { - System.err.println( msg ); - System.err.println( "Backtrace: " ); - e.printStackTrace(); - } - - public static void kjas_err( String msg, Throwable t ) - { - System.err.println( msg ); - t.printStackTrace(); - } - private Main() { - } - - /************************************************************************** - * Main- create the command loop - **************************************************************************/ - public static void main( String[] args ) - { - if( !good_jdk ) - { - console.setVisible( true ); - System.err.println( "ERROR: This version of Java is not supported for security reasons." ); - System.err.println( "\t\tPlease use Java version 1.2 or higher." ); - return; - } - - if( show_console ) - console.setVisible( true ); - - // set up https - boolean hasHTTPS = true; - - try { - // https needs a secure socket provider - Provider[] sslProviders = Security.getProviders("SSLContext.SSL"); - - if (sslProviders == null || sslProviders.length == 0) { - // as a fallback, try to dynamically install Sun's jsse - Class provider = Class.forName("com.sun.net.ssl.internal.ssl.Provider"); - - if (provider != null) { - Main.debug("adding Security Provider"); - Provider p = (Provider) provider.newInstance(); - Security.addProvider(p); - } else { - // Try jessie (http://www.nongnu.org/jessie/) as a fallback - // available in the Free World - provider = Class.forName("org.metastatic.jessie.provider.Jessie"); - if (provider != null) { - Main.debug("adding Jessie as Security Provider"); - Provider p = (Provider) provider.newInstance(); - Security.addProvider(p); - } else { - Main.debug("could not get class: com.sun.net.ssl.internal.ssl.Provider"); - hasHTTPS = false; - } - } - } - - if (hasHTTPS) { - // allow user to provide own protocol handler - // -Djava.protocol.handler.pkgs = user.package.name - // getting and setting of properties might generate SecurityExceptions - // so this needs to be in a try block - String handlerPkgs = System.getProperty("java.protocol.handler.pkgs"); - - if (handlerPkgs == null) { - // set default packages for Sun and IBM - handlerPkgs = "com.sun.net.ssl.internal.www.protocol" + - "|com.ibm.net.ssl.www.protocol"; - } else { - // add default packages for Sun and IBM as fallback - handlerPkgs += "|com.sun.net.ssl.internal.www.protocol" + - "|com.ibm.net.ssl.www.protocol"; - } - - System.setProperty("java.protocol.handler.pkgs", handlerPkgs); - } - } catch (Exception e) { - hasHTTPS = false; - } - - if (hasHTTPS == false) { - System.out.println("Unable to load JSSE SSL stream handler, https support not available"); - System.out.println("For more information see http://java.sun.com/products/jsse/"); - } - - //start the command parsing - protocol.commandLoop(); - } - -} diff --git a/khtml/java/org/kde/kjas/server/StatusListener.java b/khtml/java/org/kde/kjas/server/StatusListener.java deleted file mode 100644 index be17c2b29..000000000 --- a/khtml/java/org/kde/kjas/server/StatusListener.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.kde.kjas.server; - -public interface StatusListener { - public void showStatus(String message); -}
\ No newline at end of file |