summaryrefslogtreecommitdiffstats
path: root/tdehtml/java/org/kde/kjas/server/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'tdehtml/java/org/kde/kjas/server/Main.java')
-rw-r--r--tdehtml/java/org/kde/kjas/server/Main.java178
1 files changed, 178 insertions, 0 deletions
diff --git a/tdehtml/java/org/kde/kjas/server/Main.java b/tdehtml/java/org/kde/kjas/server/Main.java
new file mode 100644
index 000000000..50ccb14f1
--- /dev/null
+++ b/tdehtml/java/org/kde/kjas/server/Main.java
@@ -0,0 +1,178 @@
+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();
+ }
+
+}