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]