summaryrefslogtreecommitdiff
path: root/libavformat/http.c
Commit message (Collapse)AuthorAgeFilesLines
* avformat/http: cookie path attribute should be optional not compulsoryMichael J. Walsh2023-03-081-2/+2
| | | | | | | The path attribute in the Set-Cookie header is optional but treated by ffmpeg as being compulsory. Signed-off-by: Michael J. Walsh <mjfwalsh@gmail.com> Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/http: use av_dict_iterateMarvin Scholz2022-12-011-3/+3
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avformat/http: include version.hJames Almer2022-06-241-0/+1
| | | | | | | | This is needed to get LIBAVFORMAT_VERSION, used as part of the user agent. Fixes a recent regression. Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: James Almer <jamrial@gmail.com>
* libavformat: Remove MAX_PATH limit and use UTF-8 version of getenv()Nil Admirari2022-06-211-8/+14
| | | | | | | | | 1. getenv() is replaced with getenv_utf8() across libavformat. 2. New versions of AviSynth+ are now called with UTF-8 filenames. 3. Old versions of AviSynth are still using ANSI strings, but MAX_PATH limit on filename is removed. Signed-off-by: Martin Storsjö <martin@martin.st>
* avformat/http: remove unused function ff_http_get_shutdown_statusSteven Liu2022-05-121-15/+0
| | | | | | ff_http_get_shutdown_status is unused after ticket 9010 fixed. Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* configure: Use a separate config_components.h header for $ALL_COMPONENTSMartin Storsjö2022-03-161-0/+1
| | | | | | | | This avoids unnecessary rebuilds of most source files if only the list of enabled components has changed, but not the other properties of the build, set in config.h. Signed-off-by: Martin Storsjö <martin@martin.st>
* http: Send a Range header even when the offset is 0Justin Ruggles2022-02-111-2/+2
| | | | | | | Using Range allows for getting the full file size from the Content-Range header in the response, even if the server sends back the response using chunked Transfer-Encoding, which does not allow using Content-Length.
* http: Improve handling of Content-Range with Transfer-Encoding:chunkedJustin Ruggles2022-02-111-1/+7
| | | | | | | When Transfer-Encoding:chunked is used, the client must ignore a Content-Length header, if present. However, it should not ignore a Content-Range header, which also includes the full size of the entity.
* avformat/http: Fix double-free on errorAndreas Rheinhardt2022-02-011-3/+1
| | | | | | | | | | | av_dict_set() with AV_DICT_DONT_STRDUP_VAL takes ownership of the string it is passed to as val; this includes freeing it on error. Fixes Coverity issue #1497468. Reviewed-by: Eran Kornblau <eran.kornblau@kaltura.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* http: remove cache_redirect optionerankor2022-01-311-4/+2
| | | | | | | | | following 625ea2d, redirect caching is performed according to the http response headers, there's no need to have it as an option - always start from the original uri, and apply any redirects according to the redirect_cache dictionary. Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
* http: honor response headers in redirect cachingerankor2022-01-181-38/+148
| | | | | | | | | | | | | | add a dictionary that maps "src_url" -> "expiry;dst_url", the dictionary is checked before issuing an http request, and updated after getting a 3xx redirect response. the cache expiry is determined according to the following (in desc priority) - 1. Expires header 2. Cache-Control containing no-cache/no-store (disables caching) 3. Cache-Control s-maxage/max-age 4. Http codes 301/308 are cached indefinitely, other codes are not cached
* http: make caching of redirect url optionalerankor2021-12-311-0/+27
| | | | | | | | | | | added "cache_redirect" option to http. when enabled, requests issued after seek will use the latest redirected url. when disabled, each call to seek will revert to the original url that was sent to http_open. currently, the default remains 'enabled', until the next major libavformat bump, where it will change to 'disabled'.
* avformat/http: prevent truncation of sanitized_pathJames Almer2021-11-251-1/+1
| | | | | | | | | path1 and sanitized_path are both MAX_URL_SIZE bytes long, yet the latter is copied from the former with the addition of one extra character. Should fix a -Wformat-truncation warning. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/http: Add short_seek_size optionDerek Buitenhuis2021-11-171-0/+4
| | | | | | | | | | | | | | | In 45bfe8b838275235412777dd430206d9a24eb3ee, short_seek_threshold was removed from the public AVIO struct. Although this option was private and not intended to be used by public API users, it was nonetheless, because it provided functionality that could otherwise not be gained via public API. This was especially important for networked I/O like HTTP, where the internal size for lavf could be way to small depending on the specifics of a user's usecase, such as reading interlavd media files from cloud storage. Add an AVOption to make this functionality accessible to the HTTP client. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* avformat/http: Stop cookie_dict leaking on errors.Robert Bengtsson-Ölund2021-06-261-1/+5
| | | | | | This solves the memory leak reported in https://trac.ffmpeg.org/ticket/9273 Signed-off-by: Robert Bengtsson-Ölund <robert.bengtsson-olund@intinor.se>
* avformat/http: Remove deprecated "user-agent" optionAndreas Rheinhardt2021-04-271-3/+0
| | | | | | | Deprecated in 27714b462d1bff9e9b40fbdabb39f58e79032b81. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/http,tls: honor http_proxy command line variable for HTTPSMoritz Barsnick2021-03-191-0/+6
| | | | | | | | | | | | | | | | | | Add the "http_proxy" option and its handling to the "tls" protocol, pass the option from the "https" protocol. The "https" protocol already defines the "http_proxy" command line option, like the "http" protocol does. The "http" protocol properly honors that command line option in addition to the environment variable. The "https" protocol doesn't, because the proxy is evaluated in the underlying "tls" protocol, which doesn't have this option, and thus only handles the environment variable, which it has access to. Fixes #7223. Signed-off-by: Moritz Barsnick <barsnick@gmx.net> Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/http: Fix leak when using deprecated optionAndreas Rheinhardt2021-03-071-10/+1
| | | | | | | | | | | | When the deprecated option "user-agent" was set to something different than its default value, said option would always precede and overwrite the ordinary user_agent option (regardless of whether it was explicitly set) which leads to a leak of the user_agent option (which has a default value, so the leak happens always). Fix this by setting the same destination for both options; the last option applied wins then. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* lavf/http: treat 308 as 301Robin Cooksey2021-01-251-1/+1
| | | | | | | FFmpeg does not support POST, so there is no difference between a 308 and 301 request (see [RFC7538] section 3). Signed-off-by: Josh Dekker <josh@itanimul.li>
* avformat/http: support retry on connection errorerankor2021-01-031-2/+58
| | | | | | | | | | | | | | | | | | Add 2 new options: - reconnect_on_http_error - a list of http status codes that should be retried. the list can contain explicit status codes / the strings 4xx/5xx. - reconnect_on_network_error - reconnects on arbitrary errors during connect, e.g. ECONNRESET/ETIMEDOUT the retry employs the same exponential backoff logic as the existing reconnect/reconnect_at_eof flags. related tickets: https://trac.ffmpeg.org/ticket/6066 https://trac.ffmpeg.org/ticket/7768 Signed-off-by: Marton Balint <cus@passwd.hu>
* http: Check for AVERROR_EOF in the check for premature endMartin Storsjö2020-11-201-1/+2
| | | | | | | | | | | When the check was added (in 3668701f9600, in 2015), some IO functions returned 0 on EOF (in particular, the TCP protocol did, but the TLS protocol returned AVERROR_EOF). Since 0e1f771d2200d in 2017, the TCP protocol also returns AVERROR_EOF instead of 0, making the check for premature end never have the intended effect. Signed-off-by: Martin Storsjö <martin@martin.st>
* avformat/http: fix memleakZhao Zhili2020-09-251-1/+2
| | | | | Reviewed-by: "mypopy@gmail.com" <mypopy@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/http: increase BUFFER_SIZE to MAX_URL_SIZE + HTTP_HEADERS_SIZEJoey Smith2020-05-211-1/+1
| | | | | | | | | | | | | Some real-world sites use an authorization header with a bearer token; when combined with lengthy request parameters to identify the video segment, it's rather trivial these days to have a request body of more than 4k bytes. MAX_URL_SIZE is hard-coded to 4k bytes in libavformat/internal.h, and HTTP_HEADERS_SIZE is 4k as well in libavformat/http.h, so this patch increases the buffer size to 8k, as that is the default request body limit in Apache, and most other httpds seem to support at least as much, if not more. Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/http: Fix for invalid use of av_strtokLimin Wang2020-05-101-2/+6
| | | | Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
* avformat/http: escape unsafe URL path in HTTP requestMarton Balint2020-02-151-1/+35
| | | | | | | This avoids generating invalid HTTP requests if the path contains space or other special characters. Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/http: use AVBPrint to construct HTTP requestMarton Balint2020-02-151-55/+32
| | | | | | | v2: Use s->buffer for creating request (as the old code did) instead of the AVBPrint internal buffer. Some minor cosmetics. Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/http: make sure URL path contains a slashMarton Balint2020-02-151-3/+7
| | | | | | | | | It is explicitly required by the HTTP RFC. Without this patch URLs like http://example.com?query will not work. Fixes ticket #8466. Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/http: split the fragment part from the HTTP URL before the requestMarton Balint2020-02-151-0/+5
| | | | | | | | RFC 3986 states that the fragment identifier is separated from the rest of the URI prior to a dereference, and thus the identifying information within the fragment itself is dereferenced solely by the user agent. Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/hls: support data protocol in uri for EXT-X-MAPSteven Liu2020-01-181-1/+1
| | | | Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/http: add ff_http_do_new_request2 for optionsvectronic2019-10-081-1/+7
| | | | | | | | add ff_http_do_new_request2() which supports options to be applied to HTTPContext after initialisation with the new uri Signed-off-by: Steven Liu <lq@onvideo.cn> Signed-off-by: vectronic <hello.vectronic@gmail.com>
* avformat/http: add ff_http_get_shutdown_status api for check the status of ↵Steven Liu2019-09-061-0/+16
| | | | | | | | | shutdown this function is used to get the previous shutdown status when reusing the old connection in block mode. Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/http: change error message from numeric code to stringSteven Liu2019-07-111-1/+1
| | | | Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/doc, http, icecast, rtsp: Add option to disable send-expect-100Jun Li2019-03-311-11/+17
| | | | | | | | | | Fix ticket #7297 The current setting for send-expect-100 option is either enabled if applicable or forced enabled, no option to force disable the header. This change is to expand the option setting to provide more flexibility, which is useful for rstp case. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* lavf/http: Print metadata updates with -loglevel verbose.Carl Eugen Hoyos2019-03-201-2/+4
| | | | Simplifies metadata debugging.
* http: Do not try to make a new request when seeking past the end of the fileJustin Ruggles2019-02-261-0/+7
| | | | | | | | | | This avoids making invalid HTTP Range requests for a byte range past the known end of the file during a seek. Those requests generally return a HTTP response of 416 Range Not Satisfiable, which causes an error response. Reference: https://tools.ietf.org/html/rfc7233 Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* avformat/http: Fix Out-of-Bounds access in process_line()Wenxiang Qian2019-02-171-1/+1
| | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/http: clarify that ffmpeg will attempt to add missing CRLFGyan Doshi2019-01-291-1/+1
|
* avformat/http : Added check for valid URL context before calling shutdownkjeyapal@akamai.com2018-11-221-1/+1
|
* lavf/http: use AV_OPT_FLAG_DEPRECATED for user-agent optionClément Bœsch2018-04-261-2/+1
|
* avformat/http: flushing tcp receive buffer when it is write only modeVishwanath Dixit2018-04-201-0/+12
| | | | | | | | | | | In write only mode, the TCP receive buffer's data keeps growing with http response messages and the buffer eventually becomes full. This results in zero tcp window size, which in turn causes unwanted issues, like, terminated tcp connection. The issue is apparent when http persistent connection is enabled in hls/dash live streaming use cases. To overcome this issue, the logic here reads the buffer data when a file transfer is completed, so that any accumulated data in the recieve buffer gets flushed out.
* lavf/http.c: Free allocated client URLContext in case of error.Stephan Holljes2018-04-201-0/+4
| | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* libavformat/http: Refactor and fix additional leaks in get_cookies.Richard Shaffer2018-04-191-37/+28
| | | | | | | | | | This refactors get_cookies to simplify some code paths, specifically for skipping logic in the while loop or exiting it. It also simplifies the logic for appending additional values to *cookies by replacing strlen/malloc/snprintf with one call av_asnprintf. This refactor fixes a bug where the cookie_params AVDictionary would get leaked if we failed to allocate a new buffer for writing to *cookies.
* libavformat/http: Fix memory leak in get_cookies.Richard Shaffer2018-04-171-0/+1
|
* http: fix potentially dangerous whitespace skipping codewm42018-03-181-0/+2
| | | | | | | | | | | | | If the string consists entirely of whitespace, this could in theory continue to write '\0' before the start of the memory allocation. In practice, it didn't really happen: the generic HTTP header parsing code already skips leading whitespaces, so the string is either empty, or consists a non-whitespace. (The generic code and the cookie code actually have different ideas about what bytes are whitespace: the former uses av_isspace(), the latter uses WHITESPACES. Fortunately, av_isspace() is a super set of the http.c specific WHITESPACES, so there's probably no case where the above assumption could have been broken.)
* http: avoid out of bound accesses on broken Set-Cookie headerswm42018-03-181-0/+3
| | | | | | | | It's trivial to craft a HTTP response that will make the code for skipping trailing whitespace access and possibly overwrite bytes outside of the memory allocation. Why this can happen is blindingly obvious: it accesses cstr[strlen(cstr)-1] without checking whether the string is empty.
* http: do not print a warning message for expired cookieswm42018-03-181-1/+1
| | | | | | | libavformat prints a warning that the cookie couldn't be parsed (see callers of parse_cookie()). This is obviously not true - it could be parsed, but was simply ignored. Don't return an error to avoid the warning.
* avformat/http: add referer option into httpSteven Liu2018-02-011-0/+8
| | | | | add Referer message if referer have been set. Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* http: cosmetics: reformat reconnect check for better readabilitywm42018-01-151-3/+9
| | | | | | | The condition was a bit too long, and most editors will break the line and turn it into an unreadable mess. Move out some of the conditions. This should not change the behavior.
* avformat/http: fix memory leak in parse_cookie.Richard Shaffer2018-01-121-0/+1
| | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* http: avoid logging reconnect warning if stream was abortedwm42018-01-041-0/+3
| | | | | | If the stream was aborted using the libavformat interrupt callback, we don't want it to log the reconnect warning. (Exiting after logging this warning worked well, so this is only for avoiding the ugly warning.)