mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 04:30:28 +00:00
res_hep: Adds hostname resolution support for capture_address
Previously, only an IP address would be accepted for the capture_address config setting in hep.conf. This change allows capture_address to be a resolvable hostname or an IP address. ASTERISK-27796 #close Reported-By: Sebastian Gutierrez Change-Id: I33e1a37a8b86e20505dadeda760b861a9ef51f6f
This commit is contained in:
@@ -367,6 +367,27 @@ static void hepv3_data_dtor(void *obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! \brief Pulls first resolved address and returns it */
|
||||||
|
static int ast_sockaddr_resolve_first_af(struct ast_sockaddr *addr,
|
||||||
|
const char* name, int flag, int family)
|
||||||
|
{
|
||||||
|
struct ast_sockaddr *addrs;
|
||||||
|
int addrs_cnt;
|
||||||
|
|
||||||
|
addrs_cnt = ast_sockaddr_resolve(&addrs, name, flag, family);
|
||||||
|
if (addrs_cnt <= 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (addrs_cnt > 1) {
|
||||||
|
ast_debug(1, "Multiple addresses resolving %s, using the first one only\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
ast_sockaddr_copy(addr, &addrs[0]);
|
||||||
|
|
||||||
|
ast_free(addrs);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief Allocate the HEPv3 run-time data */
|
/*! \brief Allocate the HEPv3 run-time data */
|
||||||
static struct hepv3_runtime_data *hepv3_data_alloc(struct hepv3_global_config *config)
|
static struct hepv3_runtime_data *hepv3_data_alloc(struct hepv3_global_config *config)
|
||||||
{
|
{
|
||||||
@@ -379,10 +400,11 @@ static struct hepv3_runtime_data *hepv3_data_alloc(struct hepv3_global_config *c
|
|||||||
|
|
||||||
data->sockfd = -1;
|
data->sockfd = -1;
|
||||||
|
|
||||||
if (!ast_sockaddr_parse(&data->remote_addr, config->capture_address, PARSE_PORT_REQUIRE)) {
|
if (ast_sockaddr_resolve_first_af(&data->remote_addr, config->capture_address, PARSE_PORT_REQUIRE, AST_AF_UNSPEC)) {
|
||||||
ast_log(AST_LOG_WARNING, "Failed to create address from %s\n", config->capture_address);
|
ast_log(AST_LOG_WARNING, "Failed to create address from %s\n", config->capture_address);
|
||||||
ao2_ref(data, -1);
|
ao2_ref(data, -1);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data->sockfd = socket(ast_sockaddr_is_ipv6(&data->remote_addr) ? AF_INET6 : AF_INET, SOCK_DGRAM, 0);
|
data->sockfd = socket(ast_sockaddr_is_ipv6(&data->remote_addr) ? AF_INET6 : AF_INET, SOCK_DGRAM, 0);
|
||||||
|
Reference in New Issue
Block a user