Author: mturk
Date: Tue Apr 4 05:32:16 2006
New Revision: 391288
URL: http://svn.apache.org/viewcvs?rev=391288&view=rev
Log:
Fix ssl code by properly registering the socket
shutdown modes.
Modified:
tomcat/connectors/trunk/jni/native/src/sslnetwork.c
Modified: tomcat/connectors/trunk/jni/native/src/sslnetwork.c
URL:
http://svn.apache.org/viewcvs/tomcat/connectors/trunk/jni/native/src/sslnetwork.c?rev=391288&r1=391287&r2=391288&view=diff
==============================================================================
--- tomcat/connectors/trunk/jni/native/src/sslnetwork.c (original)
+++ tomcat/connectors/trunk/jni/native/src/sslnetwork.c Tue Apr 4 05:32:16 2006
@@ -289,19 +289,22 @@
int i = SSL_get_error(con->ssl, s);
switch (i) {
case SSL_ERROR_NONE:
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
return APR_SUCCESS;
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
if ((rv = wait_for_io_or_timeout(con, i)) != APR_SUCCESS) {
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return rv;
}
break;
case SSL_ERROR_SYSCALL:
+ case SSL_ERROR_SSL:
s = apr_get_netos_error();
if (!APR_STATUS_IS_EAGAIN(s) &&
!APR_STATUS_IS_EINTR(s)) {
- con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return s;
}
break;
@@ -309,7 +312,7 @@
/*
* Anything else is a fatal error
*/
- con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return SSL_TO_APR_ERROR(i);
break;
}
@@ -319,7 +322,7 @@
*/
if (SSL_get_verify_result(con->ssl) != X509_V_OK) {
/* TODO: Log SSL client authentication failed */
- con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
/* TODO: Figure out the correct return value */
return APR_EGENERAL;
}
@@ -355,28 +358,33 @@
switch (i) {
case SSL_ERROR_ZERO_RETURN:
*len = 0;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
return APR_EOF;
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
if ((rv = wait_for_io_or_timeout(con, i)) != APR_SUCCESS) {
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return rv;
}
break;
case SSL_ERROR_SYSCALL:
+ case SSL_ERROR_SSL:
if (!APR_STATUS_IS_EAGAIN(os) &&
!APR_STATUS_IS_EINTR(os)) {
- con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return os;
}
break;
default:
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return os;
break;
}
}
else {
*len = s;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
break;
}
}
@@ -388,16 +396,17 @@
apr_size_t *len)
{
tcn_ssl_conn_t *con = (tcn_ssl_conn_t *)sock;
- int s, rd = (int)(*len);
+ int s, wr = (int)(*len);
apr_status_t rv = APR_SUCCESS;
for (;;) {
- if ((s = SSL_write(con->ssl, buf, rd)) <= 0) {
+ if ((s = SSL_write(con->ssl, buf, wr)) <= 0) {
apr_status_t os = apr_get_netos_error();
int i = SSL_get_error(con->ssl, s);
switch (i) {
case SSL_ERROR_ZERO_RETURN:
*len = 0;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
return APR_EOF;
break;
case SSL_ERROR_WANT_READ:
@@ -407,13 +416,15 @@
}
break;
case SSL_ERROR_SYSCALL:
+ case SSL_ERROR_SSL:
if (!APR_STATUS_IS_EAGAIN(os) &&
!APR_STATUS_IS_EINTR(os)) {
- con->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return os;
}
break;
default:
+ con->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
return os;
break;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]