working java server + example
authorAleš Křenek <ljocha@ics.muni.cz>
Wed, 13 May 2009 14:30:35 +0000 (14:30 +0000)
committerAleš Křenek <ljocha@ics.muni.cz>
Wed, 13 May 2009 14:30:35 +0000 (14:30 +0000)
org.glite.lb.client-java/Makefile
org.glite.lb.client-java/examples/SSLServer.java [new file with mode: 0644]
org.glite.lb.client-java/src/org/glite/lb/SSL.java
org.glite.lb.client-java/src/org/glite/lb/SSLSend.java

index 4fe2d3e..410e1df 100644 (file)
@@ -1,6 +1,6 @@
 -include Makefile.inc
 
-EXAMPLES := SimpleLLTest.class SSLClient.class
+EXAMPLES := SimpleLLTest.class SSLClient.class SSLServer.class
 # broken: ProducerTestIL.class ProducerTestLL.class
 
 VPATH := examples
diff --git a/org.glite.lb.client-java/examples/SSLServer.java b/org.glite.lb.client-java/examples/SSLServer.java
new file mode 100644 (file)
index 0000000..573ee03
--- /dev/null
@@ -0,0 +1,25 @@
+import org.glite.lb.SSL;
+import java.io.*;
+
+public class SSLServer {
+       public static void main(String[] args) {
+
+               SSL ssl = new SSL();
+
+               try {
+                       ssl.setProxy(args[0]);
+                       InputStream in = ssl.accept(Integer.parseInt(args[1]),100000);
+                       System.out.println("accept ok");
+
+                       while (true) {
+                               byte[] buf = new byte[1000];
+                               int     len = in.read(buf);
+                               System.out.write(buf,0,len);
+                       }
+               }
+               catch (Exception e) {
+                       e.printStackTrace();
+               }
+               
+       }
+}
index 9b3e284..8b8da53 100644 (file)
@@ -41,41 +41,49 @@ public class SSL {
 
         public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket
 socket) {
-            //System.out.println("MyX509KeyManager.chooseClientAlias()");
-            //for (int i = 0; i < keyType.length; i++) {
-                //System.out.println("MyX509KeyManager.chooseClientAlias() keyType[" + i +
-//"]=" + keyType[i]);
-            //}
-            //for (int i = 0; i < issuers.length; i++) {
-                //System.out.println("MyX509KeyManager.chooseClientAlias() issuers[" + i +
-//"]=" + issuers[i]);
-            //}
+            System.out.println("MyX509KeyManager.chooseClientAlias()");
+/*
+            for (int i = 0; i < keyType.length; i++) {
+                System.out.println("MyX509KeyManager.chooseClientAlias() keyType[" + i +
+"]=" + keyType[i]);
+            }
+            for (int i = 0; i < issuers.length; i++) {
+                System.out.println("MyX509KeyManager.chooseClientAlias() issuers[" + i +
+"]=" + issuers[i]);
+            }
+*/
             return "";
         }
 
         public String chooseServerAlias(String keyType, Principal[] issuers, Socket
 socket) {
-            //System.out.println("MyX509KeyManager.chooseServerAlias(" + keyType + ")");
-            return null;
+/*
+            System.out.println("MyX509KeyManager.chooseServerAlias(" + keyType + ")");
+
+               if (issuers != null) for (int i=0; i<issuers.length; i++) 
+                       System.out.println("    " + issuers[i]);
+*/
+       
+               return "";
         }
 
         public X509Certificate[] getCertificateChain(String alias) {
-            //System.out.println("MyX509KeyManager.getCertificateChain(" + alias + ")");
+//            System.out.println("MyX509KeyManager.getCertificateChain(" + alias + ")");
             return certchain;
         }
 
         public String[] getClientAliases(String keyType, Principal[] issuers) {
-            //System.out.println("MyX509KeyManager.getClientAliases(" + keyType + ")");
+//            System.out.println("MyX509KeyManager.getClientAliases(" + keyType + ")");
             return null;
         }
 
         public PrivateKey getPrivateKey(String alias) {
-            //System.out.println("MyX509KeyManager.getPrivateKey(" + alias + ")");
+//            System.out.println("MyX509KeyManager.getPrivateKey(" + alias + ")");
             return key;
         }
 
         public String[] getServerAliases(String keyType, Principal[] issuers) {
-            //System.out.println("MyX509KeyManager.getServerAliases(" + keyType + ")");
+//            System.out.println("MyX509KeyManager.getServerAliases(" + keyType + ")");
             return null;
         }
     }
