/src/ffmpeg/libavformat/http.h
Line | Count | 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 <string.h> |
26 | | |
27 | | #include "libavutil/dict.h" |
28 | | #include "libavutil/error.h" |
29 | | #include "libavutil/log.h" |
30 | | #include "url.h" |
31 | | |
32 | 0 | #define HTTP_HEADERS_SIZE 4096 |
33 | | |
34 | | /** |
35 | | * Parsed form of a response status line. |
36 | | */ |
37 | | typedef struct HTTPStatusLine { |
38 | | char version[4]; /**< protocol version, e.g. "1.1" */ |
39 | | int code; /**< response status code */ |
40 | | const char *reason; /**< reason phrase, points into the parsed line */ |
41 | | int willclose; /**< the version implies the connection will close */ |
42 | | } HTTPStatusLine; |
43 | | |
44 | | /** |
45 | | * Parse the status line of an HTTP response. |
46 | | * |
47 | | * @param logctx context used for logging, may be NULL |
48 | | * @param line NUL terminated status line, without its trailing CRLF |
49 | | * @param st filled in with the parsed status line |
50 | | * @return 0 on success, a negative AVERROR code on failure |
51 | | */ |
52 | | int ff_http_parse_status_line(void *logctx, const char *line, |
53 | | HTTPStatusLine *st); |
54 | | |
55 | | /** |
56 | | * Split an in-band ICY metadata packet into its "Key='Value';" pairs. |
57 | | * |
58 | | * @param logctx context used for logging, may be NULL |
59 | | * @param metadata dictionary the pairs are stored in |
60 | | * @param data NUL terminated packet, split in place |
61 | | */ |
62 | | static inline void ff_http_parse_icy_packet(void *logctx, |
63 | | AVDictionary **metadata, char *data) |
64 | 0 | { |
65 | 0 | char *next = data; |
66 | |
|
67 | 0 | while (*next) { |
68 | 0 | char *key = next, *val, *end; |
69 | |
|
70 | 0 | if (!(val = strstr(key, "='")) || !(end = strstr(val, "';"))) |
71 | 0 | break; |
72 | | |
73 | 0 | *val = '\0'; |
74 | 0 | *end = '\0'; |
75 | 0 | val += 2; |
76 | |
|
77 | 0 | av_dict_set(metadata, key, val, 0); |
78 | 0 | av_log(logctx, AV_LOG_VERBOSE, "Metadata update for %s: %s\n", key, val); |
79 | |
|
80 | 0 | next = end + 2; |
81 | 0 | } |
82 | 0 | } Unexecuted instantiation: hls.c:ff_http_parse_icy_packet Unexecuted instantiation: http.c:ff_http_parse_icy_packet Unexecuted instantiation: rtsp.c:ff_http_parse_icy_packet Unexecuted instantiation: rtspdec.c:ff_http_parse_icy_packet Unexecuted instantiation: rtpdec_asf.c:ff_http_parse_icy_packet |
83 | | |
84 | | /** |
85 | | * Initialize the authentication state based on another HTTP URLContext. |
86 | | * This can be used to pre-initialize the authentication parameters if |
87 | | * they are known beforehand, to avoid having to do an initial failing |
88 | | * request just to get the parameters. |
89 | | * |
90 | | * @param dest URL context whose authentication state gets updated |
91 | | * @param src URL context whose authentication state gets copied |
92 | | */ |
93 | | void ff_http_init_auth_state(URLContext *dest, const URLContext *src); |
94 | | |
95 | | /** |
96 | | * Send a new HTTP request, reusing the old connection. |
97 | | * |
98 | | * @param h pointer to the resource |
99 | | * @param uri uri used to perform the request |
100 | | * @return a negative value if an error condition occurred, 0 |
101 | | * otherwise |
102 | | */ |
103 | | int ff_http_do_new_request(URLContext *h, const char *uri); |
104 | | |
105 | | /** |
106 | | * Send a new HTTP request, reusing the old connection. |
107 | | * |
108 | | * @param h pointer to the resource |
109 | | * @param uri uri used to perform the request |
110 | | * @param options A dictionary filled with HTTP options. On return |
111 | | * this parameter will be destroyed and replaced with a dict containing options |
112 | | * that were not found. May be NULL. |
113 | | * @return a negative value if an error condition occurred, 0 |
114 | | * otherwise |
115 | | */ |
116 | | int ff_http_do_new_request2(URLContext *h, const char *uri, AVDictionary **options); |
117 | | |
118 | | const char* ff_http_get_new_location(URLContext *h); |
119 | | |
120 | | static inline int ff_http_averror(int status_code, int default_averror) |
121 | 0 | { |
122 | 0 | switch (status_code) { |
123 | 0 | case 400: return AVERROR_HTTP_BAD_REQUEST; |
124 | 0 | case 401: return AVERROR_HTTP_UNAUTHORIZED; |
125 | 0 | case 403: return AVERROR_HTTP_FORBIDDEN; |
126 | 0 | case 404: return AVERROR_HTTP_NOT_FOUND; |
127 | 0 | case 429: return AVERROR_HTTP_TOO_MANY_REQUESTS; |
128 | 0 | default: break; |
129 | 0 | } |
130 | 0 | if (status_code >= 400 && status_code <= 499) |
131 | 0 | return AVERROR_HTTP_OTHER_4XX; |
132 | 0 | else if (status_code >= 500) |
133 | 0 | return AVERROR_HTTP_SERVER_ERROR; |
134 | 0 | else |
135 | 0 | return default_averror; |
136 | 0 | } Unexecuted instantiation: hls.c:ff_http_averror Unexecuted instantiation: http.c:ff_http_averror Unexecuted instantiation: rtsp.c:ff_http_averror Unexecuted instantiation: rtspdec.c:ff_http_averror Unexecuted instantiation: rtpdec_asf.c:ff_http_averror |
137 | | |
138 | | #endif /* AVFORMAT_HTTP_H */ |