From: Felix Fietkau Date: Sat, 22 Mar 2014 14:35:50 +0000 (+0100) Subject: pass the initial / from uclient core to the proto handler X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5f2e60972941c1ca1a6fa572b39e18cbc58137d9;p=oweals%2Fuclient.git pass the initial / from uclient core to the proto handler Signed-off-by: Felix Fietkau --- diff --git a/uclient-http.c b/uclient-http.c index 3218b4c..9e7505c 100644 --- a/uclient-http.c +++ b/uclient-http.c @@ -240,7 +240,7 @@ uclient_http_send_headers(struct uclient_http *uh) req_type = REQ_HEAD; ustream_printf(uh->us, - "%s /%s HTTP/1.1\r\n" + "%s %s HTTP/1.1\r\n" "Host: %s\r\n", request_types[req_type], url->location, url->host); diff --git a/uclient.c b/uclient.c index 095fc93..4125dc2 100644 --- a/uclient.c +++ b/uclient.c @@ -12,8 +12,9 @@ static struct uclient_url *uclient_get_url(const char *url_str) const struct uclient_backend *backend; const char * const *prefix = NULL; struct uclient_url *url; - char *url_buf, *next; - int i; + const char *location; + char *host_buf, *uri_buf, *next; + int i, host_len; for (i = 0; i < ARRAY_SIZE(backends); i++) { int prefix_len = 0; @@ -36,28 +37,33 @@ static struct uclient_url *uclient_get_url(const char *url_str) if (!*prefix) return NULL; - url = calloc_a(sizeof(*url), &url_buf, strlen(url_str) + 1); - url->backend = backend; - strcpy(url_buf, url_str); - - next = strchr(url_buf, '/'); + next = strchr(url_str, '/'); if (next) { - *next = 0; - url->location = next + 1; + location = next; + host_len = next - url_str; } else { - url->location = ""; + location = "/"; + host_len = strlen(url_str); } - url->host = url_buf; - next = strchr(url_buf, '@'); + url = calloc_a(sizeof(*url), + &host_buf, host_len + 1, + &uri_buf, strlen(location) + 1); + + url->backend = backend; + url->location = strcpy(uri_buf, location); + + url->host = strncpy(host_buf, url_str, host_len); + + next = strchr(host_buf, '@'); if (next) { *next = 0; url->host = next + 1; - if (uclient_urldecode(url_buf, url_buf, false) < 0) + if (uclient_urldecode(host_buf, host_buf, false) < 0) goto free; - url->auth = url_buf; + url->auth = host_buf; } /* Literal IPv6 address */