You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-cvs@httpd.apache.org by je...@apache.org on 2003/09/06 06:27:38 UTC
cvs commit: httpd-test/flood CHANGES flood_net.c flood_net.h flood_net_ssl.c flood_net_ssl.h flood_socket_generic.c flood_socket_keepalive.c
jerenkrantz 2003/09/05 21:27:38
Modified: flood CHANGES flood_net.c flood_net.h flood_net_ssl.c
flood_net_ssl.h flood_socket_generic.c
flood_socket_keepalive.c
Log:
Fix two minor bugs:
* Change open_socket prototype to return errors.
* Fix HEAD responses with Content-Length specified being handled incorrectly.
Revision Changes Path
1.49 +5 -0 httpd-test/flood/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-test/flood/CHANGES,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -u -r1.48 -r1.49
--- CHANGES 1 Jul 2003 20:16:56 -0000 1.48
+++ CHANGES 6 Sep 2003 04:27:37 -0000 1.49
@@ -1,5 +1,10 @@
Changes since 1.0:
+* Change open_socket prototype to return errors. [Justin Erenkrantz]
+
+* Fix HEAD responses with Content-Length specified being handled incorrectly.
+ [Justin Erenkrantz]
+
* Flood manual (DocBook based). [Jacek Prucia]
* Added <baseurl> element. When present, it's contents are copied in front
1.12 +15 -2 httpd-test/flood/flood_net.c
Index: flood_net.c
===================================================================
RCS file: /home/cvs/httpd-test/flood/flood_net.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -u -r1.11 -r1.12
--- flood_net.c 3 Feb 2003 17:10:56 -0000 1.11
+++ flood_net.c 6 Sep 2003 04:27:37 -0000 1.12
@@ -59,7 +59,8 @@
#include "flood_net.h"
/* Open the TCP connection to the server */
-flood_socket_t* open_socket(apr_pool_t *pool, request_t *r)
+flood_socket_t* open_socket(apr_pool_t *pool, request_t *r,
+ apr_status_t *status)
{
apr_status_t rv = 0;
apr_sockaddr_t *destsa;
@@ -70,11 +71,17 @@
if ((rv = apr_sockaddr_info_get(&destsa, r->parsed_uri->hostname, APR_INET,
r->parsed_uri->port, 0, pool))
!= APR_SUCCESS) {
+ if (status) {
+ *status = rv;
+ }
return NULL;
}
if ((rv = apr_socket_create(&fs->socket, APR_INET, SOCK_STREAM,
pool)) != APR_SUCCESS) {
+ if (status) {
+ *status = rv;
+ }
return NULL;
}
@@ -82,6 +89,9 @@
if (APR_STATUS_IS_EINPROGRESS(rv)) {
/* FIXME: Handle better */
close_socket(fs);
+ if (status) {
+ *status = rv;
+ }
return NULL;
}
else if (APR_STATUS_IS_EAGAIN(rv))
@@ -92,12 +102,15 @@
* XXX: Then APR'IZE THIS ALREADY
*/
apr_sleep(4 * 60 * APR_USEC_PER_SEC);
- return open_socket(pool, r);
+ return open_socket(pool, r, status);
}
else
{
/* FIXME: Handle */
close_socket(fs);
+ if (status) {
+ *status = rv;
+ }
return NULL;
}
}
1.9 +2 -1 httpd-test/flood/flood_net.h
Index: flood_net.h
===================================================================
RCS file: /home/cvs/httpd-test/flood/flood_net.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -u -r1.8 -r1.9
--- flood_net.h 3 Feb 2003 17:10:56 -0000 1.8
+++ flood_net.h 6 Sep 2003 04:27:37 -0000 1.9
@@ -68,7 +68,8 @@
apr_pollfd_t read_pollset;
} flood_socket_t;
-flood_socket_t* open_socket(apr_pool_t *pool, request_t *r);
+flood_socket_t* open_socket(apr_pool_t *pool, request_t *r,
+ apr_status_t *status);
void close_socket(flood_socket_t *s);
apr_status_t write_socket(flood_socket_t *s, request_t *r);
apr_status_t read_socket(flood_socket_t *s, char *buf, int *buflen);
1.22 +5 -3 httpd-test/flood/flood_net_ssl.c
Index: flood_net_ssl.c
===================================================================
RCS file: /home/cvs/httpd-test/flood/flood_net_ssl.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -u -r1.21 -r1.22
--- flood_net_ssl.c 3 Feb 2003 17:10:56 -0000 1.21
+++ flood_net_ssl.c 6 Sep 2003 04:27:37 -0000 1.22
@@ -212,7 +212,8 @@
void ssl_read_socket_handshake(ssl_socket_t *s);
-ssl_socket_t* ssl_open_socket(apr_pool_t *pool, request_t *r)
+ssl_socket_t* ssl_open_socket(apr_pool_t *pool, request_t *r,
+ apr_status_t *status)
{
apr_os_sock_t ossock;
int e, sslError;
@@ -220,7 +221,7 @@
ssl_socket_t *ssl_socket = apr_pcalloc(pool, sizeof(ssl_socket_t));
/* Open our TCP-based connection */
- ssl_socket->socket = open_socket(pool, r);
+ ssl_socket->socket = open_socket(pool, r, status);
if (!ssl_socket->socket)
return NULL;
@@ -362,7 +363,8 @@
return APR_ENOTIMPL;
}
-ssl_socket_t* ssl_open_socket(apr_pool_t *pool, request_t *r)
+ssl_socket_t* ssl_open_socket(apr_pool_t *pool, request_t *r,
+ apr_status_t *status)
{
return NULL;
}
1.5 +2 -1 httpd-test/flood/flood_net_ssl.h
Index: flood_net_ssl.h
===================================================================
RCS file: /home/cvs/httpd-test/flood/flood_net_ssl.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -u -r1.4 -r1.5
--- flood_net_ssl.h 3 Feb 2003 17:10:56 -0000 1.4
+++ flood_net_ssl.h 6 Sep 2003 04:27:37 -0000 1.5
@@ -63,7 +63,8 @@
typedef struct ssl_socket_t ssl_socket_t;
apr_status_t ssl_init_socket(apr_pool_t *pool);
-ssl_socket_t* ssl_open_socket(apr_pool_t *pool, request_t *r);
+ssl_socket_t* ssl_open_socket(apr_pool_t *pool, request_t *r,
+ apr_status_t *status);
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, int *buflen);
1.11 +5 -3 httpd-test/flood/flood_socket_generic.c
Index: flood_socket_generic.c
===================================================================
RCS file: /home/cvs/httpd-test/flood/flood_socket_generic.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -u -r1.10 -r1.11
--- flood_socket_generic.c 12 Feb 2003 22:50:59 -0000 1.10
+++ flood_socket_generic.c 6 Sep 2003 04:27:37 -0000 1.11
@@ -90,7 +90,9 @@
*/
apr_status_t generic_begin_conn(socket_t *sock, request_t *req, apr_pool_t *pool)
{
+ apr_status_t rv;
generic_socket_t *gsock = (generic_socket_t *)sock;
+
if (strcasecmp(req->parsed_uri->scheme, "https") == 0) {
/* If we don't have SSL, error out. */
#if FLOOD_HAS_OPENSSL
@@ -106,12 +108,12 @@
/* The return types are not identical, so it can't be a ternary
* operation. */
if (gsock->ssl)
- gsock->s = ssl_open_socket(pool, req);
+ gsock->s = ssl_open_socket(pool, req, &rv);
else
- gsock->s = open_socket(pool, req);
+ gsock->s = open_socket(pool, req, &rv);
if (gsock->s == NULL)
- return APR_EGENERAL;
+ return rv;
req->keepalive = 0; /* FIXME: Maybe move this into flood_socket_t */
return APR_SUCCESS;
1.18 +14 -4 httpd-test/flood/flood_socket_keepalive.c
Index: flood_socket_keepalive.c
===================================================================
RCS file: /home/cvs/httpd-test/flood/flood_socket_keepalive.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -u -r1.17 -r1.18
--- flood_socket_keepalive.c 3 Feb 2003 17:10:56 -0000 1.17
+++ flood_socket_keepalive.c 6 Sep 2003 04:27:37 -0000 1.18
@@ -82,6 +82,7 @@
int reopen_socket; /* A boolean */
int wantresponse; /* A boolean */
int ssl; /* A boolean */
+ method_e method; /* The method of the request. */
} keepalive_socket_t;
/**
@@ -119,6 +120,7 @@
}
}
if (ksock->reopen_socket || ksock->s == NULL) {
+ apr_status_t rv;
if (strcasecmp(req->parsed_uri->scheme, "https") == 0) {
/* If we don't have SSL, error out. */
#if FLOOD_HAS_OPENSSL
@@ -134,12 +136,12 @@
/* The return types are not identical, so it can't be a ternary
* operation. */
if (ksock->ssl)
- ksock->s = ssl_open_socket(pool, req);
+ ksock->s = ssl_open_socket(pool, req, &rv);
else
- ksock->s = open_socket(pool, req);
+ ksock->s = open_socket(pool, req, &rv);
if (ksock->s == NULL)
- return APR_EGENERAL;
+ return rv;
ksock->reopen_socket = 0; /* we just opened it */
}
@@ -154,6 +156,7 @@
{
keepalive_socket_t *ksock = (keepalive_socket_t *)sock;
ksock->wantresponse = req->wantresponse;
+ ksock->method = req->method;
return ksock->ssl ? ssl_write_socket(ksock->s, req) :
write_socket(ksock->s, req);
}
@@ -422,7 +425,14 @@
else {
new_resp->keepalive = 1;
}
-
+
+ /* If we have a HEAD request, we shouldn't be receiving a body. */
+ if (ksock->method == HEAD) {
+ *resp = new_resp;
+
+ return APR_SUCCESS;
+ }
+
header = apr_table_get(new_resp->headers, "Transfer-Encoding");
if (header && !strcasecmp(header, "Chunked"))
{