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]