New upstream version 18.0.1+dfsg1

This commit is contained in:
Sebastian Ramacher 2017-04-19 21:54:15 +02:00
parent 6efda2859e
commit f2cf6cce50
1337 changed files with 41178 additions and 84670 deletions

View file

@ -650,7 +650,7 @@ int RTMP_AddStream(RTMP *r, const char *playpath)
}
static int
add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host, int port)
add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host, int port, socklen_t addrlen_hint)
{
char *hostname;
int ret = TRUE;
@ -698,7 +698,7 @@ add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host,
// prefer ipv4 results, since lots of ISPs have broken ipv6 connectivity
for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
{
if (ptr->ai_family == AF_INET)
if (ptr->ai_family == AF_INET && (!addrlen_hint || ptr->ai_addrlen == addrlen_hint))
{
memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
*addrlen = (socklen_t)ptr->ai_addrlen;
@ -710,7 +710,7 @@ add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host,
{
for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
{
if (ptr->ai_family == AF_INET6)
if (ptr->ai_family == AF_INET6 && (!addrlen_hint || ptr->ai_addrlen == addrlen_hint))
{
memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
*addrlen = (socklen_t)ptr->ai_addrlen;
@ -905,6 +905,7 @@ RTMP_Connect(RTMP *r, RTMPPacket *cp)
#endif
struct sockaddr_storage service;
socklen_t addrlen = 0;
socklen_t addrlen_hint = 0;
if (!r->Link.hostname.av_len)
return FALSE;
@ -920,16 +921,19 @@ RTMP_Connect(RTMP *r, RTMPPacket *cp)
memset(&service, 0, sizeof(service));
if (r->m_bindIP.addrLen)
addrlen_hint = r->m_bindIP.addrLen;
if (r->Link.socksport)
{
/* Connect via SOCKS */
if (!add_addr_info(&service, &addrlen, &r->Link.sockshost, r->Link.socksport))
if (!add_addr_info(&service, &addrlen, &r->Link.sockshost, r->Link.socksport, addrlen_hint))
return FALSE;
}
else
{
/* Connect directly */
if (!add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port))
if (!add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port, addrlen_hint))
return FALSE;
}
@ -949,7 +953,7 @@ SocksNegotiate(RTMP *r)
socklen_t addrlen = 0;
memset(&service, 0, sizeof(service));
add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port);
add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port, 0);
// not doing IPv6 socks
if (service.ss_family == AF_INET6)
@ -4248,6 +4252,11 @@ RTMP_Close(RTMP *r)
r->Link.lFlags ^= RTMP_LF_FTCU;
}
memset (&r->m_bindIP, 0, sizeof(r->m_bindIP));
r->m_bCustomSend = 0;
r->m_customSendFunc = NULL;
r->m_customSendParam = NULL;
#if defined(CRYPTO) || defined(USE_ONLY_MD5)
if (!(r->Link.protocol & RTMP_FEATURE_WRITE) || (r->Link.pFlags & RTMP_PUB_CLEAN))
{