diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-06-01 19:52:35 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-06-01 19:59:39 +0200 |
commit | fbc5e0fae12a72b547e6d841e80116ce5c26fbf0 (patch) | |
tree | d3cec49752d4d014852a2d7afefa02cf1b1f35e5 | |
parent | 0d83edaba9f4b298fa8a645a032bc84e0c03ef1b (diff) | |
parent | dbaf79c9d7270eafd2479d9c650efa1433d65efd (diff) | |
download | ffmpeg-fbc5e0fae12a72b547e6d841e80116ce5c26fbf0.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
http: Add the url_shutdown function for https, too
http: Simplify code by removing a local variable
http: Clear the old URLContext pointer when closed
tcp: Try enabling SO_REUSEADDR when listening
tcp: Check the return values from bind and accept
avisynth: Make sure the filename passed to avisynth is in the right code page
Conflicts:
libavformat/http.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/avisynth.c | 7 | ||||
-rw-r--r-- | libavformat/http.c | 20 | ||||
-rw-r--r-- | libavformat/tcp.c | 2 |
3 files changed, 15 insertions, 14 deletions
diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 13b5f4309c..4a00787a9c 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -49,10 +49,15 @@ static int avisynth_read_header(AVFormatContext *s) DWORD id; AVStream *st; AVISynthStream *stream; + wchar_t filename_wchar[1024] = { 0 }; + char filename_char[1024] = { 0 }; AVIFileInit(); - res = AVIFileOpen(&avs->file, s->filename, OF_READ|OF_SHARE_DENY_WRITE, NULL); + /* avisynth can't accept UTF-8 filename */ + MultiByteToWideChar(CP_UTF8, 0, s->filename, -1, filename_wchar, 1024); + WideCharToMultiByte(CP_THREAD_ACP, 0, filename_wchar, -1, filename_char, 1024, NULL, NULL); + res = AVIFileOpen(&avs->file, filename_char, OF_READ|OF_SHARE_DENY_WRITE, NULL); if (res != S_OK) { av_log(s, AV_LOG_ERROR, "AVIFileOpen failed with error %ld", res); diff --git a/libavformat/http.c b/libavformat/http.c index a30312905d..9a5ca625b0 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -106,7 +106,6 @@ static int http_open_cnx(URLContext *h) int port, use_proxy, err, location_changed = 0, redirects = 0, attempts = 0; HTTPAuthType cur_auth_type, cur_proxy_auth_type; HTTPContext *s = h->priv_data; - URLContext *hd = NULL; proxy_path = getenv("http_proxy"); use_proxy = (proxy_path != NULL) && !getenv("no_proxy") && @@ -147,12 +146,10 @@ static int http_open_cnx(URLContext *h) ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL); if (!s->hd) { - err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE, + err = ffurl_open(&s->hd, buf, AVIO_FLAG_READ_WRITE, &h->interrupt_callback, NULL); if (err < 0) goto fail; - - s->hd = hd; } cur_auth_type = s->auth_state.auth_type; @@ -163,8 +160,7 @@ static int http_open_cnx(URLContext *h) if (s->http_code == 401) { if ((cur_auth_type == HTTP_AUTH_NONE || s->auth_state.stale) && s->auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) { - ffurl_closep(&hd); - s->hd = NULL; + ffurl_closep(&s->hd); goto redo; } else goto fail; @@ -172,8 +168,7 @@ static int http_open_cnx(URLContext *h) if (s->http_code == 407) { if ((cur_proxy_auth_type == HTTP_AUTH_NONE || s->proxy_auth_state.stale) && s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) { - ffurl_closep(&hd); - s->hd = NULL; + ffurl_closep(&s->hd); goto redo; } else goto fail; @@ -181,8 +176,7 @@ static int http_open_cnx(URLContext *h) if ((s->http_code == 301 || s->http_code == 302 || s->http_code == 303 || s->http_code == 307) && location_changed == 1) { /* url moved, get next */ - ffurl_closep(&hd); - s->hd = NULL; + ffurl_closep(&s->hd); if (redirects++ >= MAX_REDIRECTS) return AVERROR(EIO); /* Restart the authentication process with the new target, which @@ -194,9 +188,8 @@ static int http_open_cnx(URLContext *h) } return 0; fail: - if (hd) - ffurl_closep(&hd); - s->hd = NULL; + if (s->hd) + ffurl_closep(&s->hd); return AVERROR(EIO); } @@ -676,6 +669,7 @@ URLProtocol ff_https_protocol = { .url_seek = http_seek, .url_close = http_close, .url_get_file_handle = http_get_file_handle, + .url_shutdown = http_shutdown, .priv_data_size = sizeof(HTTPContext), .priv_data_class = &https_context_class, .flags = URL_PROTOCOL_FLAG_NETWORK, diff --git a/libavformat/tcp.c b/libavformat/tcp.c index a8ebd81dc9..a46957eb47 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -83,6 +83,8 @@ static int tcp_open(URLContext *h, const char *uri, int flags) if (listen_socket) { int fd1; + int reuse = 1; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); ret = bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen); if (ret) { ret = ff_neterrno(); |