@@ -106,10 +114,10 @@ socket) {
     }
 
     SSLContext sctx;
-    SSLSocket socket;
+    SSLSocket client;
+    SSLServerSocket server;
     SSLSession sess;
     String proxy;
-    PrintStream osw = null;
 
     void init_ctx() throws KeyStoreException,NoSuchAlgorithmException,KeyManagementException {
            if (sctx == null) {
@@ -132,43 +140,47 @@ socket) {
            proxy = p;
     }
 
-    public void connect(String host,int port,int timeout) throws KeyStoreException,NoSuchAlgorithmException,KeyManagementException,SocketException,IOException {
+    public PrintStream connect(String host,int port,int timeout) throws KeyStoreException,NoSuchAlgorithmException,KeyManagementException,SocketException,IOException {
 
            init_ctx();
            
-           osw = null;
-           socket = (SSLSocket) sctx.getSocketFactory().createSocket();
+           client = (SSLSocket) sctx.getSocketFactory().createSocket();
 
-            socket.setEnabledProtocols(new String[]{"SSLv3"});
-            socket.setUseClientMode(true);
-            socket.setSoTimeout(timeout * 10); //read timeout
+            client.setEnabledProtocols(new String[]{"SSLv3"});
+            client.setUseClientMode(true);
+            client.setSoTimeout(timeout); //read timeout
 
-            socket.connect(new InetSocketAddress(host, port), timeout); //connect timeout
-            socket.startHandshake();
+            client.connect(new InetSocketAddress(host, port), timeout); //connect timeout
+            client.startHandshake();
 
-            sess = socket.getSession();
+            sess = client.getSession();
             if (sess == null) {
                 throw new NullPointerException("null session");
             }
 
-           osw = new PrintStream(socket.getOutputStream(), false);
+           return new PrintStream(client.getOutputStream(),false);
     }
 
-    public void close() throws IOException,SocketException {
-           osw.close();
-           socket.close();
-    }
+    public InputStream accept(int port,int timeout) 
+           throws KeyStoreException,IOException,SocketException,NoSuchAlgorithmException,KeyManagementException
+    {
 
-    public void sendString(String message,int timeout) throws IOException,SocketException {
-           socket.setSoTimeout(timeout * 10);
-           osw.print(message);
-           osw.flush();
+       init_ctx();
+
+       server = (SSLServerSocket) sctx.getServerSocketFactory().createServerSocket();
+
+       server.setEnabledProtocols(new String[]{"SSLv3"});
+       server.setSoTimeout(timeout); 
+
+       server.bind(new InetSocketAddress(port));
+
+       SSLSocket conn = (SSLSocket) server.accept();
+
+       return conn.getInputStream();
     }
 
-    public void sendBytes(byte[] message,int len,int timeout) throws IOException,SocketException {
-           socket.setSoTimeout(timeout * 10);
-           osw.write(message,0,len);
-           osw.flush();
+    public void close() throws IOException,SocketException {
+           client.close();
     }
 
     /**
index 347236a..13711d5 100644 (file)
@@ -1,6 +1,7 @@
 package org.glite.lb;
 
 import java.io.IOException;
+import java.io.PrintStream;
 import java.security.*;
 
 /**
@@ -30,9 +31,9 @@ public class SSLSend {
        SSL lbsock = new SSL();
 
        lbsock.setProxy(keyStoreSender);
-       lbsock.connect(host,port,timeout);
+       PrintStream s = lbsock.connect(host,port,timeout);
 
-        lbsock.sendString(EDG_WLL_LOG_SOCKET_HEADER,timeout);
+        s.print(EDG_WLL_LOG_SOCKET_HEADER);
 
         message = message.replaceFirst("DG.LLLID=[0-9]* ", "");
         message = message.replaceFirst("DG.USER=\\x22[a-zA-Z ]*\\x22 ", "");
@@ -47,10 +48,10 @@ public class SSLSend {
         messageSize >>= 8;
         revertedInt[3] = (byte) (messageSize);
 
-        lbsock.sendBytes(revertedInt,4,timeout);
-       lbsock.sendString(message + '\n' + '\0',timeout);
-       lbsock.close();
-
+        s.write(revertedInt,0,4);
+       s.print(message + '\n' + '\0');
+       s.flush();
+       s.close();
     }
 
 }