res_rtp_asterisk: Cache local RTCP address.
authorMark Michelson <mmichelson@digium.com>
Tue, 9 Aug 2016 21:19:34 +0000 (16:19 -0500)
committerMark Michelson <mmichelson@digium.com>
Tue, 9 Aug 2016 21:22:56 +0000 (16:22 -0500)
commit8fe9f1f7f1c37b2021483834f638972698d16ead
tree84f17dbd894b34ef49dd028d7889cd395683be2d
parent4aa137f0d69370934bae40be116b03233b244f7c
res_rtp_asterisk: Cache local RTCP address.

When an RTCP packet is sent or received, res_rtp_asterisk generates a
Stasis event that contains the RTCP report as well as the local and
remote addresses that the report pertains to.

The addresses are determined using ast_find_ourip(). For the local
address, this will typically result in a lookup of the hostname of the
server, and then a DNS lookup of that hostname. If you do not have the
host in /etc/hosts, then this results in a full DNS lookup, which can
potentially block for some time.

This is especially problematic when performing RTCP reads, since those
are done on the same thread responsible for reading and writing media.

This patch addresses the issue by performing a lookup of the local
address when RTCP is allocated. We then use this cached local address
for the Stasis events when necessary.

ASTERISK-26280 #close
Reported by Mark Michelson

Change-Id: I3dd61882c2e57036f09f0c390cf38f7c87e9b556
res/res_rtp_asterisk.c