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]

Reply via email to