Skip to content
Snippets Groups Projects
Verified Commit 2829f326 authored by Tomas Krizek's avatar Tomas Krizek
Browse files

daemon/http: use struct for http stream

parent 895cf6a9
No related branches found
No related tags found
1 merge request!1165daemon/http: expose HTTP headers to kr_request
......@@ -234,7 +234,11 @@ static int process_uri_path(struct http_ctx *ctx, const char* path, int32_t stre
}
ctx->buf_pos += ret;
queue_push(ctx->streams, stream_id);
struct http_stream stream = {
.id = stream_id
};
queue_push(ctx->streams, stream);
return 0;
}
......@@ -345,7 +349,7 @@ static int data_chunk_recv_callback(nghttp2_session *h2, uint8_t flags, int32_t
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(
......@@ -370,7 +374,10 @@ static int data_chunk_recv_callback(nghttp2_session *h2, uint8_t flags, int32_t
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);
......@@ -429,7 +436,7 @@ static void on_pkt_write(struct http_data *data, int status)
}
/*
* 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.
......
......@@ -24,7 +24,12 @@ typedef ssize_t(*http_send_callback)(const uint8_t *buffer,
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,
......@@ -36,7 +41,7 @@ struct http_ctx {
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;
......
......@@ -386,7 +386,7 @@ static struct request_ctx *request_create(struct worker_ctx *worker,
#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. */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment