Commit 0c04df0a authored by mstorsjo's avatar mstorsjo

RTSP: Don't store the connection handles in local variables

This removes some useless copying of handles, and simplifies error handling.

Patch by Josh Allmann, joshua dot allmann at gmail


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@23648 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 2d509c96
...@@ -1490,7 +1490,6 @@ int ff_rtsp_connect(AVFormatContext *s) ...@@ -1490,7 +1490,6 @@ int ff_rtsp_connect(AVFormatContext *s)
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
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, *rtsp_hd_out;
int port, err, tcp_fd; int port, err, tcp_fd;
RTSPMessageHeader reply1 = {}, *reply = &reply1; RTSPMessageHeader reply1 = {}, *reply = &reply1;
int lower_transport_mask = 0; int lower_transport_mask = 0;
...@@ -1578,7 +1577,7 @@ redirect: ...@@ -1578,7 +1577,7 @@ redirect:
av_get_random_seed(), av_get_random_seed()); av_get_random_seed(), av_get_random_seed());
/* GET requests */ /* GET requests */
if (url_open(&rtsp_hd, httpname, URL_RDONLY) < 0) { if (url_open(&rt->rtsp_hd, httpname, URL_RDONLY) < 0) {
err = AVERROR(EIO); err = AVERROR(EIO);
goto fail; goto fail;
} }
...@@ -1590,18 +1589,16 @@ redirect: ...@@ -1590,18 +1589,16 @@ redirect:
"Pragma: no-cache\r\n" "Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n", "Cache-Control: no-cache\r\n",
sessioncookie); sessioncookie);
ff_http_set_headers(rtsp_hd, headers); ff_http_set_headers(rt->rtsp_hd, headers);
/* complete the connection */ /* complete the connection */
if (url_read(rtsp_hd, NULL, 0)) { if (url_read(rt->rtsp_hd, NULL, 0)) {
url_close(rtsp_hd);
err = AVERROR(EIO); err = AVERROR(EIO);
goto fail; goto fail;
} }
/* POST requests */ /* POST requests */
if (url_open(&rtsp_hd_out, httpname, URL_WRONLY) < 0 ) { if (url_open(&rt->rtsp_hd_out, httpname, URL_WRONLY) < 0 ) {
url_close(rtsp_hd);
err = AVERROR(EIO); err = AVERROR(EIO);
goto fail; goto fail;
} }
...@@ -1615,23 +1612,21 @@ redirect: ...@@ -1615,23 +1612,21 @@ redirect:
"Content-Length: 32767\r\n" "Content-Length: 32767\r\n"
"Expires: Sun, 9 Jan 1972 00:00:00 GMT\r\n", "Expires: Sun, 9 Jan 1972 00:00:00 GMT\r\n",
sessioncookie); sessioncookie);
ff_http_set_headers(rtsp_hd_out, headers); ff_http_set_headers(rt->rtsp_hd_out, headers);
ff_http_set_chunked_transfer_encoding(rtsp_hd_out, 0); ff_http_set_chunked_transfer_encoding(rt->rtsp_hd_out, 0);
} else { } else {
/* open the tcp connection */ /* open the tcp connection */
ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, host, port, NULL); ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, host, port, NULL);
if (url_open(&rtsp_hd, tcpname, URL_RDWR) < 0) { if (url_open(&rt->rtsp_hd, tcpname, URL_RDWR) < 0) {
err = AVERROR(EIO); err = AVERROR(EIO);
goto fail; goto fail;
} }
rtsp_hd_out = rtsp_hd; rt->rtsp_hd_out = rt->rtsp_hd;
} }
rt->rtsp_hd = rtsp_hd;
rt->rtsp_hd_out = rtsp_hd_out;
rt->seq = 0; rt->seq = 0;
tcp_fd = url_get_file_handle(rtsp_hd); tcp_fd = url_get_file_handle(rt->rtsp_hd);
if (!getpeername(tcp_fd, (struct sockaddr*) &peer, &peer_len)) { if (!getpeername(tcp_fd, (struct sockaddr*) &peer, &peer_len)) {
getnameinfo((struct sockaddr*) &peer, peer_len, host, sizeof(host), getnameinfo((struct sockaddr*) &peer, peer_len, host, sizeof(host),
NULL, 0, NI_NUMERICHOST); NULL, 0, NI_NUMERICHOST);
......
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