mturk       2005/06/11 11:25:23

  Modified:    jni/native/src sslnetwork.c
  Log:
  Add needed callbacks for server mode, and fix the handshake.
  
  Revision  Changes    Path
  1.8       +37 -24    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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- sslnetwork.c      11 Jun 2005 07:02:56 -0000      1.7
  +++ sslnetwork.c      11 Jun 2005 18:25:23 -0000      1.8
  @@ -147,7 +147,19 @@
       apr_pool_cleanup_register(pool, (const void *)con,
                                 ssl_socket_cleanup,
                                 apr_pool_cleanup_null);
  -    SSL_set_app_data2(ssl, (void *)con);
  +    SSL_set_app_data(ssl, (void *)con);
  +
  +    if (ctx->mode) {
  +        /*
  +         *  Configure callbacks for SSL connection
  +         */
  +        SSL_set_tmp_rsa_callback(ssl, SSL_callback_tmp_RSA);
  +        SSL_set_tmp_dh_callback(ssl,  SSL_callback_tmp_DH);
  +        SSL_set_session_id_context(ssl, &(ctx->context_id[0]),
  +                                   MD5_DIGEST_LENGTH);
  +    }
  +    SSL_set_verify_result(ssl, X509_V_OK);
  +
   
   #ifdef TCN_DO_STATISTICS
       ssl_created++;
  @@ -156,16 +168,14 @@
   }
   
   static apr_status_t wait_for_io_or_timeout(tcn_ssl_conn_t *con,
  -                                           apr_interval_time_t t,
                                              int for_what)
   {
  -    apr_interval_time_t timeout = t;
  +    apr_interval_time_t timeout;
       apr_pollfd_t pfd;
       int type = for_what == SSL_ERROR_WANT_WRITE ? APR_POLLOUT : APR_POLLIN;
       apr_status_t status;
   
  -    if (timeout < 0)
  -        apr_socket_timeout_get(con->sock, &timeout);
  +    apr_socket_timeout_get(con->sock, &timeout);
       pfd.desc_type = APR_POLL_SOCKET;
       pfd.desc.s = con->sock;
       pfd.reqevents = type;
  @@ -418,25 +428,28 @@
       TCN_ASSERT(sock != 0);
   
       for (;;) {
  -        if ((s = SSL_do_handshake(con->ssl)) != 0) {
  -            i = SSL_get_error(con->ssl, s);
  -            switch (i) {
  -                case SSL_ERROR_NONE:
  -                    return APR_SUCCESS;
  -                break;
  -                case SSL_ERROR_WANT_READ:
  -                case SSL_ERROR_WANT_WRITE:
  -                    if ((rv = wait_for_io_or_timeout(con, -1, i)) != 
APR_SUCCESS) {
  -                        return rv;
  -                    }
  -                break;
  -                default:
  -                    return SSL_TO_APR_ERROR(i);
  -                break;
  -            }
  -        }
  -        else
  +        s = SSL_do_handshake(con->ssl);
  +        i = SSL_get_error(con->ssl, s);
  +        switch (i) {
  +            case SSL_ERROR_NONE:
  +                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) {
  +                    return rv;
  +                }
  +            break;
  +            case SSL_ERROR_SYSCALL:
  +                s = apr_get_netos_error();
  +                if (!APR_STATUS_IS_EAGAIN(s) &&
  +                    !APR_STATUS_IS_EINTR(s))
  +                    return s;
  +            break;
  +            default:
  +                return SSL_TO_APR_ERROR(i);
  +            break;
  +        }
       }
       return APR_SUCCESS;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to