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.


git-svn-id: https://svn.apache.org/repos/asf/httpd/flood/trunk@698796 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES b/CHANGES
index a274e5b..3673d8e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,8 @@
 Changes since 1.0:
 
+* Fix HTTP keepalives over SSL.
+  [Justin Erenkrantz]
+
 * Support building against installed Ubuntu APR packages.
   [Justin Erenkrantz]
 
diff --git a/flood_net_ssl.c b/flood_net_ssl.c
index cd6f6d5..46c2f22 100644
--- a/flood_net_ssl.c
+++ b/flood_net_ssl.c
@@ -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 */
diff --git a/flood_net_ssl.h b/flood_net_ssl.h
index 452bc10..11b48f9 100644
--- a/flood_net_ssl.h
+++ b/flood_net_ssl.h
@@ -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 */
diff --git a/flood_socket_keepalive.c b/flood_socket_keepalive.c
index c9eacc9..d2229ea 100644
--- a/flood_socket_keepalive.c
+++ b/flood_socket_keepalive.c
@@ -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 */
     }