From: George Joseph Date: Wed, 21 Aug 2019 18:29:57 +0000 (-0600) Subject: chan_rtp: Accept hostname as well as ip address as destination X-Git-Tag: 16.6.0-rc1~17^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c00a010fe8e4cac63f09406a8c7ff97166f5f773;p=thirdparty%2Fasterisk.git chan_rtp: Accept hostname as well as ip address as destination The UnicastRTP channel driver provided by chan_rtp now accepts ":" as an alternative to ":" in the destination. The first AAAA (preferred) or A record resolved will be used as the destination. The lookup is synchronous so beware of possible dialplan delays if you specify a hostname. Change-Id: Ie6f95b983a8792bf0dacc64c7953a41032dba677 --- diff --git a/channels/chan_rtp.c b/channels/chan_rtp.c index 7d9e26db89..d8f7324c84 100644 --- a/channels/chan_rtp.c +++ b/channels/chan_rtp.c @@ -43,6 +43,7 @@ #include "asterisk/causes.h" #include "asterisk/format_cache.h" #include "asterisk/multicast_rtp.h" +#include "asterisk/dns_core.h" /* Forward declarations */ static struct ast_channel *multicast_rtp_request(const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause); @@ -293,9 +294,23 @@ static struct ast_channel *unicast_rtp_request(const char *type, struct ast_form ast_log(LOG_ERROR, "Destination is required for the 'UnicastRTP' channel\n"); goto failure; } + if (!ast_sockaddr_parse(&address, args.destination, PARSE_PORT_REQUIRE)) { - ast_log(LOG_ERROR, "Destination '%s' could not be parsed\n", args.destination); - goto failure; + int rc; + char *host; + char *port; + + rc = ast_sockaddr_split_hostport(args.destination, &host, &port, PARSE_PORT_REQUIRE); + if (!rc) { + ast_log(LOG_ERROR, "Unable to parse destination '%s' into host and port\n", args.destination); + goto failure; + } + + rc = ast_dns_resolve_ipv6_and_ipv4(&address, host, port); + if (rc != 0) { + ast_log(LOG_ERROR, "Unable to resolve host '%s'\n", host); + goto failure; + } } if (!ast_strlen_zero(args.options) diff --git a/doc/CHANGES-staging/chan_rtp.txt b/doc/CHANGES-staging/chan_rtp.txt new file mode 100644 index 0000000000..ce908ee037 --- /dev/null +++ b/doc/CHANGES-staging/chan_rtp.txt @@ -0,0 +1,7 @@ +Subject: chan_rtp + +The UnicastRTP channel driver provided by chan_rtp now accepts +":" as an alternative to ":" in the destination. +The first AAAA (preferred) or A record resolved will be used as the destination. +The lookup is synchronous so beware of possible dialplan delays if you specify a +hostname.