You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by je...@apache.org on 2008/09/25 03:47:23 UTC

svn commit: r698796 - in /httpd/flood/trunk: CHANGES flood_net_ssl.c flood_net_ssl.h flood_socket_keepalive.c

Author: jerenkrantz
Date: Wed Sep 24 18:47:23 2008
New Revision: 698796

URL: http://svn.apache.org/viewvc?rev=698796&view=rev
Log:
Fix HTTP keepalives over SSL.

* flood_net_ssl.c
  (ssl_check_socket): Implement.
* flood_net_ssl.h
  (ssl_check_socket): Declare.
* flood_socket_keepalive.c
  (ksock_check_socket, ksock_close_socket): Declare helper macros.
  (keepalive_begin_conn): Use helper function to call appropriate checker.
  (keepalive_end_conn): Use helper to close socket.

Modified:
    httpd/flood/trunk/CHANGES
    httpd/flood/trunk/flood_net_ssl.c
    httpd/flood/trunk/flood_net_ssl.h
    httpd/flood/trunk/flood_socket_keepalive.c

Modified: httpd/flood/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/CHANGES?rev=698796&r1=698795&r2=698796&view=diff
==============================================================================
--- httpd/flood/trunk/CHANGES (original)
+++ httpd/flood/trunk/CHANGES Wed Sep 24 18:47:23 2008
@@ -1,5 +1,8 @@
 Changes since 1.0:
 
+* Fix HTTP keepalives over SSL.
+  [Justin Erenkrantz]
+
 * Support building against installed Ubuntu APR packages.
   [Justin Erenkrantz]
 

Modified: httpd/flood/trunk/flood_net_ssl.c
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/flood_net_ssl.c?rev=698796&r1=698795&r2=698796&view=diff
==============================================================================
--- httpd/flood/trunk/flood_net_ssl.c (original)
+++ httpd/flood/trunk/flood_net_ssl.c Wed Sep 24 18:47:23 2008
@@ -318,6 +318,11 @@
     return APR_SUCCESS;     
 }
 
+apr_status_t ssl_check_socket(ssl_socket_t *s, apr_pool_t *pool)
+{
+    return check_socket(s->socket, pool);
+}
+
 #else /* FLOOD_HAS_OPENSSL */
 
 apr_status_t ssl_init_socket(apr_pool_t *pool)
@@ -345,4 +350,9 @@
     return APR_ENOTIMPL;
 }
 
+apr_status_t ssl_check_socket(ssl_socket_t *s, apr_pool_t *pool)
+{
+    return APR_ENOTIMPL;
+}
+
 #endif /* FLOOD_HAS_OPENSSL */

Modified: httpd/flood/trunk/flood_net_ssl.h
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/flood_net_ssl.h?rev=698796&r1=698795&r2=698796&view=diff
==============================================================================
--- httpd/flood/trunk/flood_net_ssl.h (original)
+++ httpd/flood/trunk/flood_net_ssl.h Wed Sep 24 18:47:23 2008
@@ -30,5 +30,6 @@
 void ssl_close_socket(ssl_socket_t *s);
 apr_status_t ssl_write_socket(ssl_socket_t *s, request_t *r);
 apr_status_t ssl_read_socket(ssl_socket_t *s, char *buf, apr_size_t *buflen);
+apr_status_t ssl_check_socket(ssl_socket_t *s, apr_pool_t *pool);
 
 #endif  /* __flood_net_socket_h */

Modified: httpd/flood/trunk/flood_socket_keepalive.c
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/flood_socket_keepalive.c?rev=698796&r1=698795&r2=698796&view=diff
==============================================================================
--- httpd/flood/trunk/flood_socket_keepalive.c (original)
+++ httpd/flood/trunk/flood_socket_keepalive.c Wed Sep 24 18:47:23 2008
@@ -40,6 +40,15 @@
     ksock->ssl ? ssl_write_socket(ksock->s, req) : \
                  write_socket(ksock->s, req)
 
+#define ksock_check_socket(ksock, pool) \
+    ksock->ssl ? ssl_check_socket(ksock->s, pool) : \
+                 check_socket(ksock->s, pool)
+
+#define ksock_close_socket(ksock) \
+    ksock->ssl ? ssl_close_socket(ksock->s) : \
+                 close_socket(ksock->s)
+
+
 typedef struct {
     void *s;
     apr_pollfd_t *p;
@@ -78,7 +87,7 @@
 
     if (!ksock->reopen_socket && ksock->s) {
         apr_status_t e;
-        e = check_socket(ksock->s, pool);
+        e = ksock_check_socket(ksock, pool);
         if (e != APR_SUCCESS) {
             ksock->reopen_socket = 1;
         }
@@ -544,7 +553,7 @@
     keepalive_socket_t *ksock = (keepalive_socket_t *)sock;
 
     if (resp->keepalive == 0) {
-        ksock->ssl ? ssl_close_socket(ksock->s) : close_socket(ksock->s);
+        ksock_close_socket(ksock);
         ksock->reopen_socket = 1; /* we just closed it */
     }