mturk       2005/07/02 00:19:11

  Modified:    jni/native/include tcn.h
               jni/native/os/unix uxpipe.c
               jni/native/os/win32 ntpipe.c
               jni/native/src network.c sslnetwork.c
  Log:
  Used abstract structure for setting the network layer instead directly
  setting the functions. There is no function change, just the code is
  easier to read and maintain.
  
  Revision  Changes    Path
  1.29      +14 -11    jakarta-tomcat-connectors/jni/native/include/tcn.h
  
  Index: tcn.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/tcn.h,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- tcn.h     30 Jun 2005 08:20:56 -0000      1.28
  +++ tcn.h     2 Jul 2005 07:19:10 -0000       1.29
  @@ -120,21 +120,24 @@
   #define TCN_SOCKET_GET_TYPE 3
   
   typedef struct {
  -    apr_pool_t   *pool;
  -    apr_socket_t *sock;
  -    void         *opaque;
  -    int          type;
  +    int type;
       apr_status_t (*cleanup)(void *);
  -    apr_status_t (APR_THREAD_FUNC *tmset)(apr_socket_t *, 
apr_interval_time_t);
  -    apr_status_t (APR_THREAD_FUNC *tmget)(apr_socket_t *, 
apr_interval_time_t *);
  -    apr_status_t (APR_THREAD_FUNC *set)(apr_socket_t *, apr_int32_t, 
apr_int32_t);
  -    apr_status_t (APR_THREAD_FUNC *get)(apr_socket_t *, apr_int32_t, 
apr_int32_t *);
  +    apr_status_t (APR_THREAD_FUNC *close) (apr_socket_t *);
  +    apr_status_t (APR_THREAD_FUNC *shutdown) (apr_socket_t *, 
apr_shutdown_how_e);
  +    apr_status_t (APR_THREAD_FUNC *opt_get)(apr_socket_t *, apr_int32_t, 
apr_int32_t *);
  +    apr_status_t (APR_THREAD_FUNC *opt_set)(apr_socket_t *, apr_int32_t, 
apr_int32_t);
  +    apr_status_t (APR_THREAD_FUNC *timeout_get)(apr_socket_t *, 
apr_interval_time_t *);
  +    apr_status_t (APR_THREAD_FUNC *timeout_set)(apr_socket_t *, 
apr_interval_time_t);
       apr_status_t (APR_THREAD_FUNC *send) (apr_socket_t *, const char *, 
apr_size_t *);
       apr_status_t (APR_THREAD_FUNC *sendv)(apr_socket_t *, const struct iovec 
*, apr_int32_t, apr_size_t *);
       apr_status_t (APR_THREAD_FUNC *recv) (apr_socket_t *, char *, apr_size_t 
*);
  -    apr_status_t (APR_THREAD_FUNC *close) (apr_socket_t *);
  -    apr_status_t (APR_THREAD_FUNC *shutdown) (apr_socket_t *, 
apr_shutdown_how_e);
  +} tcn_nlayer_t;
   
  +typedef struct {
  +    apr_pool_t   *pool;
  +    apr_socket_t *sock;
  +    void         *opaque;
  +    tcn_nlayer_t *net;
   } tcn_socket_t;
   
   /* Private helper functions */
  
  
  
  1.3       +21 -25    jakarta-tomcat-connectors/jni/native/os/unix/uxpipe.c
  
  Index: uxpipe.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/os/unix/uxpipe.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- uxpipe.c  30 Jun 2005 15:22:32 -0000      1.2
  +++ uxpipe.c  2 Jul 2005 07:19:10 -0000       1.3
  @@ -180,6 +180,20 @@
       return APR_SUCCESS;
   }
   
  +static tcn_nlayer_t uxp_socket_layer = {
  +    TCN_SOCKET_UNIX,
  +    uxp_cleanup,
  +    uxp_socket_close,
  +    uxp_socket_shutdown,
  +    uxp_socket_opt_get,
  +    uxp_socket_opt_set,
  +    uxp_socket_timeout_get,
  +    uxp_socket_timeout_set,
  +    uxp_socket_send,
  +    uxp_socket_sendv,
  +    uxp_socket_recv
  +};
  +
   TCN_IMPLEMENT_CALL(jlong, Local, create)(TCN_STDARGS, jstring name,
                                            jlong pool)
   {
  @@ -212,17 +226,9 @@
       else
           strcpy(con->uxaddr.sun_path, DEFNAME);
       s = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
  -    s->pool     = p;
  -    s->type     = TCN_SOCKET_UNIX;
  -    s->cleanup  = uxp_cleanup;
  -    s->recv     = uxp_socket_recv;
  -    s->send     = uxp_socket_send;
  -    s->sendv    = uxp_socket_sendv;
  -    s->shutdown = uxp_socket_shutdown;
  -    s->tmget    = uxp_socket_timeout_get;
  -    s->tmset    = uxp_socket_timeout_set;
  -    s->close    = uxp_socket_close;
  -    s->opaque   = con;
  +    s->pool   = p;
  +    s->net    = &uxp_socket_layer;
  +    s->opaque = con;
       apr_pool_cleanup_register(p, (const void *)s,
                                 uxp_socket_cleanup,
                                 apr_pool_cleanup_null);
  @@ -305,19 +311,9 @@
           apr_atomic_inc32(&uxp_accepted);
   #endif
           a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
  -        a->pool = p;
  -        a->type     = TCN_SOCKET_UNIX;
  -        a->cleanup  = uxp_cleanup;
  -        a->recv     = uxp_socket_recv;
  -        a->send     = uxp_socket_send;
  -        a->sendv    = uxp_socket_sendv;
  -        a->shutdown = uxp_socket_shutdown;
  -        a->tmget    = uxp_socket_timeout_get;
  -        a->tmset    = uxp_socket_timeout_set;
  -        a->get      = uxp_socket_opt_get;
  -        a->set      = uxp_socket_opt_set;
  -        a->close    = uxp_socket_close;
  -        a->opaque   = con;
  +        a->pool   = p;
  +         a->net    = &uxp_socket_layer;
  +        a->opaque = con;
           apr_pool_cleanup_register(p, (const void *)a,
                                     uxp_socket_cleanup,
                                     apr_pool_cleanup_null);
  
  
  
  1.3       +28 -34    jakarta-tomcat-connectors/jni/native/os/win32/ntpipe.c
  
  Index: ntpipe.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/os/win32/ntpipe.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ntpipe.c  30 Jun 2005 08:20:56 -0000      1.2
  +++ ntpipe.c  2 Jul 2005 07:19:10 -0000       1.3
  @@ -265,9 +265,9 @@
   {
       tcn_socket_t *s = (tcn_socket_t *)data;
   
  -    if (s->cleanup) {
  -        (*s->cleanup)(s->opaque);
  -        s->cleanup = NULL;
  +    if (s->net->cleanup) {
  +        (*s->net->cleanup)(s->opaque);
  +        s->net->cleanup = NULL;
       }
   #ifdef TCN_DO_STATISTICS
       apr_atomic_inc32(&ntp_cleared);
  @@ -275,6 +275,20 @@
       return APR_SUCCESS;
   }
   
  +static tcn_nlayer_t ntp_socket_layer = {
  +    TCN_SOCKET_NTPIPE,
  +    ntp_cleanup,
  +    ntp_socket_close,
  +    ntp_socket_shutdown,
  +    ntp_socket_opt_get,
  +    ntp_socket_opt_set,
  +    ntp_socket_timeout_get,
  +    ntp_socket_timeout_set,
  +    ntp_socket_send,
  +    ntp_socket_sendv,
  +    ntp_socket_recv
  +};
  +
   static BOOL create_DACL(LPSECURITY_ATTRIBUTES psa)
   {
   
  @@ -321,19 +335,9 @@
       }
   
       s = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
  -    s->pool     = p;
  -    s->type     = TCN_SOCKET_NTPIPE;
  -    s->cleanup  = ntp_cleanup;
  -    s->recv     = ntp_socket_recv;
  -    s->send     = ntp_socket_send;
  -    s->sendv    = ntp_socket_sendv;
  -    s->shutdown = ntp_socket_shutdown;
  -    s->tmget    = ntp_socket_timeout_get;
  -    s->tmset    = ntp_socket_timeout_set;
  -    s->get      = ntp_socket_opt_get;
  -    s->set      = ntp_socket_opt_set;
  -    s->close    = ntp_socket_close;
  -    s->opaque   = con;
  +    s->pool   = p;
  +    s->net    = &ntp_socket_layer;
  +    s->opaque = con;
       apr_pool_cleanup_register(p, (const void *)s,
                                 ntp_socket_cleanup,
                                 apr_pool_cleanup_null);
  @@ -350,7 +354,7 @@
       UNREFERENCED_STDARGS;
       UNREFERENCED(sa);
       TCN_ASSERT(sock != 0);
  -    if (s->type == TCN_SOCKET_NTPIPE) {
  +    if (s->net->type == TCN_SOCKET_NTPIPE) {
           tcn_ntp_conn_t *c = (tcn_ntp_conn_t *)s->opaque;
           c->mode = TCN_NTP_SERVER;
           return APR_SUCCESS;
  @@ -366,7 +370,7 @@
       UNREFERENCED_STDARGS;
   
       TCN_ASSERT(sock != 0);
  -    if (s->type == TCN_SOCKET_NTPIPE) {
  +    if (s->net->type == TCN_SOCKET_NTPIPE) {
           tcn_ntp_conn_t *c = (tcn_ntp_conn_t *)s->opaque;
           c->mode = TCN_NTP_SERVER;
           if (backlog > 0)
  @@ -390,7 +394,7 @@
       TCN_ASSERT(sock != 0);
   
       TCN_THROW_IF_ERR(apr_pool_create(&p, s->pool), p);
  -    if (s->type == TCN_SOCKET_NTPIPE) {
  +    if (s->net->type == TCN_SOCKET_NTPIPE) {
           tcn_ntp_conn_t *c = (tcn_ntp_conn_t *)s->opaque;
           con = (tcn_ntp_conn_t *)apr_pcalloc(p, sizeof(tcn_ntp_conn_t));
           con->pool = p;
  @@ -434,19 +438,9 @@
           apr_atomic_inc32(&ntp_accepted);
   #endif
           a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
  -        a->pool = p;
  -        a->type     = TCN_SOCKET_NTPIPE;
  -        a->cleanup  = ntp_cleanup;
  -        a->recv     = ntp_socket_recv;
  -        a->send     = ntp_socket_send;
  -        a->sendv    = ntp_socket_sendv;
  -        a->shutdown = ntp_socket_shutdown;
  -        a->tmget    = ntp_socket_timeout_get;
  -        a->tmset    = ntp_socket_timeout_set;
  -        a->get      = ntp_socket_opt_get;
  -        a->set      = ntp_socket_opt_set;
  -        a->close    = ntp_socket_close;
  -        a->opaque   = con;
  +        a->pool   = p;
  +        a->net    = &ntp_socket_layer;
  +        a->opaque = con;
           apr_pool_cleanup_register(p, (const void *)a,
                                     ntp_socket_cleanup,
                                     apr_pool_cleanup_null);
  @@ -469,7 +463,7 @@
       UNREFERENCED(o);
       UNREFERENCED(sa);
       TCN_ASSERT(sock != 0);
  -    if (s->type != TCN_SOCKET_NTPIPE)
  +    if (s->net->type != TCN_SOCKET_NTPIPE)
           return APR_ENOTSOCK;
       con = (tcn_ntp_conn_t *)s->opaque;
       if (con->mode == TCN_NTP_SERVER)
  
  
  
  1.42      +74 -70    jakarta-tomcat-connectors/jni/native/src/network.c
  
  Index: network.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/network.c,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- network.c 30 Jun 2005 08:20:56 -0000      1.41
  +++ network.c 2 Jul 2005 07:19:10 -0000       1.42
  @@ -40,6 +40,11 @@
   static volatile apr_uint32_t sp_rst_recv = 0;
   static volatile apr_status_t sp_erl_recv = 0;
   
  +static volatile apr_size_t   sf_max_send = 0;
  +static volatile apr_size_t   sf_min_send = 10000000;
  +static volatile apr_uint32_t sf_num_send = 0;
  +static volatile apr_off_t    sf_tot_send = 0;
  +
   #endif
   
   #if  !APR_HAVE_IPV6
  @@ -78,6 +83,11 @@
       fprintf(stderr, "Receive errors          : %d\n", sp_err_recv);
       fprintf(stderr, "Receive resets          : %d\n", sp_rst_recv);
       fprintf(stderr, "Last receive error      : %d\n", sp_erl_recv);
  +
  +    fprintf(stderr, "Total sendfile calls    : %d\n", sf_num_send);
  +    fprintf(stderr, "Minimum sendfile lenght : %d\n", sf_min_send);
  +    fprintf(stderr, "Maximum sendfile lenght : %d\n", sf_max_send);
  +
   }
   
   #endif
  @@ -169,9 +179,9 @@
   {
       tcn_socket_t *s = (tcn_socket_t *)data;
   
  -    if (s->cleanup) {
  -        (*s->cleanup)(s->opaque);
  -        s->cleanup = NULL;
  +    if (s->net->cleanup) {
  +        (*s->net->cleanup)(s->opaque);
  +        s->net->cleanup = NULL;
       }
       if (s->sock) {
           apr_socket_close(s->sock);
  @@ -244,6 +254,20 @@
   #define APR_socket_opt_get      apr_socket_opt_get
   #endif
   
  +static tcn_nlayer_t apr_socket_layer = {
  +    TCN_SOCKET_APR,
  +    NULL,
  +    NULL,
  +    APR_socket_shutdown,
  +    APR_socket_opt_get,
  +    APR_socket_opt_set,
  +    APR_socket_timeout_get,
  +    APR_socket_timeout_set,
  +    APR_socket_send,
  +    APR_socket_sendv,
  +    APR_socket_recv
  +};
  +
   TCN_IMPLEMENT_CALL(jlong, Socket, create)(TCN_STDARGS, jint family,
                                             jint type, jint protocol,
                                             jlong pool)
  @@ -268,18 +292,8 @@
       a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
       a->sock = s;
       a->pool = p;
  -    if (family > 0) { 
  -        a->type     = TCN_SOCKET_APR;
  -        a->recv     = APR_socket_recv;
  -        a->send     = APR_socket_send;
  -        a->sendv    = APR_socket_sendv;
  -        a->shutdown = APR_socket_shutdown;
  -        a->tmget    = APR_socket_timeout_get;
  -        a->tmset    = APR_socket_timeout_set;
  -        a->get      = APR_socket_opt_get;
  -        a->set      = APR_socket_opt_set;
  -        a->close    = NULL;
  -    }
  +    if (family > 0)
  +        a->net = &apr_socket_layer;
       a->opaque   = s;
       apr_pool_cleanup_register(p, (const void *)a,
                                 sp_socket_cleanup,
  @@ -327,7 +341,7 @@
               return P2J(s->sock);
           break;
           case TCN_SOCKET_GET_TYPE:
  -            return (jlong)(s->type);
  +            return (jlong)(s->net->type);
           break;
       }
       return 0;
  @@ -340,7 +354,7 @@
   
       UNREFERENCED_STDARGS;
       TCN_ASSERT(sock != 0);
  -    return (jint)(*s->shutdown)(s->opaque, how);
  +    return (jint)(*s->net->shutdown)(s->opaque, how);
   }
   
   TCN_IMPLEMENT_CALL(jint, Socket, close)(TCN_STDARGS, jlong sock)
  @@ -353,8 +367,8 @@
   #ifdef TCN_DO_STATISTICS
       apr_atomic_inc32(&sp_closed);
   #endif
  -    if (s->close)
  -        rv = (*s->close)(s->opaque);
  +    if (s->net->close)
  +        rv = (*s->net->close)(s->opaque);
       if (s->sock) {
           rv = (jint)apr_socket_close(s->sock);
           s->sock = NULL;
  @@ -396,7 +410,7 @@
       UNREFERENCED(o);
       TCN_ASSERT(sock != 0);
   
  -    if (s->type == TCN_SOCKET_APR) {
  +    if (s->net->type == TCN_SOCKET_APR) {
           TCN_ASSERT(s->sock != NULL);
           TCN_THROW_IF_ERR(apr_socket_accept(&n, s->sock, p), n);
       }
  @@ -409,19 +423,10 @@
           apr_atomic_inc32(&sp_accepted);
   #endif
           a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
  -        a->sock = n;
  -        a->pool = p;
  -        a->type = TCN_SOCKET_APR;
  -        a->recv     = APR_socket_recv;
  -        a->send     = APR_socket_send;
  -        a->sendv    = APR_socket_sendv;
  -        a->shutdown = APR_socket_shutdown;
  -        a->tmget    = APR_socket_timeout_get;
  -        a->tmset    = APR_socket_timeout_set;
  -        a->get      = APR_socket_opt_get;
  -        a->set      = APR_socket_opt_set;
  -        a->close    = NULL;
  -        a->opaque   = n;
  +        a->sock   = n;
  +        a->pool   = p;
  +        a->net    = &apr_socket_layer;
  +        a->opaque = n;
           apr_pool_cleanup_register(p, (const void *)a,
                                     sp_socket_cleanup,
                                     apr_pool_cleanup_null);
  @@ -442,7 +447,7 @@
       TCN_ASSERT(sock != 0);
   
       TCN_THROW_IF_ERR(apr_pool_create(&p, s->pool), p);
  -    if (s->type == TCN_SOCKET_APR) {
  +    if (s->net->type == TCN_SOCKET_APR) {
           TCN_ASSERT(s->sock != NULL);
           TCN_THROW_IF_ERR(apr_socket_accept(&n, s->sock, p), n);
       }
  @@ -455,19 +460,10 @@
           apr_atomic_inc32(&sp_accepted);
   #endif
           a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t));
  -        a->sock = n;
  -        a->pool = p;
  -        a->type = TCN_SOCKET_APR;
  -        a->recv     = APR_socket_recv;
  -        a->send     = APR_socket_send;
  -        a->sendv    = APR_socket_sendv;
  -        a->shutdown = APR_socket_shutdown;
  -        a->tmget    = APR_socket_timeout_get;
  -        a->tmset    = APR_socket_timeout_set;
  -        a->get      = APR_socket_opt_get;
  -        a->set      = APR_socket_opt_set;
  -        a->close    = NULL;
  -        a->opaque   = n;
  +        a->sock   = n;
  +        a->pool   = p;
  +        a->net    = &apr_socket_layer;
  +        a->opaque = n;
           apr_pool_cleanup_register(p, (const void *)a,
                                     sp_socket_cleanup,
                                     apr_pool_cleanup_null);
  @@ -511,7 +507,7 @@
       if (tosend <= TCN_BUFFER_SZ) {
           char sb[TCN_BUFFER_SZ];
           (*e)->GetByteArrayRegion(e, buf, offset, tosend, (jbyte *)sb);
  -        ss = (*s->send)(s->opaque, sb, &nbytes);
  +        ss = (*s->net->send)(s->opaque, sb, &nbytes);
       }
       else {
           jbyte *bytes;
  @@ -521,7 +517,7 @@
               bytes = (*e)->GetPrimitiveArrayCritical(e, buf, NULL);
           else
               bytes = (*e)->GetByteArrayElements(e, buf, NULL);
  -        ss = (*s->send)(s->opaque, bytes + offset, &nbytes);
  +        ss = (*s->net->send)(s->opaque, bytes + offset, &nbytes);
           if (nb)
               (*e)->ReleasePrimitiveArrayCritical(e, buf, bytes, JNI_ABORT);
           else
  @@ -555,7 +551,7 @@
   #endif
   
       bytes  = (char *)(*e)->GetDirectBufferAddress(e, buf);
  -    ss = (*s->send)(s->opaque, bytes + offset, &nbytes);
  +    ss = (*s->net->send)(s->opaque, bytes + offset, &nbytes);
   
       if (ss == APR_SUCCESS)
           return (jint)nbytes;
  @@ -590,7 +586,7 @@
           vec[i].iov_base = (*e)->GetByteArrayElements(e, ba[i], NULL);
       }
   
  -    ss = (*s->sendv)(s->opaque, vec, nvec, &written);
  +    ss = (*s->net->sendv)(s->opaque, vec, nvec, &written);
   
       for (i = 0; i < nvec; i++) {
           (*e)->ReleaseByteArrayElements(e, ba[i], vec[i].iov_base, JNI_ABORT);
  @@ -653,12 +649,12 @@
       if (toread <= TCN_BUFFER_SZ) {
           char sb[TCN_BUFFER_SZ];
   
  -        if ((ss = (*s->recv)(s->opaque, sb, &nbytes)) == APR_SUCCESS)
  +        if ((ss = (*s->net->recv)(s->opaque, sb, &nbytes)) == APR_SUCCESS)
               (*e)->SetByteArrayRegion(e, buf, offset, (jsize)nbytes, sb);
       }
       else {
           jbyte *bytes = (*e)->GetByteArrayElements(e, buf, NULL);
  -        ss = (*s->recv)(s->opaque, bytes + offset, &nbytes);
  +        ss = (*s->net->recv)(s->opaque, bytes + offset, &nbytes);
           (*e)->ReleaseByteArrayElements(e, buf, bytes,
                                          nbytes ? 0 : JNI_ABORT);
       }
  @@ -705,23 +701,23 @@
       TCN_ASSERT(s->opaque != NULL);
       TCN_ASSERT(buf != NULL);
   
  -    if ((ss = (*s->tmget)(s->opaque, &t)) != APR_SUCCESS)
  +    if ((ss = (*s->net->timeout_get)(s->opaque, &t)) != APR_SUCCESS)
           goto cleanup;
  -    if ((ss = (*s->tmset)(s->opaque, J2T(timeout))) != APR_SUCCESS)
  +    if ((ss = (*s->net->timeout_set)(s->opaque, J2T(timeout))) != 
APR_SUCCESS)
           goto cleanup;
       if (toread <= TCN_BUFFER_SZ) {
           char sb[TCN_BUFFER_SZ];
  -        ss = (*s->recv)(s->opaque, sb, &nbytes);
  +        ss = (*s->net->recv)(s->opaque, sb, &nbytes);
           (*e)->SetByteArrayRegion(e, buf, offset, (jsize)nbytes, sb);
       }
       else {
           jbyte *bytes = (*e)->GetByteArrayElements(e, buf, NULL);
  -        ss = (*s->recv)(s->opaque, bytes + offset, &nbytes);
  +        ss = (*s->net->recv)(s->opaque, bytes + offset, &nbytes);
           (*e)->ReleaseByteArrayElements(e, buf, bytes,
                                          nbytes ? 0 : JNI_ABORT);
       }
       /* Resore the original timeout */
  -    (*s->tmset)(s->opaque, t);
  +    (*s->net->timeout_set)(s->opaque, t);
   #ifdef TCN_DO_STATISTICS
       if (ss == APR_SUCCESS) {
           sp_max_recv = TCN_MAX(sp_max_recv, nbytes);
  @@ -767,7 +763,7 @@
   
       bytes  = (char *)(*e)->GetDirectBufferAddress(e, buf);
       TCN_ASSERT(bytes != NULL);
  -    ss = (*s->recv)(s->opaque, bytes + offset, &nbytes);
  +    ss = (*s->net->recv)(s->opaque, bytes + offset, &nbytes);
   #ifdef TCN_DO_STATISTICS
       if (ss == APR_SUCCESS) {
           sp_max_recv = TCN_MAX(sp_max_recv, nbytes);
  @@ -815,13 +811,13 @@
       bytes  = (char *)(*e)->GetDirectBufferAddress(e, buf);
       TCN_ASSERT(bytes != NULL);
   
  -    if ((ss = (*s->tmget)(s->opaque, &t)) != APR_SUCCESS)
  +    if ((ss = (*s->net->timeout_get)(s->opaque, &t)) != APR_SUCCESS)
            return -(jint)ss;
  -    if ((ss = (*s->tmset)(s->opaque, J2T(timeout))) != APR_SUCCESS)
  +    if ((ss = (*s->net->timeout_set)(s->opaque, J2T(timeout))) != 
APR_SUCCESS)
            return -(jint)ss;
  -    ss = (*s->recv)(s->opaque, bytes + offset, &nbytes);
  +    ss = (*s->net->recv)(s->opaque, bytes + offset, &nbytes);
       /* Resore the original timeout */
  -    (*s->tmset)(s->opaque, t);
  +    (*s->net->timeout_set)(s->opaque, t);
   #ifdef TCN_DO_STATISTICS
       if (ss == APR_SUCCESS) {
           sp_max_recv = TCN_MAX(sp_max_recv, nbytes);
  @@ -887,7 +883,7 @@
       if (!s->sock)
           return APR_EINVAL;
       else
  -        return (jint)(*s->set)(s->opaque, (apr_int32_t)opt, (apr_int32_t)on);
  +        return (jint)(*s->net->opt_set)(s->opaque, (apr_int32_t)opt, 
(apr_int32_t)on);
   }
   
   TCN_IMPLEMENT_CALL(jint, Socket, optGet)(TCN_STDARGS, jlong sock,
  @@ -901,8 +897,8 @@
       if (s->sock)
           tcn_ThrowAPRException(e, APR_EINVAL);
       else {
  -        TCN_THROW_IF_ERR((*s->get)(s->opaque, (apr_int32_t)opt,
  -                                   &on), on);
  +        TCN_THROW_IF_ERR((*s->net->opt_get)(s->opaque, (apr_int32_t)opt,
  +                                            &on), on);
       }
   cleanup:
       return (jint)on;
  @@ -916,7 +912,7 @@
       UNREFERENCED_STDARGS;
       TCN_ASSERT(sock != 0);
       TCN_ASSERT(s->opaque != NULL);
  -    return (jint)(*s->tmset)(s->opaque, J2T(timeout));
  +    return (jint)(*s->net->timeout_set)(s->opaque, J2T(timeout));
   }
   
   TCN_IMPLEMENT_CALL(jlong, Socket, timeoutGet)(TCN_STDARGS, jlong sock)
  @@ -927,7 +923,7 @@
       UNREFERENCED(o);
       TCN_ASSERT(sock != 0);
       TCN_ASSERT(s->opaque != NULL);
  -    TCN_THROW_IF_ERR((*s->tmget)(s->opaque, &timeout), timeout);
  +    TCN_THROW_IF_ERR((*s->net->timeout_get)(s->opaque, &timeout), timeout);
   cleanup:
       return (jlong)timeout;
   }
  @@ -972,7 +968,7 @@
       TCN_ASSERT(sock != 0);
       TCN_ASSERT(file != 0);
   
  -    if (s->type != TCN_SOCKET_APR)
  +    if (s->net->type != TCN_SOCKET_APR)
           return (jint)(-APR_ENOTIMPL);
       if (headers)
           nh = (*e)->GetArrayLength(e, headers);
  @@ -997,8 +993,16 @@
       hdrs.trailers = &tvec[0];
       hdrs.numtrailers = nt;
   
  +
       ss = apr_socket_sendfile(s->sock, f, &hdrs, &off, &written, 
(apr_int32_t)flags);
   
  +#ifdef TCN_DO_STATISTICS
  +    sf_max_send = TCN_MAX(sf_max_send, written);
  +    sf_min_send = TCN_MIN(sf_min_send, written);
  +    sf_tot_send += written;
  +    sf_num_send++;
  +#endif
  +
       for (i = 0; i < nh; i++) {
           (*e)->ReleaseByteArrayElements(e, hba[i], hvec[i].iov_base, 
JNI_ABORT);
       }
  
  
  
  1.21      +18 -14    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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- sslnetwork.c      30 Jun 2005 08:20:56 -0000      1.20
  +++ sslnetwork.c      2 Jul 2005 07:19:10 -0000       1.21
  @@ -281,7 +281,7 @@
   
       UNREFERENCED_STDARGS;
       TCN_ASSERT(sock != 0);
  -    if (ss->type != TCN_SOCKET_SSL)
  +    if (ss->net->type != TCN_SOCKET_SSL)
           return APR_EINVAL;
       con = (tcn_ssl_conn_t *)ss->opaque;
       while (!SSL_is_init_finished(con->ssl)) {
  @@ -449,6 +449,20 @@
       return APR_SUCCESS;
   }
   
  +static tcn_nlayer_t ssl_socket_layer = {
  +    TCN_SOCKET_SSL,
  +    ssl_cleanup,
  +    ssl_socket_close,
  +    ssl_socket_shutdown,
  +    ssl_socket_opt_get,
  +    ssl_socket_opt_set,
  +    ssl_socket_timeout_get,
  +    ssl_socket_timeout_set,
  +    ssl_socket_send,
  +    ssl_socket_sendv,
  +    ssl_socket_recv
  +};
  +
   
   TCN_IMPLEMENT_CALL(jint, SSLSocket, attach)(TCN_STDARGS, jlong ctx,
                                               jlong sock)
  @@ -475,18 +489,8 @@
       else
           SSL_set_connect_state(con->ssl);
       /* Change socket type */
  -    s->type     = TCN_SOCKET_SSL;
  -    s->cleanup  = ssl_cleanup;
  -    s->recv     = ssl_socket_recv;
  -    s->send     = ssl_socket_send;
  -    s->sendv    = ssl_socket_sendv;
  -    s->shutdown = ssl_socket_shutdown;
  -    s->tmget    = ssl_socket_timeout_get;
  -    s->tmset    = ssl_socket_timeout_set;
  -    s->get      = ssl_socket_opt_get;
  -    s->set      = ssl_socket_opt_set;
  -    s->close    = ssl_socket_close;
  -    s->opaque   = con;
  +    s->net    = &ssl_socket_layer;
  +    s->opaque = con;
   
       return APR_SUCCESS;
   }
  
  
  

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

Reply via email to