mturk 2005/06/11 00:03:45 Modified: jni/examples/org/apache/tomcat/jni SSLServer.java jni/java/org/apache/tomcat/jni SSLSocket.java jni/native/include ssl_private.h jni/native/os/netware system.c jni/native/os/unix system.c jni/native/os/win32 system.c jni/native/src ssl.c sslcontext.c Log: Remove accept and connect. Use two new functions attach and handshake. Revision Changes Path 1.5 +96 -4 jakarta-tomcat-connectors/jni/examples/org/apache/tomcat/jni/SSLServer.java Index: SSLServer.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/examples/org/apache/tomcat/jni/SSLServer.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SSLServer.java 9 Jun 2005 09:13:54 -0000 1.4 +++ SSLServer.java 11 Jun 2005 07:03:45 -0000 1.5 @@ -17,12 +17,14 @@ public static String serverAddr = null; public static int serverPort = 0; public static int serverNmax = 0; + public static int serverNrun = 0; public static long serverPool = 0; public static long serverCtx = 0; public static String serverCert = null; public static String serverKey = null; public static String serverCiphers = null; public static String serverPassword = null; + private static Acceptor serverAcceptor = null; private static Object threadLock = new Object(); @@ -58,15 +60,105 @@ SSLContext.setCipherSuite(serverCtx, serverCiphers); /* Load Server key and certificate */ SSLContext.setCertificate(serverCtx, serverCert, serverKey, serverPassword, SSL.SSL_AIDX_RSA); - SSLContext.setVerifyDepth(serverCtx, 10); - SSLContext.setVerifyClient(serverCtx, SSL.SSL_CVERIFY_REQUIRE); - + SSLContext.setVerify(serverCtx, SSL.SSL_CVERIFY_REQUIRE, 10); + serverAcceptor = new Acceptor(); + serverAcceptor.start(); + } catch (Exception e) { e.printStackTrace(); } } + public static void incThreads() { + synchronized(threadLock) { + serverNrun++; + } + } + + public static void decThreads() { + synchronized(threadLock) { + serverNrun--; + } + } + + /* Acceptor thread. Listens for new connections */ + private class Acceptor extends Thread { + private long serverSock = 0; + private long inetAddress = 0; + private long pool = 0; + public Acceptor() throws Exception { + try { + + pool = Pool.create(SSLServer.serverPool); + System.out.println("Accepting: " + SSLServer.serverAddr + ":" + + SSLServer.serverPort); + inetAddress = Address.info(SSLServer.serverAddr, Socket.APR_INET, + SSLServer.serverPort, 0, + pool); + serverSock = Socket.create(Socket.APR_INET, Socket.SOCK_STREAM, + Socket.APR_PROTO_TCP, pool); + long sa = Address.get(Socket.APR_LOCAL, serverSock); + Sockaddr addr = new Sockaddr(); + if (Address.fill(addr, sa)) { + System.out.println("Host: " + addr.hostname); + System.out.println("Server: " + addr.servname); + System.out.println("IP: " + Address.getip(sa) + + ":" + addr.port); + } + int rc = Socket.bind(serverSock, inetAddress); + if (rc != 0) { + throw(new Exception("Can't create Acceptor: bind: " + Error.strerror(rc))); + } + Socket.listen(serverSock, 5); + } + catch( Exception ex ) { + ex.printStackTrace(); + throw(new Exception("Can't create Acceptor")); + } + } + public void run() { + int i = 0; + try { + while (true) { + long clientSock = Socket.accept(serverSock, pool); + System.out.println("Accepted id: " + i); + + try { + long sa = Address.get(Socket.APR_REMOTE, clientSock); + Sockaddr raddr = new Sockaddr(); + if (Address.fill(raddr, sa)) { + System.out.println("Remote Host: " + Address.getnameinfo(sa, 0)); + System.out.println("Remote IP: " + Address.getip(sa) + + ":" + raddr.port); + } + sa = Address.get(Socket.APR_LOCAL, clientSock); + Sockaddr laddr = new Sockaddr(); + if (Address.fill(laddr, sa)) { + System.out.println("Local Host: " + laddr.hostname); + System.out.println("Local Server: " + Address.getnameinfo(sa, 0)); + System.out.println("Local IP: " + Address.getip(sa) + + ":" + laddr.port); + } + + } catch (Exception e) { + // Ignore + e.printStackTrace(); + } + + Socket.timeoutSet(clientSock, 10000000); + long sslSocket = SSLSocket.attach(SSLServer.serverCtx, clientSock, pool); + i = SSLSocket.handshake(sslSocket); + System.out.println("Handskake : " + i); + + SSLSocket.close(sslSocket); + } + } + catch( Exception ex ) { + ex.printStackTrace(); + } + } + } public static void main(String [] args) { try { Library.initialize(null); 1.5 +9 -18 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSLSocket.java Index: SSLSocket.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSLSocket.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SSLSocket.java 10 Jun 2005 17:15:56 -0000 1.4 +++ SSLSocket.java 11 Jun 2005 07:03:45 -0000 1.5 @@ -28,25 +28,21 @@ public class SSLSocket { /** - * Accept a SSL connection. + * Attach APR socket on a SSL connection. * @param ctx SSLContext to use. - * @param sock APR Socket that already did physical accept. + * @param sock APR Socket that already did physical connect. + * @param pool The pool to use * @param pool The pool to use * @return The new socket that has been set up. */ - public static native long accept(long ctx, long sock, long pool) + public static native long attach(long ctx, long sock, long pool) throws Exception; /** - * Connect on a SSL connection. - * @param ctx SSLContext to use. - * @param sock APR Socket that already did physical connect. - * @param pool The pool to use - * @return The new socket that has been set up. + * Do a SSL handshake. + * @param thesocket The socket to close */ - public static native long connect(long ctx, long sock, long pool) - throws Exception; - + public static native int handshake(long thesocket); /** * Shutdown a socket. @@ -72,10 +68,5 @@ */ public static native int close(long thesocket); - /** - * Get the SSL error code. - * @param thesocket The SSL socket to use. - * @retcode the "local" error code returned by SSL. - * @return the error code. - public static native int geterror(long thesocket, int retcode); + } 1.25 +13 -1 jakarta-tomcat-connectors/jni/native/include/ssl_private.h Index: ssl_private.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/ssl_private.h,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- ssl_private.h 10 Jun 2005 10:47:37 -0000 1.24 +++ ssl_private.h 11 Jun 2005 07:03:45 -0000 1.25 @@ -139,6 +139,17 @@ #define SSL_SHUTDOWN_TYPE_UNCLEAN (2) #define SSL_SHUTDOWN_TYPE_ACCURATE (3) +#define SSL_TO_APR_ERROR(X) (APR_OS_START_USERERR + 1000 + X) + +#define SSL_VERIFY_ERROR_IS_OPTIONAL(errnum) \ + ((errnum == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) \ + || (errnum == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) \ + || (errnum == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) \ + || (errnum == X509_V_ERR_CERT_UNTRUSTED) \ + || (errnum == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE)) + + + #define SSL_DEFAULT_PASS_PROMPT "Some of your private key files are encrypted for security reasons.\n" \ "In order to read them you have to provide the pass phrases.\n" \ "Enter password :" @@ -198,6 +209,7 @@ X509 *cert; int shutdown_type; apr_socket_t *sock; + apr_pollset_t *pollset; } tcn_ssl_conn_t; 1.5 +2 -1 jakarta-tomcat-connectors/jni/native/os/netware/system.c Index: system.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/os/netware/system.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- system.c 24 May 2005 09:25:36 -0000 1.4 +++ system.c 11 Jun 2005 07:03:45 -0000 1.5 @@ -22,6 +22,7 @@ #include "apr.h" #include "apr_pools.h" #include "apr_network_io.h" +#include "apr_poll.h" #include "tcn.h" 1.6 +2 -1 jakarta-tomcat-connectors/jni/native/os/unix/system.c Index: system.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/os/unix/system.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- system.c 28 May 2005 11:40:52 -0000 1.5 +++ system.c 11 Jun 2005 07:03:45 -0000 1.6 @@ -22,6 +22,7 @@ #include "apr.h" #include "apr_pools.h" #include "apr_network_io.h" +#include "apr_pol.h" #include "tcn.h" #if defined(__linux__) 1.7 +3 -2 jakarta-tomcat-connectors/jni/native/os/win32/system.c Index: system.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/os/win32/system.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- system.c 7 Jun 2005 12:41:44 -0000 1.6 +++ system.c 11 Jun 2005 07:03:45 -0000 1.7 @@ -24,6 +24,7 @@ #include <winsock.h> #include "apr.h" #include "apr_pools.h" +#include "apr_poll.h" #include "apr_network_io.h" #include "apr_arch_misc.h" /* for apr_os_level */ #include "apr_arch_atime.h" /* for FileTimeToAprTime */ @@ -266,7 +267,7 @@ 0, &id); WaitForSingleObject(thread, INFINITE); CloseHandle(thread); - return strlen(data->password); + return (int)strlen(data->password); } 1.32 +2 -1 jakarta-tomcat-connectors/jni/native/src/ssl.c Index: ssl.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/ssl.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- ssl.c 9 Jun 2005 10:44:06 -0000 1.31 +++ ssl.c 11 Jun 2005 07:03:45 -0000 1.32 @@ -26,6 +26,7 @@ #include "apr_thread_mutex.h" #include "apr_strings.h" #include "apr_atomic.h" +#include "apr_poll.h" #include "tcn.h" 1.33 +2 -1 jakarta-tomcat-connectors/jni/native/src/sslcontext.c Index: sslcontext.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/sslcontext.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- sslcontext.c 10 Jun 2005 07:53:24 -0000 1.32 +++ sslcontext.c 11 Jun 2005 07:03:45 -0000 1.33 @@ -24,6 +24,7 @@ #include "apr_file_io.h" #include "apr_portable.h" #include "apr_thread_mutex.h" +#include "apr_poll.h" #include "tcn.h"
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]