FFmpeg
Loading...
Searching...
No Matches
http.h
Go to the documentation of this file.
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#define HTTP_HEADERS_SIZE 4096
33
34/**
35 * Parsed form of a response status line.
36 */
37typedef 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 */
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 */
52int 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 */
62static inline void ff_http_parse_icy_packet(void *logctx,
63 AVDictionary **metadata, char *data)
64{
65 char *next = data;
66
67 while (*next) {
68 char *key = next, *val, *end;
69
70 if (!(val = strstr(key, "='")) || !(end = strstr(val, "';")))
71 break;
72
73 *val = '\0';
74 *end = '\0';
75 val += 2;
76
78 av_log(logctx, AV_LOG_VERBOSE, "Metadata update for %s: %s\n", key, val);
79
80 next = end + 2;
81 }
82}
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 */
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 */
103int 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 */
117
119
120static inline int ff_http_averror(int status_code, int default_averror)
121{
122 switch (status_code) {
123 case 400: return AVERROR_HTTP_BAD_REQUEST;
124 case 401: return AVERROR_HTTP_UNAUTHORIZED;
125 case 403: return AVERROR_HTTP_FORBIDDEN;
126 case 404: return AVERROR_HTTP_NOT_FOUND;
127 case 429: return AVERROR_HTTP_TOO_MANY_REQUESTS;
128 default: break;
129 }
130 if (status_code >= 400 && status_code <= 499)
132 else if (status_code >= 500)
134 else
135 return default_averror;
136}
137
138#endif /* AVFORMAT_HTTP_H */
static double val(void *priv, double ch)
Definition aeval.c:77
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
Public dictionary API.
error code definitions
const char * key
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition dict.c:86
#define AVERROR_HTTP_FORBIDDEN
Definition error.h:80
#define AVERROR_HTTP_BAD_REQUEST
Definition error.h:78
#define AVERROR_HTTP_SERVER_ERROR
Definition error.h:84
#define AVERROR_HTTP_OTHER_4XX
Definition error.h:83
#define AVERROR_HTTP_TOO_MANY_REQUESTS
Definition error.h:82
#define AVERROR_HTTP_UNAUTHORIZED
Definition error.h:79
#define AVERROR_HTTP_NOT_FOUND
Definition error.h:81
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
static void ff_http_parse_icy_packet(void *logctx, AVDictionary **metadata, char *data)
Split an in-band ICY metadata packet into its "Key='Value';" pairs.
Definition http.h:62
int ff_http_do_new_request2(URLContext *h, const char *uri, AVDictionary **options)
Send a new HTTP request, reusing the old connection.
Definition http.c:555
static int ff_http_averror(int status_code, int default_averror)
Definition http.h:120
void ff_http_init_auth_state(URLContext *dest, const URLContext *src)
Initialize the authentication state based on another HTTP URLContext.
Definition http.c:240
const char * ff_http_get_new_location(URLContext *h)
Definition http.c:621
int ff_http_parse_status_line(void *logctx, const char *line, HTTPStatusLine *st)
Parse the status line of an HTTP response.
Definition http.c:900
int ff_http_do_new_request(URLContext *h, const char *uri)
Send a new HTTP request, reusing the old connection.
Definition http.c:551
const char data[16]
Definition mxf.c:149
Parsed form of a response status line.
Definition http.h:37
int code
response status code
Definition http.h:39
const char * reason
reason phrase, points into the parsed line
Definition http.h:40
int willclose
the version implies the connection will close
Definition http.h:41
char version[4]
protocol version, e.g.
Definition http.h:38
#define av_log(a,...)
#define src
Definition vp8dsp.c:248
unbuffered private I/O API