Allow setting the HTTP proxy via creation info
If the user provides a proxy via the info object it is used
in favor over the http_proxy environment variable.
diff --git a/changelog b/changelog
index 75565bf..e2f56f0 100644
--- a/changelog
+++ b/changelog
@@ -48,6 +48,8 @@
of HTTP headers into the canned response. Eg, cookies may be added like
that without getting involved in having to send the header by hand.
+A new info member http_proxy_address may be used at context creation time to
+set the http proxy. If non-NULL, it overrides http_proxy environment var.
v1.23-chrome32-firefox24
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index f0a09fd..28d798b 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -2090,21 +2090,31 @@
/* split the proxy ads:port if given */
- p = getenv("http_proxy");
- if (p) {
- strncpy(context->http_proxy_address, p,
+ if (info->http_proxy_address) {
+ strncpy(context->http_proxy_address, info->http_proxy_address,
sizeof(context->http_proxy_address) - 1);
context->http_proxy_address[
sizeof(context->http_proxy_address) - 1] = '\0';
+ context->http_proxy_port = info->http_proxy_port;
+ } else {
+ p = getenv("http_proxy");
+ if (p) {
+ strncpy(context->http_proxy_address, p,
+ sizeof(context->http_proxy_address) - 1);
+ context->http_proxy_address[
+ sizeof(context->http_proxy_address) - 1] = '\0';
- p = strchr(context->http_proxy_address, ':');
- if (p == NULL) {
- lwsl_err("http_proxy needs to be ads:port\n");
- goto bail;
+ p = strchr(context->http_proxy_address, ':');
+ if (p == NULL) {
+ lwsl_err("http_proxy needs to be ads:port\n");
+ goto bail;
+ }
+ *p = '\0';
+ context->http_proxy_port = atoi(p + 1);
}
- *p = '\0';
- context->http_proxy_port = atoi(p + 1);
+ }
+ if (context->http_proxy_address[0]) {
lwsl_notice(" Proxy %s:%u\n",
context->http_proxy_address,
context->http_proxy_port);
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index 24856a4..a7c07aa 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -938,6 +938,8 @@
const char *ssl_private_key_filepath;
const char *ssl_ca_filepath;
const char *ssl_cipher_list;
+ const char *http_proxy_address;
+ unsigned int http_proxy_port;
int gid;
int uid;
unsigned int options;