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 */
}