Commit f282f734 authored by mstorsjo's avatar mstorsjo

RTSP: Resolve and use the actual IP address of the peer we're connected to,

instead of using the original host name, since the RTP (and UDP) protocols
may choose another IP address if the host name resolves into several different
addresses.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@22398 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 42f80a88
...@@ -1381,10 +1381,12 @@ int ff_rtsp_connect(AVFormatContext *s) ...@@ -1381,10 +1381,12 @@ int ff_rtsp_connect(AVFormatContext *s)
char host[1024], path[1024], tcpname[1024], cmd[2048], auth[128]; char host[1024], path[1024], tcpname[1024], cmd[2048], auth[128];
char *option_list, *option, *filename; char *option_list, *option, *filename;
URLContext *rtsp_hd; URLContext *rtsp_hd;
int port, err; int port, err, tcp_fd;
RTSPMessageHeader reply1, *reply = &reply1; RTSPMessageHeader reply1, *reply = &reply1;
int lower_transport_mask = 0; int lower_transport_mask = 0;
char real_challenge[64]; char real_challenge[64];
struct sockaddr_storage peer;
socklen_t peer_len = sizeof(peer);
if (!ff_network_init()) if (!ff_network_init())
return AVERROR(EIO); return AVERROR(EIO);
...@@ -1455,6 +1457,12 @@ redirect: ...@@ -1455,6 +1457,12 @@ redirect:
rt->rtsp_hd = rtsp_hd; rt->rtsp_hd = rtsp_hd;
rt->seq = 0; rt->seq = 0;
tcp_fd = url_get_file_handle(rtsp_hd);
if (!getpeername(tcp_fd, (struct sockaddr*) &peer, &peer_len)) {
getnameinfo((struct sockaddr*) &peer, peer_len, host, sizeof(host),
NULL, 0, NI_NUMERICHOST);
}
/* request options supported by the server; this also detects server /* request options supported by the server; this also detects server
* type */ * type */
av_strlcpy(rt->control_uri, s->filename, av_strlcpy(rt->control_uri, s->filename,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment