* Add <proxyurl> child element to <urllist> to request against a proxy.
* Accept HTTP/1.0 responses to HTTP/1.1 requests.
git-svn-id: https://svn.apache.org/repos/asf/httpd/test/trunk/flood@104459 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES b/CHANGES
index 3a3ccfa..7911857 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,10 @@
Changes since 1.0:
+* Add <proxyurl> child element to <urllist> to request against a proxy.
+ [Justin Erenkrantz]
+
+* Accept HTTP/1.0 responses to HTTP/1.1 requests. [Justin Erenkrantz]
+
* Use APR's bundled mkdir script. [Justin Erenkrantz]
* Support VPATH builds again. [Justin Erenkrantz]
diff --git a/config.h.in b/config.h.in
index ac2f754..6515ed3 100644
--- a/config.h.in
+++ b/config.h.in
@@ -16,6 +16,7 @@
#define XML_URLLIST_SEQUENCE_NAME "sequencename"
#define XML_URLLIST_SEQUENCE_LIST "sequencelist"
#define XML_URLLIST_BASE_URL "baseurl"
+#define XML_URLLIST_PROXY_URL "proxyurl"
#define XML_URLLIST_URL "url"
#define XML_URLLIST_METHOD "method"
#define XML_URLLIST_METHOD_GET "get"
diff --git a/flood_net.c b/flood_net.c
index e9acd27..3e60500 100644
--- a/flood_net.c
+++ b/flood_net.c
@@ -26,11 +26,18 @@
apr_status_t rv = 0;
apr_sockaddr_t *destsa;
flood_socket_t* fs;
+ apr_uri_t *u;
fs = apr_palloc(pool, sizeof(flood_socket_t));
+ if (r->parsed_proxy_uri) {
+ u = r->parsed_proxy_uri;
+ }
+ else {
+ u = r->parsed_uri;
+ }
- if ((rv = apr_sockaddr_info_get(&destsa, r->parsed_uri->hostname, APR_INET,
- r->parsed_uri->port, 0, pool))
+ if ((rv = apr_sockaddr_info_get(&destsa, u->hostname, APR_INET,
+ u->port, 0, pool))
!= APR_SUCCESS) {
if (status) {
*status = rv;
diff --git a/flood_profile.h b/flood_profile.h
index 21719cb..65dc723 100644
--- a/flood_profile.h
+++ b/flood_profile.h
@@ -61,7 +61,6 @@
struct request_t {
/* The basic components to connect to the server */
char * uri;
- char * proxy_url;
method_e method;
int keepalive; /* a boolean */
@@ -74,6 +73,7 @@
char * contenttype;
apr_uri_t *parsed_uri;
+ apr_uri_t *parsed_proxy_uri;
/* Raw buffer connection
* FIXME: apr_bucket_t? */
diff --git a/flood_round_robin.c b/flood_round_robin.c
index 5492d7c..26cb52c 100644
--- a/flood_round_robin.c
+++ b/flood_round_robin.c
@@ -103,6 +103,7 @@
int urls;
url_t *url;
char *baseurl;
+ apr_uri_t *proxy_url;
cookie_t *cookie;
@@ -214,7 +215,7 @@
apr_status_t round_robin_create_req(profile_t *profile, request_t *r)
{
round_robin_profile_t *p;
- char *cookies;
+ char *cookies, *path;
char *enc_credtls, *credtls, *authz_hdr = NULL;
cookie_t *cook;
@@ -261,6 +262,15 @@
}
}
+ if (p->proxy_url != NULL) {
+ path = apr_pstrcat(r->pool, r->parsed_uri->scheme, "://",
+ r->parsed_uri->hostinfo,
+ r->parsed_uri->path, NULL);
+ }
+ else {
+ path = r->parsed_uri->path;
+ }
+
switch (r->method)
{
case GET:
@@ -271,7 +281,7 @@
"Host: %s" CRLF
"%s"
"%s" CRLF,
- r->parsed_uri->path,
+ path,
r->parsed_uri->query ? "?" : "",
r->parsed_uri->query ? r->parsed_uri->query : "",
r->keepalive ? "Keep-Alive" : "Close",
@@ -289,7 +299,7 @@
"Host: %s" CRLF
"%s"
"%s" CRLF,
- r->parsed_uri->path,
+ path,
r->parsed_uri->query ? "?" : "",
r->parsed_uri->query ? r->parsed_uri->query : "",
r->keepalive ? "Keep-Alive" : "Close",
@@ -312,7 +322,7 @@
"%s"
"%s" CRLF
"%s",
- r->parsed_uri->path,
+ path,
r->parsed_uri->query ? "?" : "",
r->parsed_uri->query ? r->parsed_uri->query : "",
r->keepalive ? "Keep-Alive" : "Close",
@@ -331,7 +341,7 @@
"%s"
"%s" CRLF "",
- r->parsed_uri->path,
+ path,
r->parsed_uri->query ? "?" : "",
r->parsed_uri->query ? r->parsed_uri->query : "",
r->keepalive ? "Keep-Alive" : "Close",
@@ -642,7 +652,8 @@
apr_status_t rv;
int i;
struct apr_xml_elem *root_elem, *profile_elem,
- *urllist_elem, *count_elem, *useurllist_elem, *baseurl_elem, *e;
+ *urllist_elem, *count_elem, *useurllist_elem, *baseurl_elem,
+ *proxyurl_elem, *e;
round_robin_profile_t *p;
char *xml_profile, *xml_urllist, *urllist_name;
@@ -719,6 +730,17 @@
p->baseurl = NULL;
}
+ /* do we have proxy url? */
+ if ((rv = retrieve_xml_elem_child(
+ &proxyurl_elem, urllist_elem, XML_URLLIST_PROXY_URL)) == APR_SUCCESS) {
+ /* yes we do */
+ p->proxy_url = apr_pcalloc(p->pool, sizeof(apr_uri_t));
+ apr_uri_parse(p->pool, proxyurl_elem->first_cdata.first->text,
+ p->proxy_url);
+ } else {
+ p->proxy_url = NULL;
+ }
+
p->urls = 0;
/* Include sequences. We'll expand them later. */
p->urls = count_xml_seq_child(urllist_elem);
@@ -819,7 +841,7 @@
}
- r->parsed_uri = apr_pcalloc(rp->pool, sizeof(apr_uri_t));
+ r->parsed_uri = apr_palloc(rp->pool, sizeof(apr_uri_t));
if (rp->baseurl != NULL) {
r->uri = apr_pstrcat(rp->pool, rp->baseurl, r->uri, NULL);
@@ -857,6 +879,8 @@
if (!r->parsed_uri->path) /* If / is not there, be nice. */
r->parsed_uri->path = "/";
+ r->parsed_proxy_uri = rp->proxy_url;
+
#ifdef PROFILE_DEBUG
apr_file_printf(local_stdout, "Generating request to: %s\n", r->uri);
#endif /* PROFILE_DEBUG */
@@ -1077,6 +1101,8 @@
*verified = FLOOD_VALID;
else if (memcmp(resp->rbuf + 9, "3", 1) == 0) /* Accept 3xx as okay. */
*verified = FLOOD_VALID;
+ else if (memcmp(resp->rbuf, "HTTP/1.0 2", 10) == 0) /* HTTP/1.0 is ok. */
+ *verified = FLOOD_VALID;
else
*verified = FLOOD_INVALID;