mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 20:20:07 +00:00
chan_rtp: Accept hostname as well as ip address as destination
The UnicastRTP channel driver provided by chan_rtp now accepts "<hostname>:<port>" as an alternative to "<ip_address>:<port>" 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
This commit is contained in:
@@ -43,6 +43,7 @@
|
|||||||
#include "asterisk/causes.h"
|
#include "asterisk/causes.h"
|
||||||
#include "asterisk/format_cache.h"
|
#include "asterisk/format_cache.h"
|
||||||
#include "asterisk/multicast_rtp.h"
|
#include "asterisk/multicast_rtp.h"
|
||||||
|
#include "asterisk/dns_core.h"
|
||||||
|
|
||||||
/* Forward declarations */
|
/* 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);
|
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,11 +294,25 @@ 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");
|
ast_log(LOG_ERROR, "Destination is required for the 'UnicastRTP' channel\n");
|
||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ast_sockaddr_parse(&address, args.destination, PARSE_PORT_REQUIRE)) {
|
if (!ast_sockaddr_parse(&address, args.destination, PARSE_PORT_REQUIRE)) {
|
||||||
ast_log(LOG_ERROR, "Destination '%s' could not be parsed\n", args.destination);
|
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;
|
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)
|
if (!ast_strlen_zero(args.options)
|
||||||
&& ast_app_parse_options(unicast_rtp_options, &opts, opt_args,
|
&& ast_app_parse_options(unicast_rtp_options, &opts, opt_args,
|
||||||
ast_strdupa(args.options))) {
|
ast_strdupa(args.options))) {
|
||||||
|
7
doc/CHANGES-staging/chan_rtp.txt
Normal file
7
doc/CHANGES-staging/chan_rtp.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Subject: chan_rtp
|
||||||
|
|
||||||
|
The UnicastRTP channel driver provided by chan_rtp now accepts
|
||||||
|
"<hostname>:<port>" as an alternative to "<ip_address>:<port>" 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.
|
Reference in New Issue
Block a user