Coverage Report

Created: 2026-10-28 08:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 */