mturk 2005/06/17 05:04:40
Modified: jni/java/org/apache/tomcat/jni SSLSocket.java
jni/native/src sslnetwork.c
Log:
Fix bug not setting the opaque for SSL socket.
Attach now returns the status code, not new socket.
Revision Changes Path
1.14 +3 -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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- SSLSocket.java 17 Jun 2005 11:22:04 -0000 1.13
+++ SSLSocket.java 17 Jun 2005 12:04:40 -0000 1.14
@@ -33,9 +33,9 @@
* @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.
+ * @return APR_STATUS code.
*/
- public static native long attach(long ctx, long sock, long pool)
+ public static native int attach(long ctx, long sock, long pool)
throws Exception;
/**
1.14 +9 -149 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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- sslnetwork.c 17 Jun 2005 11:22:30 -0000 1.13
+++ sslnetwork.c 17 Jun 2005 12:04:40 -0000 1.14
@@ -245,147 +245,6 @@
return (jint)rv;
}
-#define JFC_TEST 0
-#if JFC_TEST
-/*
- * Use APR sockets directly
- */
-
-static int jbs_apr_new(BIO *bi)
-{
- printf("jbs_apr_new\n");
- fflush(stdout);
- bi->shutdown = 1;
- bi->init = 0;
- bi->num = -1;
- bi->ptr = NULL;
- return 1;
-}
-
-static int jbs_apr_free(BIO *bi)
-{
- if (bi == NULL)
- return 0;
- else
- return 1;
-}
-
-static int jbs_apr_write(BIO *b, const char *in, int inl)
-{
- apr_size_t j = inl;
- apr_socket_t *sock=b->ptr;
- printf("jbs_apr_write\n");
- fflush(stdout);
- return(apr_socket_send(sock, in, &j));
-}
-
-static int jbs_apr_read(BIO *b, char *out, int outl)
-{
- apr_size_t j = outl;
- apr_socket_t *sock=b->ptr;
- int ret;
- printf("jbs_apr_read\n");
- fflush(stdout);
- ret = apr_socket_recv(sock, out, &j);
- if (ret == APR_SUCCESS)
- return(j);
- return(-1);
-}
-
-static int jbs_apr_puts(BIO *b, const char *in)
-{
- return 0;
-}
-
-static int jbs_apr_gets(BIO *b, char *out, int outl)
-{
- return 0;
-}
-
-static long jbs_apr_ctrl(BIO *b, int cmd, long num, void *ptr)
-{
- printf("jbs_apr_ctrl\n");
- fflush(stdout);
- if (cmd==BIO_CTRL_FLUSH || cmd==BIO_CTRL_DUP)
- return 1;
- else
- return 0;
-}
-static BIO_METHOD jbs_apr_methods = {
- BIO_TYPE_FILE,
- "APR Callback",
- jbs_apr_write,
- jbs_apr_read,
- jbs_apr_puts,
- jbs_apr_gets,
- jbs_apr_ctrl,
- jbs_apr_new,
- jbs_apr_free,
- NULL
-};
-static BIO_METHOD *BIO_jbs_apr()
-{
- return(&jbs_apr_methods);
-}
-
-TCN_IMPLEMENT_CALL(jint, SSLSocket, geterror)(TCN_STDARGS, jlong ctx, jint
retcode)
-{
- tcn_ssl_conn_t *c = J2P(ctx, tcn_ssl_conn_t *);
- UNREFERENCED_STDARGS;
- TCN_ASSERT(ctx != 0);
- printf("geterror for %d state: %.08x\n", retcode, c->ssl->state);
- perror("geterror");
- fflush(stdout);
- return SSL_get_error(c->ssl, retcode);
-}
-
-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;
- BIO *bio = NULL;
- int retcode;
-
- UNREFERENCED(o);
- TCN_ASSERT(pool != 0);
- TCN_ASSERT(ctx != 0);
- TCN_ASSERT(sock != 0);
-
- if ((con = ssl_create(e, c, p)) == NULL) {
- tcn_ThrowException(e, "Create SSL failed");
- return 0;
- }
- con->sock = s;
-
- if ((bio = BIO_new(BIO_jbs_apr())) == NULL) {
- tcn_ThrowException(e, "Create BIO failed");
- return 0;
- }
- bio->ptr = s;
-
- /* XXX cleanup ??? */
-
- /* the bio */
- SSL_set_bio(con->ssl, bio, bio);
-
- /* do the handshake*/
- retcode = SSL_accept(con->ssl);
- if (retcode<=0) {
- printf("SSL_accept failed %d state: %.08x\n", retcode,
con->ssl->state);
- printf("SSL_accept %p cert\n", con->ssl->cert);
- tcn_ThrowException(e, "Create SSL_accept failed");
- return 0;
- }
-
-cleanup:
- return P2J(con);
-}
-
-#endif /* JFC_TEST */
-
TCN_IMPLEMENT_CALL(jint, SSLSocket, handshake)(TCN_STDARGS, jlong sock)
{
tcn_socket_t *ss = J2P(sock, tcn_socket_t *);
@@ -555,7 +414,6 @@
else
bytes = (*e)->GetByteArrayElements(e, buf, NULL);
ss = ssl_socket_send(s, bytes + offset, &nbytes);
-
if (nb)
(*e)->ReleasePrimitiveArrayCritical(e, buf, bytes, JNI_ABORT);
else
@@ -740,23 +598,25 @@
}
}
-TCN_IMPLEMENT_CALL(jlong, SSLSocket, attach)(TCN_STDARGS, jlong ctx,
- jlong sock, jlong pool)
+TCN_IMPLEMENT_CALL(jint, SSLSocket, attach)(TCN_STDARGS, jlong ctx,
+ jlong sock, jlong pool)
{
tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
tcn_socket_t *s = J2P(sock, tcn_socket_t *);
apr_pool_t *p = J2P(pool, apr_pool_t *);
tcn_ssl_conn_t *con;
apr_os_sock_t oss;
+ apr_status_t rv;
UNREFERENCED(o);
TCN_ASSERT(pool != 0);
TCN_ASSERT(ctx != 0);
TCN_ASSERT(sock != 0);
+ if ((rv = apr_os_sock_get(&oss, s->sock)) != APR_SUCCESS)
+ return rv;
if ((con = ssl_create(e, c, p)) == NULL)
- return 0;
- TCN_THROW_IF_ERR(apr_os_sock_get(&oss, s->sock), c);
+ return APR_EGENERAL;
con->sock = s->sock;
SSL_set_fd(con->ssl, (int)oss);
@@ -776,9 +636,9 @@
s->recvt = TCN_GETNET_METHOD(recvt);
s->recvb = TCN_GETNET_METHOD(recvb);
s->recvbt = TCN_GETNET_METHOD(recvbt);
+ s->opaque = con;
-cleanup:
- return P2J(con);
+ return APR_SUCCESS;
}
#else
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]