FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavformat/http.h
Date: 2026-09-15 15:24:09
Exec Total Coverage
Lines: 0 13 0.0%
Functions: 0 1 0.0%
Branches: 0 12 0.0%

Line Branch Exec Source
1 /*
2 * HTTP definitions
3 * Copyright (c) 2010 Josh Allmann
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #ifndef AVFORMAT_HTTP_H
23 #define AVFORMAT_HTTP_H
24
25 #include "libavutil/error.h"
26 #include "url.h"
27
28 #define HTTP_HEADERS_SIZE 4096
29
30 /**
31 * Parsed form of a response status line.
32 */
33 typedef struct HTTPStatusLine {
34 char version[4]; /**< protocol version, e.g. "1.1" */
35 int code; /**< response status code */
36 const char *reason; /**< reason phrase, points into the parsed line */
37 int willclose; /**< the version implies the connection will close */
38 } HTTPStatusLine;
39
40 /**
41 * Parse the status line of an HTTP response.
42 *
43 * @param logctx context used for logging, may be NULL
44 * @param line NUL terminated status line, without its trailing CRLF
45 * @param st filled in with the parsed status line
46 * @return 0 on success, a negative AVERROR code on failure
47 */
48 int ff_http_parse_status_line(void *logctx, const char *line,
49 HTTPStatusLine *st);
50
51 /**
52 * Initialize the authentication state based on another HTTP URLContext.
53 * This can be used to pre-initialize the authentication parameters if
54 * they are known beforehand, to avoid having to do an initial failing
55 * request just to get the parameters.
56 *
57 * @param dest URL context whose authentication state gets updated
58 * @param src URL context whose authentication state gets copied
59 */
60 void ff_http_init_auth_state(URLContext *dest, const URLContext *src);
61
62 /**
63 * Send a new HTTP request, reusing the old connection.
64 *
65 * @param h pointer to the resource
66 * @param uri uri used to perform the request
67 * @return a negative value if an error condition occurred, 0
68 * otherwise
69 */
70 int ff_http_do_new_request(URLContext *h, const char *uri);
71
72 /**
73 * Send a new HTTP request, reusing the old connection.
74 *
75 * @param h pointer to the resource
76 * @param uri uri used to perform the request
77 * @param options A dictionary filled with HTTP options. On return
78 * this parameter will be destroyed and replaced with a dict containing options
79 * that were not found. May be NULL.
80 * @return a negative value if an error condition occurred, 0
81 * otherwise
82 */
83 int ff_http_do_new_request2(URLContext *h, const char *uri, AVDictionary **options);
84
85 const char* ff_http_get_new_location(URLContext *h);
86
87 static inline int ff_http_averror(int status_code, int default_averror)
88 {
89 switch (status_code) {
90 case 400: return AVERROR_HTTP_BAD_REQUEST;
91 case 401: return AVERROR_HTTP_UNAUTHORIZED;
92 case 403: return AVERROR_HTTP_FORBIDDEN;
93 case 404: return AVERROR_HTTP_NOT_FOUND;
94 case 429: return AVERROR_HTTP_TOO_MANY_REQUESTS;
95 default: break;
96 }
97 if (status_code >= 400 && status_code <= 499)
98 return AVERROR_HTTP_OTHER_4XX;
99 else if (status_code >= 500)
100 return AVERROR_HTTP_SERVER_ERROR;
101 else
102 return default_averror;
103 }
104
105 #endif /* AVFORMAT_HTTP_H */
106