mturk 2005/06/10 03:47:37 Modified: jni/native/include ssl_private.h jni/native/src sslnetwork.c Log: Implement close and shutdown for SSL sockets. Revision Changes Path 1.24 +2 -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.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- ssl_private.h 10 Jun 2005 10:31:09 -0000 1.23 +++ ssl_private.h 10 Jun 2005 10:47:37 -0000 1.24 @@ -192,6 +192,7 @@ }; typedef struct { + apr_pool_t *pool; tcn_ssl_ctxt_t *ctx; SSL *ssl; X509 *cert; 1.3 +52 -4 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.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- sslnetwork.c 10 Jun 2005 10:31:09 -0000 1.2 +++ sslnetwork.c 10 Jun 2005 10:47:37 -0000 1.3 @@ -144,9 +144,9 @@ goto cleanup; } SSL_clear(ssl); - - con->ctx = c; - con->ssl = ssl; + con->pool = p; + con->ctx = c; + con->ssl = ssl; con->shutdown_type = c->shutdown_type; apr_pool_cleanup_register(p, (const void *)con, ssl_socket_cleanup, @@ -160,6 +160,54 @@ } +TCN_IMPLEMENT_CALL(jint, SSLSocket, shutdown)(TCN_STDARGS, jlong sock, + jint how) +{ + apr_status_t rv = APR_SUCCESS; + tcn_ssl_conn_t *con = J2P(sock, tcn_ssl_conn_t *); + + UNREFERENCED_STDARGS; + TCN_ASSERT(sock != 0); + if (con->ssl) { + if (how < 0) + how = con->shutdown_type; + rv = ssl_smart_shutdown(con->ssl, how); + /* TODO: Translate OpenSSL Error codes */ + SSL_free(con->ssl); + con->ssl = NULL; + } + return (jint)rv; +} + +TCN_IMPLEMENT_CALL(jint, SSLSocket, close)(TCN_STDARGS, jlong sock) +{ + tcn_ssl_conn_t *con = J2P(sock, tcn_ssl_conn_t *); + apr_status_t rv = APR_SUCCESS; + UNREFERENCED_STDARGS; + TCN_ASSERT(sock != 0); + +#ifdef TCN_DO_STATISTICS + apr_atomic_inc32(&ssl_closed); +#endif + apr_pool_cleanup_kill(con->pool, con, ssl_socket_cleanup); + if (con->ssl) { + rv = ssl_smart_shutdown(con->ssl, con->shutdown_type); + SSL_free(con->ssl); + con->ssl = NULL; + } + if (con->cert) { + X509_free(con->cert); + con->cert = NULL; + } + if (con->sock) { + apr_status_t rc; + if ((rc = apr_socket_close(con->sock)) != APR_SUCCESS) + rv = rc; + con->sock = NULL; + } + return (jint)rv; +} +
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]