Skip to content

Commit

Permalink
Add IPv6 support to DD_AGENT_HOST
Browse files Browse the repository at this point in the history
Fixes #1667

Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
  • Loading branch information
bwoebi committed Aug 22, 2022
1 parent a080f17 commit 7e44393
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
9 changes: 6 additions & 3 deletions ext/php7/coms.c
Original file line number Diff line number Diff line change
Expand Up @@ -652,7 +652,8 @@ static ddtrace_coms_stack_t *_dd_coms_attempt_acquire_stack(void) {
}

#define TRACE_PATH_STR "/v0.4/traces"
#define HOST_FORMAT_STR "http://%s:%u"
#define HOST_V6_FORMAT_STR "http://[%s]:%u"
#define HOST_V4_FORMAT_STR "http://%s:%u"
#define DEFAULT_UDS_PATH "/var/run/datadog/apm.socket"

static struct curl_slist *dd_agent_curl_headers = NULL;
Expand Down Expand Up @@ -723,12 +724,14 @@ char *ddtrace_agent_url(void) {
}

if (ZSTR_LEN(hostname) > 0) {
bool isIPv6 = memchr(ZSTR_VAL(hostname), ':', ZSTR_LEN(hostname));

int64_t port = get_global_DD_TRACE_AGENT_PORT();
if (port <= 0 || port > 65535) {
port = 8126;
}
char *formatted_url;
asprintf(&formatted_url, HOST_FORMAT_STR, ZSTR_VAL(hostname), (uint32_t)port);
asprintf(&formatted_url, isIPv6 ? HOST_V6_FORMAT_STR : HOST_V4_FORMAT_STR, ZSTR_VAL(hostname), (uint32_t)port);
return formatted_url;
}

Expand All @@ -741,7 +744,7 @@ char *ddtrace_agent_url(void) {
port = 8126;
}
char *formatted_url;
asprintf(&formatted_url, HOST_FORMAT_STR, "localhost", (uint32_t)port);
asprintf(&formatted_url, HOST_V4_FORMAT_STR, "localhost", (uint32_t)port);
return formatted_url;
}

Expand Down
9 changes: 6 additions & 3 deletions ext/php8/coms.c
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,8 @@ static ddtrace_coms_stack_t *_dd_coms_attempt_acquire_stack(void) {
}

#define TRACE_PATH_STR "/v0.4/traces"
#define HOST_FORMAT_STR "http://%s:%u"
#define HOST_V6_FORMAT_STR "http://[%s]:%u"
#define HOST_V4_FORMAT_STR "http://%s:%u"
#define DEFAULT_UDS_PATH "/var/run/datadog/apm.socket"

static struct curl_slist *dd_agent_curl_headers = NULL;
Expand Down Expand Up @@ -717,12 +718,14 @@ char *ddtrace_agent_url(void) {
}

if (ZSTR_LEN(hostname) > 0) {
bool isIPv6 = memchr(ZSTR_VAL(hostname), ':', ZSTR_LEN(hostname));

int64_t port = get_global_DD_TRACE_AGENT_PORT();
if (port <= 0 || port > 65535) {
port = 8126;
}
char *formatted_url;
asprintf(&formatted_url, HOST_FORMAT_STR, ZSTR_VAL(hostname), (uint32_t)port);
asprintf(&formatted_url, isIPv6 ? HOST_V6_FORMAT_STR : HOST_V4_FORMAT_STR, ZSTR_VAL(hostname), (uint32_t)port);
return formatted_url;
}

Expand All @@ -735,7 +738,7 @@ char *ddtrace_agent_url(void) {
port = 8126;
}
char *formatted_url;
asprintf(&formatted_url, HOST_FORMAT_STR, "localhost", (uint32_t)port);
asprintf(&formatted_url, HOST_V4_FORMAT_STR, "localhost", (uint32_t)port);
return formatted_url;
}

Expand Down
18 changes: 18 additions & 0 deletions tests/ext/background-sender/background_sender_ipv6_support.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
--TEST--
DD_AGENT_HOST with IPv6 works
--SKIPIF--
<?php include __DIR__ . '/../startup_logging_skipif.inc'; ?>
--ENV--
DD_AGENT_HOST=::1
--FILE--
<?php
include_once __DIR__ . '/../startup_logging.inc';

$logs = dd_get_startup_logs([], ['DD_TRACE_DEBUG=1']);

dd_dump_startup_logs($logs, [
'agent_url',
]);
?>
--EXPECT--
agent_url: "http://[::1]:8126"

0 comments on commit 7e44393

Please sign in to comment.