}
ctx->buf_pos += ret;
- queue_push(ctx->streams, stream_id);
+
+ struct http_stream stream = {
+ .id = stream_id
+ };
+ queue_push(ctx->streams, stream);
return 0;
}
struct http_ctx *ctx = (struct http_ctx *)user_data;
ssize_t remaining;
ssize_t required;
- bool is_first = queue_len(ctx->streams) == 0 || queue_tail(ctx->streams) != ctx->incomplete_stream;
+ bool is_first = queue_len(ctx->streams) == 0 || queue_tail(ctx->streams).id != ctx->incomplete_stream;
if (ctx->incomplete_stream != stream_id) {
kr_log_verbose(
if (is_first) {
ctx->buf_pos = sizeof(uint16_t); /* Reserve 2B for dnsmsg len. */
- queue_push(ctx->streams, stream_id);
+ struct http_stream stream = {
+ .id = stream_id
+ };
+ queue_push(ctx->streams, stream);
}
memmove(ctx->buf + ctx->buf_pos, data, len);
}
/*
- * Cleanup for closed steams.
+ * Cleanup for closed streams.
*
* If any stream_user_data was set, call the on_write callback to allow
* freeing of the underlying data structure.
const size_t buffer_len,
struct session *session);
-typedef queue_t(int32_t) queue_int32_t;
+struct http_stream {
+ int32_t id;
+ trie_t *headers;
+};
+
+typedef queue_t(struct http_stream) queue_http_stream;
typedef enum {
HTTP_METHOD_NONE = 0,
struct nghttp2_session *h2;
http_send_callback send_cb;
struct session *session;
- queue_int32_t streams; /* IDs of streams present in the buffer. */
+ queue_http_stream streams; /* Streams present in the wire buffer. */
int32_t incomplete_stream;
ssize_t submitted;
http_method_t current_method;
#if ENABLE_DOH2
if (req->qsource.flags.http) {
struct http_ctx *http_ctx = session_http_get_server_ctx(session);
- req->qsource.stream_id = queue_head(http_ctx->streams);
+ req->qsource.stream_id = queue_head(http_ctx->streams).id;
}
#endif
/* We need to store a copy of peer address. */