/src/ffmpeg/libavformat/protocols.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * This file is part of FFmpeg. |
3 | | * |
4 | | * FFmpeg is free software; you can redistribute it and/or |
5 | | * modify it under the terms of the GNU Lesser General Public |
6 | | * License as published by the Free Software Foundation; either |
7 | | * version 2.1 of the License, or (at your option) any later version. |
8 | | * |
9 | | * FFmpeg is distributed in the hope that it will be useful, |
10 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | | * Lesser General Public License for more details. |
13 | | * |
14 | | * You should have received a copy of the GNU Lesser General Public |
15 | | * License along with FFmpeg; if not, write to the Free Software |
16 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
17 | | */ |
18 | | |
19 | | #include <string.h> |
20 | | |
21 | | #include "libavutil/avstring.h" |
22 | | #include "libavutil/log.h" |
23 | | #include "libavutil/mem.h" |
24 | | |
25 | | #include "url.h" |
26 | | |
27 | | extern const URLProtocol ff_android_content_protocol; |
28 | | extern const URLProtocol ff_async_protocol; |
29 | | extern const URLProtocol ff_bluray_protocol; |
30 | | extern const URLProtocol ff_cache_protocol; |
31 | | extern const URLProtocol ff_concat_protocol; |
32 | | extern const URLProtocol ff_concatf_protocol; |
33 | | extern const URLProtocol ff_crypto_protocol; |
34 | | extern const URLProtocol ff_data_protocol; |
35 | | extern const URLProtocol ff_fd_protocol; |
36 | | extern const URLProtocol ff_ffrtmpcrypt_protocol; |
37 | | extern const URLProtocol ff_ffrtmphttp_protocol; |
38 | | extern const URLProtocol ff_file_protocol; |
39 | | extern const URLProtocol ff_ftp_protocol; |
40 | | extern const URLProtocol ff_gopher_protocol; |
41 | | extern const URLProtocol ff_gophers_protocol; |
42 | | extern const URLProtocol ff_hls_protocol; |
43 | | extern const URLProtocol ff_http_protocol; |
44 | | extern const URLProtocol ff_httpproxy_protocol; |
45 | | extern const URLProtocol ff_https_protocol; |
46 | | extern const URLProtocol ff_icecast_protocol; |
47 | | extern const URLProtocol ff_mmsh_protocol; |
48 | | extern const URLProtocol ff_mmst_protocol; |
49 | | extern const URLProtocol ff_md5_protocol; |
50 | | extern const URLProtocol ff_pipe_protocol; |
51 | | extern const URLProtocol ff_prompeg_protocol; |
52 | | extern const URLProtocol ff_rtmp_protocol; |
53 | | extern const URLProtocol ff_rtmpe_protocol; |
54 | | extern const URLProtocol ff_rtmps_protocol; |
55 | | extern const URLProtocol ff_rtmpt_protocol; |
56 | | extern const URLProtocol ff_rtmpte_protocol; |
57 | | extern const URLProtocol ff_rtmpts_protocol; |
58 | | extern const URLProtocol ff_rtp_protocol; |
59 | | extern const URLProtocol ff_sctp_protocol; |
60 | | extern const URLProtocol ff_srtp_protocol; |
61 | | extern const URLProtocol ff_subfile_protocol; |
62 | | extern const URLProtocol ff_tee_protocol; |
63 | | extern const URLProtocol ff_tcp_protocol; |
64 | | extern const URLProtocol ff_tls_protocol; |
65 | | extern const URLProtocol ff_udp_protocol; |
66 | | extern const URLProtocol ff_udplite_protocol; |
67 | | extern const URLProtocol ff_unix_protocol; |
68 | | extern const URLProtocol ff_libamqp_protocol; |
69 | | extern const URLProtocol ff_librist_protocol; |
70 | | extern const URLProtocol ff_librtmp_protocol; |
71 | | extern const URLProtocol ff_librtmpe_protocol; |
72 | | extern const URLProtocol ff_librtmps_protocol; |
73 | | extern const URLProtocol ff_librtmpt_protocol; |
74 | | extern const URLProtocol ff_librtmpte_protocol; |
75 | | extern const URLProtocol ff_libsrt_protocol; |
76 | | extern const URLProtocol ff_libssh_protocol; |
77 | | extern const URLProtocol ff_libsmbclient_protocol; |
78 | | extern const URLProtocol ff_libzmq_protocol; |
79 | | extern const URLProtocol ff_ipfs_gateway_protocol; |
80 | | extern const URLProtocol ff_ipns_gateway_protocol; |
81 | | |
82 | | #include "libavformat/protocol_list.c" |
83 | | |
84 | | const AVClass *ff_urlcontext_child_class_iterate(void **iter) |
85 | 0 | { |
86 | 0 | const AVClass *ret = NULL; |
87 | 0 | uintptr_t i; |
88 | |
|
89 | 0 | for (i = (uintptr_t)*iter; url_protocols[i]; i++) { |
90 | 0 | ret = url_protocols[i]->priv_data_class; |
91 | 0 | if (ret) |
92 | 0 | break; |
93 | 0 | } |
94 | |
|
95 | 0 | *iter = (void*)(uintptr_t)(url_protocols[i] ? i + 1 : i); |
96 | 0 | return ret; |
97 | 0 | } |
98 | | |
99 | | const char *avio_enum_protocols(void **opaque, int output) |
100 | 0 | { |
101 | 0 | uintptr_t i; |
102 | |
|
103 | 0 | for (i = (uintptr_t)*opaque; url_protocols[i]; i++) { |
104 | 0 | const URLProtocol *p = url_protocols[i]; |
105 | 0 | if ((output && p->url_write) || (!output && p->url_read)) { |
106 | 0 | *opaque = (void*)(uintptr_t)(i + 1); |
107 | 0 | return p->name; |
108 | 0 | } |
109 | 0 | } |
110 | 0 | *opaque = NULL; |
111 | 0 | return NULL; |
112 | 0 | } |
113 | | |
114 | | const AVClass *avio_protocol_get_class(const char *name) |
115 | 0 | { |
116 | 0 | int i = 0; |
117 | 0 | for (i = 0; url_protocols[i]; i++) { |
118 | 0 | if (!strcmp(url_protocols[i]->name, name)) |
119 | 0 | return url_protocols[i]->priv_data_class; |
120 | 0 | } |
121 | 0 | return NULL; |
122 | 0 | } |
123 | | |
124 | | const URLProtocol **ffurl_get_protocols(const char *whitelist, |
125 | | const char *blacklist) |
126 | 615k | { |
127 | 615k | const URLProtocol **ret; |
128 | 615k | int i, ret_idx = 0; |
129 | | |
130 | 615k | ret = av_calloc(FF_ARRAY_ELEMS(url_protocols), sizeof(*ret)); |
131 | 615k | if (!ret) |
132 | 0 | return NULL; |
133 | | |
134 | 615k | for (i = 0; url_protocols[i]; i++) { |
135 | 0 | const URLProtocol *up = url_protocols[i]; |
136 | |
|
137 | 0 | if (whitelist && *whitelist && !av_match_name(up->name, whitelist)) |
138 | 0 | continue; |
139 | 0 | if (blacklist && *blacklist && av_match_name(up->name, blacklist)) |
140 | 0 | continue; |
141 | | |
142 | 0 | ret[ret_idx++] = up; |
143 | 0 | } |
144 | | |
145 | 615k | return ret; |
146 | 615k | } |