uclient-fetch: use package name pattern in message for missing SSL library
[project/uclient.git] / uclient-http.c
index 899f367..ef8de98 100644 (file)
@@ -20,6 +20,7 @@
 #include <ctype.h>
 #include <unistd.h>
 #include <stdint.h>
+#include <string.h>
 #include <fcntl.h>
 
 #include <libubox/ustream.h>
@@ -379,11 +380,14 @@ get_cnonce(char *dest)
 {
        uint32_t val = 0;
        FILE *f;
+       size_t n;
 
        f = fopen("/dev/urandom", "r");
        if (f) {
-               fread(&val, sizeof(val), 1, f);
+               n = fread(&val, sizeof(val), 1, f);
                fclose(f);
+               if (n != 1)
+                       return;
        }
 
        bin_to_hex(dest, &val, sizeof(val));
@@ -559,6 +563,7 @@ uclient_http_send_headers(struct uclient_http *uh)
        struct uclient_url *url = uh->uc.url;
        struct blob_attr *cur;
        enum request_type req_type = uh->req_type;
+       bool literal_ipv6;
        int rem;
 
        if (uh->state >= HTTP_STATE_HEADERS_SENT)
@@ -567,11 +572,17 @@ uclient_http_send_headers(struct uclient_http *uh)
        if (uh->uc.proxy_url)
                url = uh->uc.proxy_url;
 
+       literal_ipv6 = strchr(url->host, ':');
+
        ustream_printf(uh->us,
                "%s %s HTTP/1.1\r\n"
-               "Host: %s\r\n",
-               request_types[req_type],
-               url->location, url->host);
+               "Host: %s%s%s%s%s\r\n",
+               request_types[req_type], url->location,
+               literal_ipv6 ? "[" : "",
+               url->host,
+               literal_ipv6 ? "]" : "",
+               url->port ? ":" : "",
+               url->port ? url->port : "");
 
        blobmsg_for_each_attr(cur, uh->headers.head, rem)
                ustream_printf(uh->us, "%s: %s\r\n", blobmsg_name(cur), (char *) blobmsg_data(cur));