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]