Lines 356-361
Link Here
|
356 |
static int proxy_establish_connection(server *srv, handler_ctx *hctx) { |
356 |
static int proxy_establish_connection(server *srv, handler_ctx *hctx) { |
357 |
struct sockaddr *proxy_addr; |
357 |
struct sockaddr *proxy_addr; |
358 |
struct sockaddr_in proxy_addr_in; |
358 |
struct sockaddr_in proxy_addr_in; |
|
|
359 |
struct sockaddr_in6 proxy_addr_in6; |
359 |
socklen_t servlen; |
360 |
socklen_t servlen; |
360 |
|
361 |
|
361 |
plugin_data *p = hctx->plugin_data; |
362 |
plugin_data *p = hctx->plugin_data; |
Lines 364-375
Link Here
|
364 |
|
365 |
|
365 |
memset(&proxy_addr, 0, sizeof(proxy_addr)); |
366 |
memset(&proxy_addr, 0, sizeof(proxy_addr)); |
366 |
|
367 |
|
367 |
proxy_addr_in.sin_family = AF_INET; |
368 |
if (strstr(host->host->ptr,":")) { |
368 |
proxy_addr_in.sin_addr.s_addr = inet_addr(host->host->ptr); |
369 |
proxy_addr_in6.sin6_family = AF_INET6; |
369 |
proxy_addr_in.sin_port = htons(host->port); |
370 |
inet_pton(AF_INET6,host->host->ptr,(char *)&proxy_addr_in6.sin6_addr); |
370 |
servlen = sizeof(proxy_addr_in); |
371 |
proxy_addr_in6.sin6_port = htons(host->port); |
|
|
372 |
servlen = sizeof(proxy_addr_in6); |
373 |
proxy_addr = (struct sockaddr *) &proxy_addr_in6; |
374 |
} else { |
375 |
proxy_addr_in.sin_family = AF_INET; |
376 |
proxy_addr_in.sin_addr.s_addr = inet_addr(host->host->ptr); |
377 |
proxy_addr_in.sin_port = htons(host->port); |
378 |
servlen = sizeof(proxy_addr_in); |
379 |
proxy_addr = (struct sockaddr *) &proxy_addr_in; |
380 |
} |
371 |
|
381 |
|
372 |
proxy_addr = (struct sockaddr *) &proxy_addr_in; |
|
|
373 |
|
382 |
|
374 |
if (-1 == connect(proxy_fd, proxy_addr, servlen)) { |
383 |
if (-1 == connect(proxy_fd, proxy_addr, servlen)) { |
375 |
if (errno == EINPROGRESS || errno == EALREADY) { |
384 |
if (errno == EINPROGRESS || errno == EALREADY) { |
Lines 740-748
Link Here
|
740 |
|
749 |
|
741 |
switch(hctx->state) { |
750 |
switch(hctx->state) { |
742 |
case PROXY_STATE_INIT: |
751 |
case PROXY_STATE_INIT: |
743 |
if (-1 == (hctx->fd = socket(AF_INET, SOCK_STREAM, 0))) { |
752 |
if (strstr(host->host->ptr,":")) { |
|
|
753 |
if (-1 == (hctx->fd = socket(AF_INET6, SOCK_STREAM, 0))) { |
754 |
log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed: ", strerror(errno)); |
755 |
return HANDLER_ERROR; |
756 |
} |
757 |
} else { |
758 |
if (-1 == (hctx->fd = socket(AF_INET, SOCK_STREAM, 0))) { |
744 |
log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed: ", strerror(errno)); |
759 |
log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed: ", strerror(errno)); |
745 |
return HANDLER_ERROR; |
760 |
return HANDLER_ERROR; |
|
|
761 |
} |
746 |
} |
762 |
} |
747 |
hctx->fde_ndx = -1; |
763 |
hctx->fde_ndx = -1; |
748 |
|
764 |
|