mturk       2005/06/10 03:47:37

  Modified:    jni/native/include ssl_private.h
               jni/native/src sslnetwork.c
  Log:
  Implement close and shutdown for SSL sockets.
  
  Revision  Changes    Path
  1.24      +2 -1      
jakarta-tomcat-connectors/jni/native/include/ssl_private.h
  
  Index: ssl_private.h
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jni/native/include/ssl_private.h,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- ssl_private.h     10 Jun 2005 10:31:09 -0000      1.23
  +++ ssl_private.h     10 Jun 2005 10:47:37 -0000      1.24
  @@ -192,6 +192,7 @@
   };
   
   typedef struct {
  +    apr_pool_t     *pool;
       tcn_ssl_ctxt_t *ctx;
       SSL            *ssl;
       X509           *cert;
  
  
  
  1.3       +52 -4     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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- sslnetwork.c      10 Jun 2005 10:31:09 -0000      1.2
  +++ sslnetwork.c      10 Jun 2005 10:47:37 -0000      1.3
  @@ -144,9 +144,9 @@
           goto cleanup;
       }
       SSL_clear(ssl);
  -
  -    con->ctx = c;
  -    con->ssl = ssl;
  +    con->pool = p;
  +    con->ctx  = c;
  +    con->ssl  = ssl;
       con->shutdown_type = c->shutdown_type;
       apr_pool_cleanup_register(p, (const void *)con,
                                 ssl_socket_cleanup,
  @@ -160,6 +160,54 @@
   
   }
   
  +TCN_IMPLEMENT_CALL(jint, SSLSocket, shutdown)(TCN_STDARGS, jlong sock,
  +                                              jint how)
  +{
  +    apr_status_t rv = APR_SUCCESS;
  +    tcn_ssl_conn_t *con = J2P(sock, tcn_ssl_conn_t *);
  +
  +    UNREFERENCED_STDARGS;
  +    TCN_ASSERT(sock != 0);
  +    if (con->ssl) {
  +        if (how < 0)
  +            how = con->shutdown_type;
  +        rv = ssl_smart_shutdown(con->ssl, how);
  +        /* TODO: Translate OpenSSL Error codes */
  +        SSL_free(con->ssl);
  +        con->ssl = NULL;
  +    }
  +    return (jint)rv;
  +}
  +
  +TCN_IMPLEMENT_CALL(jint, SSLSocket, close)(TCN_STDARGS, jlong sock)
  +{
  +    tcn_ssl_conn_t *con = J2P(sock, tcn_ssl_conn_t *);
  +    apr_status_t rv = APR_SUCCESS;
  +    UNREFERENCED_STDARGS;
  +    TCN_ASSERT(sock != 0);
  +
  +#ifdef TCN_DO_STATISTICS
  +    apr_atomic_inc32(&ssl_closed);
  +#endif
  +    apr_pool_cleanup_kill(con->pool, con, ssl_socket_cleanup);
  +    if (con->ssl) {
  +        rv = ssl_smart_shutdown(con->ssl, con->shutdown_type);
  +        SSL_free(con->ssl);
  +        con->ssl = NULL;
  +    }
  +    if (con->cert) {
  +        X509_free(con->cert);
  +        con->cert = NULL;
  +    }
  +    if (con->sock) {
  +        apr_status_t rc;
  +        if ((rc = apr_socket_close(con->sock)) != APR_SUCCESS)
  +            rv = rc;
  +        con->sock = NULL;
  +    }
  +    return (jint)rv;
  +}
  +
   
   
   
  
  
  

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

Reply via email to