You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
6.8 KiB
179 lines
6.8 KiB
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();
|
|
}
|
|
|
|
}
|