Go to the documentation of this file.
40 unsigned count,
const char *
const headers[][2]);
88 #define VLC_H2_MAX_HEADER_TABLE 4096
89 #define VLC_H2_MAX_STREAMS 0
90 #define VLC_H2_INIT_WINDOW 1048575
91 #define VLC_H2_MAX_FRAME 1048576
92 #define VLC_H2_MAX_HEADER_LIST 65536
95 #define VLC_H2_DEFAULT_MAX_HEADER_TABLE 4096
96 #define VLC_H2_DEFAULT_INIT_WINDOW 65535
97 #define VLC_H2_MIN_MAX_FRAME 16384
98 #define VLC_H2_DEFAULT_MAX_FRAME 16384
99 #define VLC_H2_MAX_MAX_FRAME 16777215
104 void (*
setting)(
void *ctx, uint_fast16_t id, uint_fast32_t value);
106 int (*
ping)(
void *ctx, uint_fast64_t opaque);
107 void (*
error)(
void *ctx, uint_fast32_t code);
108 int (*
reset)(
void *ctx, uint_fast32_t last_seq, uint_fast32_t code);
112 void *(*stream_lookup)(
void *ctx, uint_fast32_t id);
115 const char *
const headers[][2]);
127 #define VLC_H2_MAX_HEADERS 255
130 size_t *restrict
len);
131 #define vlc_h2_frame_data_get(f, l) \
133 const struct vlc_h2_frame *: (vlc_h2_frame_data_get)(f, l), \
134 struct vlc_h2_frame *: (uint8_t *)(vlc_h2_frame_data_get)(f, l))
void vlc_cond_broadcast(vlc_cond_t *cond)
Wakes up all threads waiting on a condition variable.
Definition: threads.c:280
struct hpack_decoder * hpack_decode_init(size_t header_table_size)
Definition: hpack.c:72
static struct vlc_h1_conn * vlc_h1_stream_conn(struct vlc_http_stream *stream)
Definition: h1conn.c:138
void(* window_update)(void *ctx, uint_fast32_t credit)
Definition: h2frame.h:110
void vlc_mutex_init(vlc_mutex_t *mtx)
Initializes a fast mutex.
Definition: threads.c:123
static int vlc_h2_parse_frame_settings(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 SETTINGS frame.
Definition: h2frame.c:725
@ VLC_H2_REFUSED_STREAM
Definition: h2frame.h:65
struct vlc_http_conn * vlc_h2_conn_create(void *ctx, struct vlc_tls *tls)
Definition: h2conn.c:877
size_t count
Definition: core.c:401
vlc_thread_t thread
Receive thread.
Definition: h2conn.c:65
static int vlc_h2_conn_queue(struct vlc_h2_conn *conn, struct vlc_h2_frame *f)
Definition: h2conn.c:93
@ VLC_H2_INTERNAL_ERROR
Definition: h2frame.h:60
#define GetDWBE(p)
Definition: vlc_common.h:1014
uint32_t sid
Definition: h2frame.c:458
@ VLC_H2_PROTOCOL_ERROR
Definition: h2frame.h:59
static ssize_t vlc_h1_stream_write(struct vlc_http_stream *stream, const void *base, size_t length, bool eos)
Definition: h1conn.c:231
static int vlc_h2_stream_reset(void *ctx, uint_fast32_t code)
Reports remote stream error.
Definition: h2conn.c:207
static void vlc_h2_stream_close(struct vlc_http_stream *stream, bool aborted)
Terminates a stream.
Definition: h2conn.c:452
static block_t * vlc_h2_stream_read(struct vlc_http_stream *stream)
Receives stream data.
Definition: h2conn.c:384
#define vlc_cleanup_push(routine, arg)
Registers a thread cancellation handler.
Definition: vlc_threads.h:1010
static int vlc_h2_parse_generic(struct vlc_h2_parser *, struct vlc_h2_frame *, size_t, uint_fast32_t)
Parses any HTTP/2 frame.
Definition: h2frame.c:971
size_t len
Definition: h2frame.c:460
#define VLC_H2_MAX_STREAMS
Definition: h2frame.h:89
#define VLC_H2_MAX_FRAME
Definition: h2frame.h:91
struct vlc_http_stream * vlc_h1_request(void *ctx, const char *hostname, unsigned port, bool proxy, const struct vlc_http_msg *req, bool idempotent, bool has_data, struct vlc_http_conn **restrict connp)
Sends an HTTP/1.x request through a new connection.
Definition: h1conn.c:357
struct hpack_decoder * decoder
Definition: h2frame.c:462
static int vlc_h2_parse_headers_append(struct vlc_h2_parser *p, const uint8_t *data, size_t len)
Definition: h2frame.c:503
static int vlc_h2_parse_frame_continuation(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 CONTINUATION frame.
Definition: h2frame.c:890
static void * vlc_h2_stream_lookup(struct vlc_h2_parser *p, uint_fast32_t id)
Definition: h2frame.c:486
static struct vlc_http_msg * vlc_h2_stream_wait(struct vlc_http_stream *stream)
Definition: h2conn.c:262
@ VLC_H2_FRAME_CONTINUATION
Definition: h2frame.c:102
#define unlikely(p)
Predicted false condition.
Definition: vlc_common.h:227
struct vlc_h2_frame * vlc_http_msg_h2_frame(const struct vlc_http_msg *m, uint_fast32_t stream_id, bool eos)
Formats an HTTP 2.0 HEADER frame.
Definition: message.c:425
const struct vlc_http_stream_cbs * cbs
Definition: message.h:368
@ VLC_H2_COMPRESSION_ERROR
Definition: h2frame.h:67
@ VLC_H2_CANCEL
Definition: h2frame.h:66
const char * vlc_h2_strerror(uint_fast32_t code)
Definition: h2frame.c:383
struct vlc_http_stream * vlc_chunked_open(struct vlc_http_stream *parent, struct vlc_tls *tls)
Definition: chunked.c:180
static int vlc_h2_parse_frame_unknown(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 frame of unknown type.
Definition: h2frame.c:919
struct vlc_h2_frame * recv_head
Earliest pending received buffer.
Definition: h2conn.c:85
ssize_t vlc_tls_Read(vlc_tls_t *session, void *buf, size_t len, bool waitall)
Receives data through a socket.
Definition: stream.c:53
@ VLC_H2_FRAME_PRIORITY
Definition: h2frame.c:95
int(* stream_data)(void *ctx, struct vlc_h2_frame *f)
Definition: h2frame.h:116
#define vlc_h2_frame_payload(f)
Definition: h2frame.c:64
struct vlc_h2_frame ** recv_tailp
Tail of receive queue.
Definition: h2conn.c:86
static const char * vlc_h2_type_name(uint_fast8_t type)
Definition: h2frame.c:105
static void vlc_h2_window_update(void *ctx, uint_fast32_t credit)
Definition: h2conn.c:671
uint64_t send_cwnd
Send congestion window.
Definition: h2conn.c:61
static int vlc_h2_parse_headers_block(struct vlc_h2_parser *, struct vlc_h2_frame *, size_t, uint_fast32_t)
Definition: h2frame.c:987
char * vlc_http_msg_format(const struct vlc_http_msg *m, size_t *restrict lenp, bool proxied, bool chunked)
Formats an HTTP 1.1 message header.
Definition: message.c:331
void(* window_status)(void *ctx, uint32_t *rcwd)
Definition: h2frame.h:109
static struct vlc_http_stream * vlc_h1_stream_open(struct vlc_http_conn *c, const struct vlc_http_msg *req, bool has_data)
Definition: h1conn.c:143
HTTP/2 incoming frames parser.
Definition: h2frame.c:449
void(* setting)(void *ctx, uint_fast16_t id, uint_fast32_t value)
Definition: h2frame.h:104
struct vlc_h2_frame * vlc_h2_frame_pong(uint64_t opaque)
Definition: h2frame.c:344
static void vlc_h1_stream_close(struct vlc_http_stream *stream, bool abort)
Definition: h1conn.c:287
void(* stream_end)(void *ctx)
Definition: h2frame.h:117
static int vlc_h2_stream_error(void *ctx, uint_fast32_t id, uint_fast32_t code)
Reports a local stream error.
Definition: h2conn.c:121
static void vlc_h2_parse_headers_start(struct vlc_h2_parser *p, uint_fast32_t sid, bool eos)
Definition: h2frame.c:491
size_t i_buffer
Payload length.
Definition: vlc_block.h:122
void * opaque
Definition: h2conn.c:53
@ VLC_H2_FRAME_PUSH_PROMISE
Definition: h2frame.c:98
void void vlc_http_dbg(void *, const char *msg,...) VLC_FORMAT(2
struct vlc_http_msg * vlc_http_msg_h2_headers(unsigned n, const char *const hdrs[][2])
Parses an HTTP 2.0 header table.
Definition: message.c:487
const struct vlc_http_conn_cbs * cbs
Definition: conn.h:43
int fd
Definition: vlc_fixups.h:419
static void vlc_h2_error(void *ctx, uint_fast32_t code)
Reports a local HTTP/2 connection failure.
Definition: h2conn.c:622
@ VLC_H2_NO_ERROR
Definition: h2frame.h:58
static const struct vlc_http_conn_cbs vlc_h1_conn_callbacks
Definition: h1conn.c:334
void vlc_http_msg_destroy(struct vlc_http_msg *m)
Destroys an HTTP message.
Definition: message.c:193
bool released
Definition: h1conn.c:117
#define vlc_h2_frame_data_get(f, l)
Definition: h2frame.h:131
static void * vlc_h2_recv_thread(void *data)
HTTP/2 receive thread.
Definition: h2conn.c:796
static void vlc_h2_initial_window_update(struct vlc_h2_conn *conn, uint_fast32_t value)
Definition: h2conn.c:568
uintmax_t content_length
Definition: h1conn.c:114
#define CO(conn)
Definition: h1conn.c:122
@ VLC_H2_SETTING_MAX_CONCURRENT_STREAMS
Definition: h2frame.h:79
@ VLC_H2_FRAME_WINDOW_UPDATE
Definition: h2frame.c:101
@ VLC_H2_HTTP_1_1_REQUIRED
Definition: h2frame.h:71
static int vlc_tls_GetPollFD(vlc_tls_t *tls, short *events)
Generates an event polling description.
Definition: vlc_tls.h:314
#define VLC_H2_DEFAULT_INIT_WINDOW
Definition: h2frame.h:96
Definition: vlc_fixups.h:417
@ VLC_H2_FRAME_SIZE_ERROR
Definition: h2frame.h:64
static const struct vlc_http_stream_cbs vlc_h2_stream_callbacks
Definition: h2conn.c:494
void vlc_cond_wait(vlc_cond_t *cond, vlc_mutex_t *mutex)
Waits on a condition variable.
Definition: threads.c:340
struct vlc_http_conn * vlc_h1_conn_create(void *ctx, vlc_tls_t *tls, bool proxy)
Definition: h1conn.c:340
uint32_t init_send_cwnd
Initial send congestion window.
Definition: h2conn.c:60
bool interrupted
Definition: h2conn.c:79
@ VLC_H2_HEADERS_END_STREAM
Definition: h2frame.c:131
Transport layer socket.
Definition: vlc_tls.h:65
static struct vlc_h2_frame * vlc_h2_frame_recv(struct vlc_tls *tls)
Receives an HTTP/2 frame through TLS.
Definition: h2conn.c:759
static uint_fast8_t vlc_h2_frame_type(const struct vlc_h2_frame *f)
Definition: h2frame.c:77
#define SO(s)
Definition: h2conn.c:46
static void vlc_h2_stream_window_update(void *ctx, uint_fast32_t credit)
Reports remote window size increments.
Definition: h2conn.c:221
static void cleanup_parser(void *data)
Definition: h2conn.c:790
HTTP/2 connection.
Definition: h2conn.c:49
static struct vlc_h2_frame * vlc_h2_frame_alloc(uint_fast8_t type, uint_fast8_t flags, uint_fast32_t stream_id, size_t length)
Definition: h2frame.c:39
struct vlc_h2_frame * vlc_h2_frame_settings_ack(void)
Definition: h2frame.c:313
int recv_err
Standard C error code.
Definition: h2conn.c:81
static char * vlc_https_headers_recv(struct vlc_tls *tls, size_t *restrict lenp)
Receives HTTP headers.
Definition: h1conn.c:57
int poll(struct pollfd *, unsigned, int)
void vlc_h2_frame_dump(void *opaque, const struct vlc_h2_frame *f, const char *msg)
Definition: h2frame.c:407
const struct vlc_h2_parser_cbs * cbs
Definition: h2frame.c:452
@ VLC_H2_HEADERS_PADDED
Definition: h2frame.c:133
size_t recv_cwnd
Free space in receive congestion window.
Definition: h2conn.c:84
static int vlc_h2_parse_frame_window_update(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 WINDOW_UPDATE frame.
Definition: h2frame.c:853
@ VLC_H2_FRAME_DATA
Definition: h2frame.c:93
const char * vlc_http_next_token(const char *value)
Finds next token.
Definition: message.c:642
static void vlc_h2_window_status(void *ctx, uint32_t *restrict rcwd)
Definition: h2conn.c:659
@ VLC_H2_INADEQUATE_SECURITY
Definition: h2frame.h:70
struct vlc_h2_output * vlc_h2_output_create(struct vlc_tls *tls, bool client)
Definition: h2output.c:302
static struct vlc_http_stream * vlc_http_stream_open(struct vlc_http_conn *conn, const struct vlc_http_msg *m, bool has_data)
Definition: conn.h:48
uint8_t * buf
Definition: h2frame.c:461
int vlc_interrupt_unregister(void)
Definition: interrupt.c:166
@ VLC_H2_CONNECT_ERROR
Definition: h2frame.h:68
@ VLC_H2_FRAME_RST_STREAM
Definition: h2frame.c:96
static void vlc_h2_stream_headers(void *ctx, unsigned count, const char *const hdrs[][2])
Reports received stream headers.
Definition: h2conn.c:142
bool active
Definition: h1conn.c:116
block_t * block_heap_Alloc(void *addr, size_t length)
Wraps heap in a block.
Definition: block.c:254
void vlc_cond_signal(vlc_cond_t *cond)
Wakes up one thread waiting on a condition variable.
Definition: threads.c:253
HTTP stream callbacks.
Definition: message.h:357
struct vlc_h2_stream * streams
List of open streams.
Definition: h2conn.c:55
static int vlc_h2_parse_frame_data(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 DATA frame.
Definition: h2frame.c:574
@ VLC_H2_FRAME_PING
Definition: h2frame.c:99
Mutex.
Definition: vlc_threads.h:225
#define VLC_H2_MAX_HEADERS
Definition: h2frame.h:127
static void vlc_h1_conn_destroy(struct vlc_h1_conn *conn)
Definition: h1conn.c:310
vlc_h2_error
Definition: h2frame.h:57
struct vlc_h2_frame * vlc_h2_frame_ping(uint64_t opaque)
Definition: h2frame.c:336
vlc_tls_t * vlc_tls_SocketOpenAddrInfo(const struct addrinfo *restrict info, bool defer_connect)
Definition: stream.c:408
@ VLC_H2_PING_ACK
Definition: h2frame.c:147
vlc_cond_t send_wait
Definition: h2conn.c:90
@ VLC_H2_FRAME_SETTINGS
Definition: h2frame.c:97
const uint8_t *() vlc_h2_frame_data_get(const struct vlc_h2_frame *f, size_t *restrict lenp)
Definition: h2frame.c:425
struct vlc_http_stream * payload
Definition: message.c:69
int vlc_clone(vlc_thread_t *th, void *(*entry)(void *), void *data, int priority)
Creates and starts a new thread.
Definition: thread.c:144
#define VLC_H2_MAX_HEADER_TABLE
Definition: h2frame.h:88
void vlc_tls_SessionDelete(vlc_tls_t *session)
Destroys a TLS session.
Definition: tls.c:135
struct vlc_h2_frame * next
Definition: h2frame.h:32
int vlc_savecancel(void)
Disables thread cancellation.
Definition: thread.c:183
static void SetDWBE(void *p, uint32_t dw)
Writes 32 bits in network byte order.
Definition: vlc_common.h:1064
@ VLC_H2_SETTING_INITIAL_WINDOW_SIZE
Definition: h2frame.h:80
int(* stream_reset)(void *ctx, uint_fast32_t code)
Definition: h2frame.h:118
static const struct vlc_h2_parser_cbs vlc_h2_parser_callbacks
HTTP/2 frames parser callbacks table.
Definition: h2conn.c:683
bool recv_end
End-of-stream flag.
Definition: h2conn.c:80
static uint_fast32_t vlc_h2_frame_length(const struct vlc_h2_frame *f)
Definition: h2frame.c:66
static int vlc_h2_parse_frame_rst_stream(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 RST_STREAM frame.
Definition: h2frame.c:698
void * opaque
Definition: h1conn.c:119
static void vlc_h2_stream_end(void *ctx)
Reports received end of stream.
Definition: h2conn.c:196
bool eos
Definition: h2frame.c:459
static int vlc_h2_parse_frame_priority(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 PRIORITY frame.
Definition: h2frame.c:681
bool connection_close
Definition: h1conn.c:115
block_t * block_Alloc(size_t size)
Allocates a block.
Definition: block.c:108
@ VLC_H2_FLOW_CONTROL_ERROR
Definition: h2frame.h:61
static int vlc_h2_stream_data(void *ctx, struct vlc_h2_frame *f)
Reports received stream data.
Definition: h2conn.c:169
void hpack_decode_destroy(struct hpack_decoder *dec)
Definition: hpack.c:85
vlc_h2_setting
Definition: h2frame.h:76
struct vlc_h2_frame * vlc_h2_frame_rst_stream(uint_fast32_t stream_id, uint_fast32_t error_code)
Definition: h2frame.c:241
struct vlc_h2_conn * conn
Underlying HTTP/2 connection.
Definition: h2conn.c:74
struct vlc_http_stream stream
Base class.
Definition: h2conn.c:73
const char * vlc_http_msg_get_token(const struct vlc_http_msg *msg, const char *field, const char *token)
Looks up a token in a header field.
Definition: message.c:709
const char * vlc_strerror_c(int errnum)
Definition: error.c:34
@ VLC_H2_SETTING_HEADER_TABLE_SIZE
Definition: h2frame.h:77
static int vlc_h2_parse_headers_end(struct vlc_h2_parser *p)
Definition: h2frame.c:521
void vlc_h2_parse_destroy(struct vlc_h2_parser *p)
Definition: h2frame.c:1055
static int vlc_h2_conn_queue_prio(struct vlc_h2_conn *conn, struct vlc_h2_frame *f)
Definition: h2conn.c:99
static int vlc_h2_stream_error(struct vlc_h2_parser *p, uint_fast32_t id, uint_fast32_t code)
Definition: h2frame.c:480
struct vlc_h2_stream * newer
Next open stream in connection.
Definition: h2conn.c:76
short events
Definition: vlc_fixups.h:420
#define VLC_H2_DEFAULT_MAX_FRAME
Definition: h2frame.h:98
int vlc_getaddrinfo_i11e(const char *name, unsigned port, const struct addrinfo *hints, struct addrinfo **res)
Definition: getaddrinfo.c:39
@ VLC_H2_FRAME_HEADERS
Definition: h2frame.c:94
static struct vlc_http_msg * vlc_h1_stream_wait(struct vlc_http_stream *stream)
Definition: h1conn.c:170
static unsigned vlc_http_can_read(const char *buf, size_t len)
Definition: h1conn.c:39
Thread handle.
Definition: vlc_threads.h:180
static void SetWBE(void *p, uint16_t w)
Writes 16 bits in network byte order.
Definition: vlc_common.h:1057
int vlc_h2_parse(struct vlc_h2_parser *p, struct vlc_h2_frame *f)
Definition: h2frame.c:1012
static uint_fast32_t vlc_h2_frame_id(const struct vlc_h2_frame *f)
Definition: h2frame.c:87
ssize_t vlc_tls_Write(vlc_tls_t *session, const void *buf, size_t len)
Sends data through a socket.
Definition: stream.c:94
static ssize_t vlc_h2_stream_write(struct vlc_http_stream *stream, const void *base, size_t length, bool eos)
Definition: h2conn.c:285
vlc_cond_t send_wait
Definition: h2conn.c:62
static int vlc_h2_parse_error(struct vlc_h2_parser *p, uint_fast32_t code)
Definition: h2frame.c:474
static int vlc_h2_ping(void *ctx, uint_fast64_t opaque)
Reports a ping received from HTTP/2 peer.
Definition: h2conn.c:614
bool released
Connection released by owner.
Definition: h2conn.c:57
#define vlc_cleanup_pop()
Unregisters the last cancellation handler.
Definition: vlc_threads.h:1018
static int vlc_h2_parse_frame_goaway(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 GOAWAY frame.
Definition: h2frame.c:827
#define CO(c)
Definition: h2conn.c:45
#define POLLIN
Definition: vlc_fixups.h:414
@ VLC_H2_SETTING_MAX_HEADER_LIST_SIZE
Definition: h2frame.h:82
static void vlc_tls_Close(vlc_tls_t *session)
Closes a connection and its underlying resources.
Definition: vlc_tls.h:397
static int vlc_h2_parse_frame_ping(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 PING frame.
Definition: h2frame.c:796
HTTP stream.
Definition: message.h:366
@ VLC_H2_SETTINGS_TIMEOUT
Definition: h2frame.h:62
@ VLC_H2_HEADERS_END_HEADERS
Definition: h2frame.c:132
struct vlc_h2_frame * vlc_h2_frame_settings(void)
Definition: h2frame.c:250
HTTP/2 stream.
Definition: h2conn.c:71
void *const vlc_http_error
Error pointer value.
Definition: message.c:57
static void * vlc_h1_stream_fatal(struct vlc_h1_conn *conn)
Definition: h1conn.c:126
int hpack_decode(struct hpack_decoder *dec, const uint8_t *data, size_t length, char *headers[][2], unsigned max)
Definition: hpack.c:575
static void vlc_h2_setting(void *ctx, uint_fast16_t id, uint_fast32_t value)
Reports an HTTP/2 peer connection setting.
Definition: h2conn.c:585
#define container_of(ptr, type, member)
Definition: vlc_common.h:1140
@ VLC_H2_DATA_END_STREAM
Definition: h2frame.c:126
vlc_cond_t recv_wait
Definition: h2conn.c:87
ssize_t vlc_https_chunked_write(struct vlc_tls *tls, const void *base, size_t len, bool eos)
Definition: chunked.c:39
@ VLC_H2_DATA_PADDED
Definition: h2frame.c:127
static int vlc_h2_parse_failed(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Definition: h2frame.c:1004
struct vlc_http_msg * vlc_http_msg_headers(const char *msg)
Parses an HTTP 1.1 message header.
Definition: message.c:366
void vlc_restorecancel(int state)
Restores the cancellation state.
Definition: thread.c:193
struct vlc_http_msg * recv_hdr
Latest received headers (or NULL)
Definition: h2conn.c:82
uint64_t send_cwnd
Send congestion window.
Definition: h2conn.c:89
static void vlc_h1_conn_release(struct vlc_http_conn *c)
Definition: h1conn.c:323
#define VLC_THREAD_PRIORITY_INPUT
Definition: vlc_threads.h:208
#define VLC_H2_INIT_WINDOW
Definition: h2frame.h:90
uint32_t id
Stream 31-bits identifier.
Definition: h2conn.c:77
static int vlc_h2_parse_preface(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses the HTTP/2 connection preface.
Definition: h2frame.c:950
static void vlc_h2_stream_lock(struct vlc_h2_stream *s)
Definition: h2conn.c:247
@ VLC_H2_HEADERS_PRIORITY
Definition: h2frame.c:134
static int vlc_h2_parse_frame_headers(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 HEADERS frame.
Definition: h2frame.c:628
size_t vlc_h2_frame_size(const struct vlc_h2_frame *f)
Definition: h2frame.c:72
void vlc_http_msg_attach(struct vlc_http_msg *m, struct vlc_http_stream *s)
Definition: message.c:259
static const struct vlc_http_conn_cbs vlc_h2_conn_callbacks
Definition: h2conn.c:871
vlc_h2_parser parser
Definition: h2frame.c:454
static void vlc_http_conn_release(struct vlc_http_conn *conn)
Definition: conn.h:54
void(* error)(void *ctx, uint_fast32_t code)
Definition: h2frame.h:107
#define GetWBE(p)
Definition: vlc_common.h:1013
int(* settings_done)(void *ctx)
Definition: h2frame.h:105
int(* ping)(void *ctx, uint_fast64_t opaque)
Definition: h2frame.h:106
const char * vlc_h2_setting_name(uint_fast16_t id)
Definition: h2frame.c:319
void vlc_mutex_lock(vlc_mutex_t *mtx)
Acquires a mutex.
Definition: threads.c:158
struct vlc_tls * tls
Definition: conn.h:44
static uint_fast8_t vlc_h2_frame_flags(const struct vlc_h2_frame *f)
Definition: h2frame.c:82
static int vlc_h2_stream_fatal(struct vlc_h2_stream *s, uint_fast32_t code)
Definition: h2conn.c:134
static int vlc_http_minor(const char *msg)
Gets minor HTTP version.
Definition: h1conn.c:101
struct vlc_h2_frame * vlc_h2_frame_data(uint_fast32_t stream_id, const void *buf, size_t len, bool eos)
Definition: h2frame.c:228
struct vlc_h2_frame * vlc_h2_frame_goaway(uint_fast32_t last_stream_id, uint_fast32_t error_code)
Definition: h2frame.c:354
Condition variable.
Definition: vlc_threads.h:349
uint32_t rcwd_size
Definition: h2frame.c:465
static int vlc_h2_stream_unlock(struct vlc_h2_stream *s)
Definition: h2conn.c:256
@ VLC_H2_SETTINGS_ACK
Definition: h2frame.c:138
static int vlc_h2_settings_done(void *ctx)
Reports end of HTTP/2 peer settings.
Definition: h2conn.c:606
Definition: h2frame.h:102
#define VLC_H2_MAX_HEADER_LIST
Definition: h2frame.h:92
struct vlc_http_conn conn
Definition: h1conn.c:112
@ VLC_H2_FRAME_GOAWAY
Definition: h2frame.c:100
struct vlc_h2_frame * vlc_h2_frame_headers(uint_fast32_t stream_id, uint_fast32_t mtu, bool eos, unsigned count, const char *const headers[][2])
Definition: h2frame.c:155
#define VLC_H2_MIN_MAX_FRAME
Definition: h2frame.h:97
static void * vlc_h2_stream_lookup(void *ctx, uint_fast32_t id)
Looks a stream up by ID.
Definition: h2conn.c:110
static void vlc_h2_stream_wake_up(void *data)
Definition: h2conn.c:236
void(* stream_window_update)(void *ctx, uint_fast32_t credit)
Definition: h2frame.h:119
@ VLC_H2_PUSH_PROMISE_END_HEADERS
Definition: h2frame.c:142
uint32_t next_id
Next free stream identifier.
Definition: h2conn.c:56
uint32_t max_send_frame
Maximum sent frame size.
Definition: h2conn.c:59
static int vlc_h2_parse_frame_push_promise(struct vlc_h2_parser *p, struct vlc_h2_frame *f, size_t len, uint_fast32_t id)
Parses an HTTP/2 PUSH_PROMISE frame.
Definition: h2frame.c:760
struct vlc_http_conn conn
Definition: h2conn.c:51
#define likely(p)
Predicted true condition.
Definition: vlc_common.h:218
ssize_t(* readv)(struct vlc_tls *, struct iovec *iov, unsigned len)
Callback for receiving data.
Definition: vlc_tls.h:93
void vlc_interrupt_register(void(*cb)(void *), void *opaque)
Registers a custom interrupt handler.
Definition: interrupt.c:159
#define VLC_H2_DEFAULT_MAX_HEADER_TABLE
Definition: h2frame.h:95
static void vlc_h2_conn_destroy(struct vlc_h2_conn *conn)
Definition: h2conn.c:839
uint8_t * p_buffer
Payload start.
Definition: vlc_block.h:121
Definition: h2output.c:47
void vlc_http_err(void *, const char *msg,...) VLC_FORMAT(2
static void vlc_h2_conn_release(struct vlc_http_conn *c)
Definition: h2conn.c:855
@ VLC_H2_SETTING_ENABLE_PUSH
Definition: h2frame.h:78
void(* stream_headers)(void *ctx, unsigned count, const char *const headers[][2])
Definition: h2frame.h:114
struct vlc_h2_parser * vlc_h2_parse_init(void *ctx, const struct vlc_h2_parser_cbs *cbs)
Definition: h2frame.c:1032
void vlc_cond_init(vlc_cond_t *cond)
Initializes a condition variable.
Definition: threads.c:234
@ VLC_H2_ENHANCE_YOUR_CALM
Definition: h2frame.h:69
int(* stream_error)(void *ctx, uint_fast32_t id, uint_fast32_t code)
Definition: h2frame.h:113
static ssize_t vlc_https_recv(vlc_tls_t *tls, void *buf, size_t len)
Receives TLS data.
Definition: h2conn.c:708
@ VLC_H2_CONTINUATION_END_HEADERS
Definition: h2frame.c:151
struct vlc_h2_parser::@289 headers
uintmax_t vlc_http_msg_get_size(const struct vlc_http_msg *m)
Gets HTTP payload length.
Definition: message.c:905
uint8_t data[]
Definition: h2frame.h:33
void block_Release(block_t *block)
Releases a block.
Definition: block.c:135
static block_t * vlc_h1_stream_read(struct vlc_http_stream *stream)
Definition: h1conn.c:247
int(* reset)(void *ctx, uint_fast32_t last_seq, uint_fast32_t code)
Definition: h2frame.h:108
void vlc_join(vlc_thread_t handle, void **result)
Waits for a thread to complete (if needed), then destroys it.
Definition: thread.c:151
void vlc_mutex_unlock(vlc_mutex_t *mtx)
Releases a mutex.
Definition: threads.c:209
static struct vlc_http_stream * vlc_h2_stream_open(struct vlc_http_conn *c, const struct vlc_http_msg *msg, bool has_data)
Creates a stream.
Definition: h2conn.c:514
static const vlc_h2_parser vlc_h2_parsers[]
Definition: h2frame.c:936
struct vlc_h2_frame * vlc_h2_frame_window_update(uint_fast32_t stream_id, uint_fast32_t credit)
Definition: h2frame.c:368
Definition: vlc_block.h:117
static const struct vlc_http_stream_cbs vlc_h1_stream_callbacks
Definition: h1conn.c:302
const struct vlc_tls_operations * ops
Callbacks to operate on the stream.
Definition: vlc_tls.h:68
void * opaque
Definition: h2frame.c:451
@ VLC_H2_SETTING_MAX_FRAME_SIZE
Definition: h2frame.h:81
vlc_mutex_t lock
State machine lock.
Definition: h2conn.c:64
int vlc_h2_output_send(struct vlc_h2_output *out, struct vlc_h2_frame *f)
Definition: h2output.c:120
@ VLC_H2_STREAM_CLOSED
Definition: h2frame.h:63
#define VLC_H2_MAX_MAX_FRAME
Definition: h2frame.h:99
static int vlc_h2_reset(void *ctx, uint_fast32_t last_seq, uint_fast32_t code)
Reports a remote HTTP/2 connection error.
Definition: h2conn.c:637
struct vlc_http_stream stream
Definition: h1conn.c:113
struct vlc_h2_stream * older
Previous open stream in connection.
Definition: h2conn.c:75
int vlc_h2_output_send_prio(struct vlc_h2_output *out, struct vlc_h2_frame *f)
Definition: h2output.c:115
void vlc_h2_output_destroy(struct vlc_h2_output *out)
Definition: h2output.c:331
@ VLC_H2_PUSH_PROMISE_PADDED
Definition: h2frame.c:143
static int vlc_tls_Shutdown(vlc_tls_t *tls, bool duplex)
Shuts a connection down.
Definition: vlc_tls.h:381
size_t hpack_encode(uint8_t *restrict buf, size_t size, const char *const headers[][2], unsigned count)
Definition: hpackenc.c:154
#define mutex_cleanup_push(lock)
Definition: vlc_threads.h:1053
struct vlc_h2_output * out
Send thread.
Definition: h2conn.c:52
void vlc_cancel(vlc_thread_t thread_id)
Marks a thread as cancelled.
Definition: thread.c:167
bool proxy
Definition: h1conn.c:118