mturk 2005/06/10 04:30:54 Modified: jni/java/org/apache/tomcat/jni SSLSocket.java jni/native/src sslnetwork.c Log: Remve create because the SSL connection will be created either with accept or connect call. Revision Changes Path 1.2 +14 -3 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.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SSLSocket.java 10 Jun 2005 10:55:32 -0000 1.1 +++ SSLSocket.java 10 Jun 2005 11:30:54 -0000 1.2 @@ -28,12 +28,23 @@ public class SSLSocket { /** - * Create a socket. + * Accept a SSL connection. * @param ctx SSLContext to use. + * @param sock APR Socket that already did physical accept. * @param pool The pool to use * @return The new socket that has been set up. */ - public static native long create(long ctx, long pool) + public static native long accept(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. + */ + public static native long connect(long ctx, long sock long pool) throws Exception; 1.4 +67 -23 jakarta-tomcat-connectors/jni/native/src/sslnetwork.c Index: sslnetwork.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/sslnetwork.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- sslnetwork.c 10 Jun 2005 10:47:37 -0000 1.3 +++ sslnetwork.c 10 Jun 2005 11:30:54 -0000 1.4 @@ -120,44 +120,35 @@ return APR_SUCCESS; } -TCN_IMPLEMENT_CALL(jlong, SSLSocket, create)(TCN_STDARGS, jlong ctx, - jlong pool) +static tcn_ssl_conn_t *ssl_create(JNIEnv *env, tcn_ssl_ctxt_t *ctx, apr_pool_t *pool) { - tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *); - apr_pool_t *p = J2P(pool, apr_pool_t *); tcn_ssl_conn_t *con; SSL *ssl; - UNREFERENCED(o); - TCN_ASSERT(pool != 0); - TCN_ASSERT(ctx != 0); - - if ((con = apr_pcalloc(p, sizeof(tcn_ssl_conn_t))) == NULL) { - tcn_ThrowAPRException(e, apr_get_os_error()); - goto cleanup; + if ((con = apr_pcalloc(pool, sizeof(tcn_ssl_conn_t))) == NULL) { + tcn_ThrowAPRException(env, apr_get_os_error()); + return NULL; } - if ((ssl = SSL_new(c->ctx)) == NULL) { + if ((ssl = SSL_new(ctx->ctx)) == NULL) { char err[256]; ERR_error_string(ERR_get_error(), err); - tcn_Throw(e, "SSL_new failed (%s)", err); + tcn_Throw(env, "SSL_new failed (%s)", err); con = NULL; - goto cleanup; + return NULL; } SSL_clear(ssl); - con->pool = p; - con->ctx = c; + con->pool = pool; + con->ctx = ctx; con->ssl = ssl; - con->shutdown_type = c->shutdown_type; - apr_pool_cleanup_register(p, (const void *)con, + con->shutdown_type = ctx->shutdown_type; + apr_pool_cleanup_register(pool, (const void *)con, ssl_socket_cleanup, apr_pool_cleanup_null); #ifdef TCN_DO_STATISTICS ssl_created++; #endif -cleanup: - return P2J(con); - + return con; } TCN_IMPLEMENT_CALL(jint, SSLSocket, shutdown)(TCN_STDARGS, jlong sock, @@ -169,7 +160,7 @@ UNREFERENCED_STDARGS; TCN_ASSERT(sock != 0); if (con->ssl) { - if (how < 0) + if (how < 1) how = con->shutdown_type; rv = ssl_smart_shutdown(con->ssl, how); /* TODO: Translate OpenSSL Error codes */ @@ -208,7 +199,60 @@ return (jint)rv; } +TCN_IMPLEMENT_CALL(jlong, SSLSocket, accept)(TCN_STDARGS, jlong ctx, + jlong sock, jlong pool) +{ + tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *); + apr_socket_t *s = J2P(sock, apr_socket_t *); + apr_pool_t *p = J2P(pool, apr_pool_t *); + tcn_ssl_conn_t *con; + apr_os_sock_t oss; + + UNREFERENCED(o); + TCN_ASSERT(pool != 0); + TCN_ASSERT(ctx != 0); + TCN_ASSERT(sock != 0); + + if ((con = ssl_create(e, c, p)) == NULL) + return 0; + TCN_THROW_IF_ERR(apr_os_sock_get(&oss, s), c); + con->sock = s; + + SSL_set_fd(con->ssl, (int)oss); + SSL_set_accept_state(con->ssl); + + /* TODO: Do SSL_accept() */ +cleanup: + return P2J(con); +} + +TCN_IMPLEMENT_CALL(jlong, SSLSocket, connect)(TCN_STDARGS, jlong ctx, + jlong sock, jlong pool) +{ + tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *); + apr_socket_t *s = J2P(sock, apr_socket_t *); + apr_pool_t *p = J2P(pool, apr_pool_t *); + tcn_ssl_conn_t *con; + apr_os_sock_t oss; + + UNREFERENCED(o); + TCN_ASSERT(pool != 0); + TCN_ASSERT(ctx != 0); + TCN_ASSERT(sock != 0); + + if ((con = ssl_create(e, c, p)) == NULL) + return 0; + TCN_THROW_IF_ERR(apr_os_sock_get(&oss, s), c); + con->sock = s; + SSL_set_fd(con->ssl, (int)oss); + SSL_set_connect_state(con->ssl); + + /* TODO: Do SSL_connect() */ + +cleanup: + return P2J(con); +} #else
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]