Handle IPv6 in the RTSP code
Originally committed as revision 24925 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -696,13 +696,10 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
|
|||||||
th->ttl = strtol(p, (char **)&p, 10);
|
th->ttl = strtol(p, (char **)&p, 10);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(parameter, "destination")) {
|
} else if (!strcmp(parameter, "destination")) {
|
||||||
struct in_addr ipaddr;
|
|
||||||
|
|
||||||
if (*p == '=') {
|
if (*p == '=') {
|
||||||
p++;
|
p++;
|
||||||
get_word_sep(buf, sizeof(buf), ";,", &p);
|
get_word_sep(buf, sizeof(buf), ";,", &p);
|
||||||
if (ff_inet_aton(buf, &ipaddr))
|
get_sockaddr(buf, &th->destination);
|
||||||
th->destination = ntohl(ipaddr.s_addr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (*p != ';' && *p != '\0' && *p != ',')
|
while (*p != ';' && *p != '\0' && *p != ',')
|
||||||
@@ -1174,20 +1171,22 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST: {
|
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST: {
|
||||||
char url[1024];
|
char url[1024], namebuf[50];
|
||||||
struct in_addr in;
|
struct sockaddr_storage addr;
|
||||||
int port, ttl;
|
int port, ttl;
|
||||||
|
|
||||||
if (reply->transports[0].destination) {
|
if (reply->transports[0].destination.ss_family) {
|
||||||
in.s_addr = htonl(reply->transports[0].destination);
|
addr = reply->transports[0].destination;
|
||||||
port = reply->transports[0].port_min;
|
port = reply->transports[0].port_min;
|
||||||
ttl = reply->transports[0].ttl;
|
ttl = reply->transports[0].ttl;
|
||||||
} else {
|
} else {
|
||||||
in = ((struct sockaddr_in*)&rtsp_st->sdp_ip)->sin_addr;
|
addr = rtsp_st->sdp_ip;
|
||||||
port = rtsp_st->sdp_port;
|
port = rtsp_st->sdp_port;
|
||||||
ttl = rtsp_st->sdp_ttl;
|
ttl = rtsp_st->sdp_ttl;
|
||||||
}
|
}
|
||||||
ff_url_join(url, sizeof(url), "rtp", NULL, inet_ntoa(in),
|
getnameinfo((struct sockaddr*) &addr, sizeof(addr),
|
||||||
|
namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
|
||||||
|
ff_url_join(url, sizeof(url), "rtp", NULL, namebuf,
|
||||||
port, "?ttl=%d", ttl);
|
port, "?ttl=%d", ttl);
|
||||||
if (url_open(&rtsp_st->rtp_handle, url, URL_RDWR) < 0) {
|
if (url_open(&rtsp_st->rtp_handle, url, URL_RDWR) < 0) {
|
||||||
err = AVERROR_INVALIDDATA;
|
err = AVERROR_INVALIDDATA;
|
||||||
|
@@ -96,7 +96,7 @@ typedef struct RTSPTransportField {
|
|||||||
* packets will be allowed to make before being discarded. */
|
* packets will be allowed to make before being discarded. */
|
||||||
int ttl;
|
int ttl;
|
||||||
|
|
||||||
uint32_t destination; /**< destination IP address */
|
struct sockaddr_storage destination; /**< destination IP address */
|
||||||
|
|
||||||
/** data/packet transport protocol; e.g. RTP or RDT */
|
/** data/packet transport protocol; e.g. RTP or RDT */
|
||||||
enum RTSPTransport transport;
|
enum RTSPTransport transport;
|
||||||
|
Reference in New Issue
Block a user