Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/libavformat.xcframework/ios-arm64/libavformat.framework/Headers/url.h
2 views
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
/**
20
* @file
21
* unbuffered private I/O API
22
*/
23
24
#ifndef AVFORMAT_URL_H
25
#define AVFORMAT_URL_H
26
27
#include "avio.h"
28
29
#include "libavutil/dict.h"
30
#include "libavutil/log.h"
31
32
#define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */
33
#define URL_PROTOCOL_FLAG_NETWORK 2 /*< The protocol uses network */
34
35
extern const AVClass ffurl_context_class;
36
37
typedef struct URLContext {
38
const AVClass *av_class; /**< information for av_log(). Set by url_open(). */
39
const struct URLProtocol *prot;
40
void *priv_data;
41
char *filename; /**< specified URL */
42
int flags;
43
int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */
44
int is_streamed; /**< true if streamed (no seek possible), default = false */
45
int is_connected;
46
AVIOInterruptCB interrupt_callback;
47
int64_t rw_timeout; /**< maximum time to wait for (network) read/write operation completion, in mcs */
48
const char *protocol_whitelist;
49
const char *protocol_blacklist;
50
int min_packet_size; /**< if non zero, the stream is packetized with this min packet size */
51
} URLContext;
52
53
typedef struct URLProtocol {
54
const char *name;
55
int (*url_open)( URLContext *h, const char *url, int flags);
56
/**
57
* This callback is to be used by protocols which open further nested
58
* protocols. options are then to be passed to ffurl_open_whitelist()
59
* or ffurl_connect() for those nested protocols.
60
*/
61
int (*url_open2)(URLContext *h, const char *url, int flags, AVDictionary **options);
62
int (*url_accept)(URLContext *s, URLContext **c);
63
int (*url_handshake)(URLContext *c);
64
65
/**
66
* Read data from the protocol.
67
* If data is immediately available (even less than size), EOF is
68
* reached or an error occurs (including EINTR), return immediately.
69
* Otherwise:
70
* In non-blocking mode, return AVERROR(EAGAIN) immediately.
71
* In blocking mode, wait for data/EOF/error with a short timeout (0.1s),
72
* and return AVERROR(EAGAIN) on timeout.
73
* Checking interrupt_callback, looping on EINTR and EAGAIN and until
74
* enough data has been read is left to the calling function; see
75
* retry_transfer_wrapper in avio.c.
76
*/
77
int (*url_read)( URLContext *h, unsigned char *buf, int size);
78
int (*url_write)(URLContext *h, const unsigned char *buf, int size);
79
int64_t (*url_seek)( URLContext *h, int64_t pos, int whence);
80
int (*url_close)(URLContext *h);
81
int (*url_read_pause)(URLContext *h, int pause);
82
int64_t (*url_read_seek)(URLContext *h, int stream_index,
83
int64_t timestamp, int flags);
84
int (*url_get_file_handle)(URLContext *h);
85
int (*url_get_multi_file_handle)(URLContext *h, int **handles,
86
int *numhandles);
87
int (*url_get_short_seek)(URLContext *h);
88
int (*url_shutdown)(URLContext *h, int flags);
89
const AVClass *priv_data_class;
90
int priv_data_size;
91
int flags;
92
int (*url_check)(URLContext *h, int mask);
93
int (*url_open_dir)(URLContext *h);
94
int (*url_read_dir)(URLContext *h, AVIODirEntry **next);
95
int (*url_close_dir)(URLContext *h);
96
int (*url_delete)(URLContext *h);
97
int (*url_move)(URLContext *h_src, URLContext *h_dst);
98
const char *default_whitelist;
99
} URLProtocol;
100
101
/**
102
* Create a URLContext for accessing to the resource indicated by
103
* url, but do not initiate the connection yet.
104
*
105
* @param puc pointer to the location where, in case of success, the
106
* function puts the pointer to the created URLContext
107
* @param flags flags which control how the resource indicated by url
108
* is to be opened
109
* @param int_cb interrupt callback to use for the URLContext, may be
110
* NULL
111
* @return >= 0 in case of success, a negative value corresponding to an
112
* AVERROR code in case of failure
113
*/
114
int ffurl_alloc(URLContext **puc, const char *filename, int flags,
115
const AVIOInterruptCB *int_cb);
116
117
/**
118
* Connect an URLContext that has been allocated by ffurl_alloc
119
*
120
* @param options A dictionary filled with options for nested protocols,
121
* i.e. it will be passed to url_open2() for protocols implementing it.
122
* This parameter will be destroyed and replaced with a dict containing options
123
* that were not found. May be NULL.
124
*/
125
int ffurl_connect(URLContext *uc, AVDictionary **options);
126
127
/**
128
* Create an URLContext for accessing to the resource indicated by
129
* url, and open it.
130
*
131
* @param puc pointer to the location where, in case of success, the
132
* function puts the pointer to the created URLContext
133
* @param flags flags which control how the resource indicated by url
134
* is to be opened
135
* @param int_cb interrupt callback to use for the URLContext, may be
136
* NULL
137
* @param options A dictionary filled with protocol-private options. On return
138
* this parameter will be destroyed and replaced with a dict containing options
139
* that were not found. May be NULL.
140
* @param parent An enclosing URLContext, whose generic options should
141
* be applied to this URLContext as well.
142
* @return >= 0 in case of success, a negative value corresponding to an
143
* AVERROR code in case of failure
144
*/
145
int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags,
146
const AVIOInterruptCB *int_cb, AVDictionary **options,
147
const char *whitelist, const char* blacklist,
148
URLContext *parent);
149
150
/**
151
* Accept an URLContext c on an URLContext s
152
*
153
* @param s server context
154
* @param c client context, must be unallocated.
155
* @return >= 0 on success, ff_neterrno() on failure.
156
*/
157
int ffurl_accept(URLContext *s, URLContext **c);
158
159
/**
160
* Perform one step of the protocol handshake to accept a new client.
161
* See avio_handshake() for details.
162
* Implementations should try to return decreasing values.
163
* If the protocol uses an underlying protocol, the underlying handshake is
164
* usually the first step, and the return value can be:
165
* (largest value for this protocol) + (return value from other protocol)
166
*
167
* @param c the client context
168
* @return >= 0 on success or a negative value corresponding
169
* to an AVERROR code on failure
170
*/
171
int ffurl_handshake(URLContext *c);
172
173
/**
174
* Read up to size bytes from the resource accessed by h, and store
175
* the read bytes in buf.
176
*
177
* @return The number of bytes actually read, or a negative value
178
* corresponding to an AVERROR code in case of error. A value of zero
179
* indicates that it is not possible to read more from the accessed
180
* resource (except if the value of the size argument is also zero).
181
*/
182
int ffurl_read(URLContext *h, unsigned char *buf, int size);
183
184
/**
185
* Read as many bytes as possible (up to size), calling the
186
* read function multiple times if necessary.
187
* This makes special short-read handling in applications
188
* unnecessary, if the return value is < size then it is
189
* certain there was either an error or the end of file was reached.
190
*/
191
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
192
193
/**
194
* Write size bytes from buf to the resource accessed by h.
195
*
196
* @return the number of bytes actually written, or a negative value
197
* corresponding to an AVERROR code in case of failure
198
*/
199
int ffurl_write(URLContext *h, const unsigned char *buf, int size);
200
201
/**
202
* Change the position that will be used by the next read/write
203
* operation on the resource accessed by h.
204
*
205
* @param pos specifies the new position to set
206
* @param whence specifies how pos should be interpreted, it must be
207
* one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the
208
* current position), SEEK_END (seek from the end), or AVSEEK_SIZE
209
* (return the filesize of the requested resource, pos is ignored).
210
* @return a negative value corresponding to an AVERROR code in case
211
* of failure, or the resulting file position, measured in bytes from
212
* the beginning of the file. You can use this feature together with
213
* SEEK_CUR to read the current file position.
214
*/
215
int64_t ffurl_seek(URLContext *h, int64_t pos, int whence);
216
217
/**
218
* Close the resource accessed by the URLContext h, and free the
219
* memory used by it. Also set the URLContext pointer to NULL.
220
*
221
* @return a negative value if an error condition occurred, 0
222
* otherwise
223
*/
224
int ffurl_closep(URLContext **h);
225
int ffurl_close(URLContext *h);
226
227
/**
228
* Return the filesize of the resource accessed by h, AVERROR(ENOSYS)
229
* if the operation is not supported by h, or another negative value
230
* corresponding to an AVERROR error code in case of failure.
231
*/
232
int64_t ffurl_size(URLContext *h);
233
234
/**
235
* Return the file descriptor associated with this URL. For RTP, this
236
* will return only the RTP file descriptor, not the RTCP file descriptor.
237
*
238
* @return the file descriptor associated with this URL, or <0 on error.
239
*/
240
int ffurl_get_file_handle(URLContext *h);
241
242
/**
243
* Return the file descriptors associated with this URL.
244
*
245
* @return 0 on success or <0 on error.
246
*/
247
int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles);
248
249
/**
250
* Return the current short seek threshold value for this URL.
251
*
252
* @return threshold (>0) on success or <=0 on error.
253
*/
254
int ffurl_get_short_seek(URLContext *h);
255
256
/**
257
* Signal the URLContext that we are done reading or writing the stream.
258
*
259
* @param h pointer to the resource
260
* @param flags flags which control how the resource indicated by url
261
* is to be shutdown
262
*
263
* @return a negative value if an error condition occurred, 0
264
* otherwise
265
*/
266
int ffurl_shutdown(URLContext *h, int flags);
267
268
/**
269
* Check if the user has requested to interrupt a blocking function
270
* associated with cb.
271
*/
272
int ff_check_interrupt(AVIOInterruptCB *cb);
273
274
/* udp.c */
275
int ff_udp_set_remote_url(URLContext *h, const char *uri);
276
int ff_udp_get_local_port(URLContext *h);
277
278
/**
279
* Assemble a URL string from components. This is the reverse operation
280
* of av_url_split.
281
*
282
* Note, this requires networking to be initialized, so the caller must
283
* ensure ff_network_init has been called.
284
*
285
* @see av_url_split
286
*
287
* @param str the buffer to fill with the url
288
* @param size the size of the str buffer
289
* @param proto the protocol identifier, if null, the separator
290
* after the identifier is left out, too
291
* @param authorization an optional authorization string, may be null.
292
* An empty string is treated the same as a null string.
293
* @param hostname the host name string
294
* @param port the port number, left out from the string if negative
295
* @param fmt a generic format string for everything to add after the
296
* host/port, may be null
297
* @return the number of characters written to the destination buffer
298
*/
299
int ff_url_join(char *str, int size, const char *proto,
300
const char *authorization, const char *hostname,
301
int port, const char *fmt, ...) av_printf_format(7, 8);
302
303
/**
304
* Convert a relative url into an absolute url, given a base url.
305
*
306
* @param buf the buffer where output absolute url is written
307
* @param size the size of buf
308
* @param base the base url, may be equal to buf.
309
* @param rel the new url, which is interpreted relative to base
310
* @param handle_dos_paths handle DOS paths for file or unspecified protocol
311
*/
312
int ff_make_absolute_url2(char *buf, int size, const char *base,
313
const char *rel, int handle_dos_paths);
314
315
/**
316
* Convert a relative url into an absolute url, given a base url.
317
*
318
* Same as ff_make_absolute_url2 with handle_dos_paths being equal to
319
* HAVE_DOS_PATHS config variable.
320
*/
321
int ff_make_absolute_url(char *buf, int size, const char *base,
322
const char *rel);
323
324
/**
325
* Allocate directory entry with default values.
326
*
327
* @return entry or NULL on error
328
*/
329
AVIODirEntry *ff_alloc_dir_entry(void);
330
331
const AVClass *ff_urlcontext_child_class_iterate(void **iter);
332
333
/**
334
* Construct a list of protocols matching a given whitelist and/or blacklist.
335
*
336
* @param whitelist a comma-separated list of allowed protocol names or NULL. If
337
* this is a non-empty string, only protocols in this list will
338
* be included.
339
* @param blacklist a comma-separated list of forbidden protocol names or NULL.
340
* If this is a non-empty string, all protocols in this list
341
* will be excluded.
342
*
343
* @return a NULL-terminated array of matching protocols. The array must be
344
* freed by the caller.
345
*/
346
const URLProtocol **ffurl_get_protocols(const char *whitelist,
347
const char *blacklist);
348
349
typedef struct URLComponents {
350
const char *url; /**< whole URL, for reference */
351
const char *scheme; /**< possibly including lavf-specific options */
352
const char *authority; /**< "//" if it is a real URL */
353
const char *userinfo; /**< including final '@' if present */
354
const char *host;
355
const char *port; /**< including initial ':' if present */
356
const char *path;
357
const char *query; /**< including initial '?' if present */
358
const char *fragment; /**< including initial '#' if present */
359
const char *end;
360
} URLComponents;
361
362
#define url_component_end_scheme authority
363
#define url_component_end_authority userinfo
364
#define url_component_end_userinfo host
365
#define url_component_end_host port
366
#define url_component_end_port path
367
#define url_component_end_path query
368
#define url_component_end_query fragment
369
#define url_component_end_fragment end
370
#define url_component_end_authority_full path
371
372
#define URL_COMPONENT_HAVE(uc, component) \
373
((uc).url_component_end_##component > (uc).component)
374
375
/**
376
* Parse an URL to find the components.
377
*
378
* Each component runs until the start of the next component,
379
* possibly including a mandatory delimiter.
380
*
381
* @param uc structure to fill with pointers to the components.
382
* @param url URL to parse.
383
* @param end end of the URL, or NULL to parse to the end of string.
384
*
385
* @return >= 0 for success or an AVERROR code, especially if the URL is
386
* malformed.
387
*/
388
int ff_url_decompose(URLComponents *uc, const char *url, const char *end);
389
390
/**
391
* Move or rename a resource.
392
*
393
* @note url_src and url_dst should share the same protocol and authority.
394
*
395
* @param url_src url to resource to be moved
396
* @param url_dst new url to resource if the operation succeeded
397
* @return >=0 on success or negative on error.
398
*/
399
int ffurl_move(const char *url_src, const char *url_dst);
400
401
/**
402
* Delete a resource.
403
*
404
* @param url resource to be deleted.
405
* @return >=0 on success or negative on error.
406
*/
407
int ffurl_delete(const char *url);
408
409
#endif /* AVFORMAT_URL_H */
410
411