4 /* output byte stream handling */
6 typedef int64_t offset_t
;
11 struct URLProtocol
*prot
;
13 int is_streamed
; /* true if streamed (no seek possible), default = false */
14 int max_packet_size
; /* if non zero, the stream is packetized with this max packet size */
16 char filename
[1]; /* specified filename */
19 typedef struct URLContext URLContext
;
21 typedef struct URLPollEntry
{
31 typedef int URLInterruptCB(void);
33 int url_open(URLContext
**h
, const char *filename
, int flags
);
34 int url_read(URLContext
*h
, unsigned char *buf
, int size
);
35 int url_write(URLContext
*h
, unsigned char *buf
, int size
);
36 offset_t
url_seek(URLContext
*h
, offset_t pos
, int whence
);
37 int url_close(URLContext
*h
);
38 int url_exist(const char *filename
);
39 offset_t
url_filesize(URLContext
*h
);
40 int url_get_max_packet_size(URLContext
*h
);
41 void url_get_filename(URLContext
*h
, char *buf
, int buf_size
);
43 /* the callback is called in blocking functions to test regulary if
44 asynchronous interruption is needed. -EINTR is returned in this
45 case by the interrupted function. 'NULL' means no interrupt
47 void url_set_interrupt_cb(URLInterruptCB
*interrupt_cb
);
50 int url_poll(URLPollEntry
*poll_table
, int n
, int timeout
);
52 typedef struct URLProtocol
{
54 int (*url_open
)(URLContext
*h
, const char *filename
, int flags
);
55 int (*url_read
)(URLContext
*h
, unsigned char *buf
, int size
);
56 int (*url_write
)(URLContext
*h
, unsigned char *buf
, int size
);
57 offset_t (*url_seek
)(URLContext
*h
, offset_t pos
, int whence
);
58 int (*url_close
)(URLContext
*h
);
59 struct URLProtocol
*next
;
62 extern URLProtocol
*first_protocol
;
63 extern URLInterruptCB
*url_interrupt_cb
;
65 int register_protocol(URLProtocol
*protocol
);
68 unsigned char *buffer
;
70 unsigned char *buf_ptr
, *buf_end
;
72 int (*read_packet
)(void *opaque
, uint8_t *buf
, int buf_size
);
73 int (*write_packet
)(void *opaque
, uint8_t *buf
, int buf_size
);
74 offset_t (*seek
)(void *opaque
, offset_t offset
, int whence
);
75 offset_t pos
; /* position in the file of the current buffer */
76 int must_flush
; /* true if the next seek should flush */
77 int eof_reached
; /* true if eof reached */
78 int write_flag
; /* true if open for writing */
81 unsigned long checksum
;
82 unsigned char *checksum_ptr
;
83 unsigned long (*update_checksum
)(unsigned long checksum
, const uint8_t *buf
, unsigned int size
);
84 int error
; ///< contains the error code or 0 if no error happened
87 int init_put_byte(ByteIOContext
*s
,
88 unsigned char *buffer
,
92 int (*read_packet
)(void *opaque
, uint8_t *buf
, int buf_size
),
93 int (*write_packet
)(void *opaque
, uint8_t *buf
, int buf_size
),
94 offset_t (*seek
)(void *opaque
, offset_t offset
, int whence
));
96 void put_byte(ByteIOContext
*s
, int b
);
97 void put_buffer(ByteIOContext
*s
, const unsigned char *buf
, int size
);
98 void put_le64(ByteIOContext
*s
, uint64_t val
);
99 void put_be64(ByteIOContext
*s
, uint64_t val
);
100 void put_le32(ByteIOContext
*s
, unsigned int val
);
101 void put_be32(ByteIOContext
*s
, unsigned int val
);
102 void put_le24(ByteIOContext
*s
, unsigned int val
);
103 void put_be24(ByteIOContext
*s
, unsigned int val
);
104 void put_le16(ByteIOContext
*s
, unsigned int val
);
105 void put_be16(ByteIOContext
*s
, unsigned int val
);
106 void put_tag(ByteIOContext
*s
, const char *tag
);
108 void put_strz(ByteIOContext
*s
, const char *buf
);
110 offset_t
url_fseek(ByteIOContext
*s
, offset_t offset
, int whence
);
111 void url_fskip(ByteIOContext
*s
, offset_t offset
);
112 offset_t
url_ftell(ByteIOContext
*s
);
113 offset_t
url_fsize(ByteIOContext
*s
);
114 int url_feof(ByteIOContext
*s
);
115 int url_ferror(ByteIOContext
*s
);
118 int url_fgetc(ByteIOContext
*s
);
120 int url_fprintf(ByteIOContext
*s
, const char *fmt
, ...) __attribute__ ((__format__ (__printf__
, 2, 3)));
122 int url_fprintf(ByteIOContext
*s
, const char *fmt
, ...);
124 char *url_fgets(ByteIOContext
*s
, char *buf
, int buf_size
);
126 void put_flush_packet(ByteIOContext
*s
);
128 int get_buffer(ByteIOContext
*s
, unsigned char *buf
, int size
);
129 int get_partial_buffer(ByteIOContext
*s
, unsigned char *buf
, int size
);
130 int get_byte(ByteIOContext
*s
);
131 unsigned int get_le24(ByteIOContext
*s
);
132 unsigned int get_le32(ByteIOContext
*s
);
133 uint64_t get_le64(ByteIOContext
*s
);
134 unsigned int get_le16(ByteIOContext
*s
);
136 char *get_strz(ByteIOContext
*s
, char *buf
, int maxlen
);
137 unsigned int get_be16(ByteIOContext
*s
);
138 unsigned int get_be24(ByteIOContext
*s
);
139 unsigned int get_be32(ByteIOContext
*s
);
140 uint64_t get_be64(ByteIOContext
*s
);
142 static inline int url_is_streamed(ByteIOContext
*s
)
144 return s
->is_streamed
;
147 int url_fdopen(ByteIOContext
*s
, URLContext
*h
);
148 int url_setbufsize(ByteIOContext
*s
, int buf_size
);
149 int url_fopen(ByteIOContext
*s
, const char *filename
, int flags
);
150 int url_fclose(ByteIOContext
*s
);
151 URLContext
*url_fileno(ByteIOContext
*s
);
152 int url_fget_max_packet_size(ByteIOContext
*s
);
154 int url_open_buf(ByteIOContext
*s
, uint8_t *buf
, int buf_size
, int flags
);
155 int url_close_buf(ByteIOContext
*s
);
157 int url_open_dyn_buf(ByteIOContext
*s
);
158 int url_open_dyn_packet_buf(ByteIOContext
*s
, int max_packet_size
);
159 int url_close_dyn_buf(ByteIOContext
*s
, uint8_t **pbuffer
);
161 unsigned long get_checksum(ByteIOContext
*s
);
162 void init_checksum(ByteIOContext
*s
, unsigned long (*update_checksum
)(unsigned long c
, const uint8_t *p
, unsigned int len
), unsigned long checksum
);
165 extern URLProtocol file_protocol
;
166 extern URLProtocol pipe_protocol
;
169 extern URLProtocol udp_protocol
;
170 int udp_set_remote_url(URLContext
*h
, const char *uri
);
171 int udp_get_local_port(URLContext
*h
);
172 int udp_get_file_handle(URLContext
*h
);
175 extern URLProtocol tcp_protocol
;
178 extern URLProtocol http_protocol
;