CCF
Loading...
Searching...
No Matches
http2_types.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#include "ccf/ds/nonstd.h"
9#include "ccf/http_status.h"
10#include "ccf/rest_verb.h"
11#include "http_builder.h"
12
13#include <list>
14#include <memory>
15#include <optional>
16#include <string>
17#include <vector>
18
19namespace http2
20{
21 using StreamId = int32_t;
22 constexpr static StreamId DEFAULT_STREAM_ID = 0;
23
25
26 // Used to keep track of response state between nghttp2 callbacks and to
27 // differentiate unary from streaming responses
29 {
30 Uninitialised = 0, // No response to send yet
31 Closing, // Unary or last frame in stream
32 Streaming // Sending data frames to client
33 };
34
36 {
37 // Utility class to consume data from underlying data vector in chunks from
38 // nghttp2_data_source_read_callback
39 private:
40 std::vector<uint8_t> data;
41
42 std::span<const uint8_t> span;
43
44 public:
45 DataSource() = default;
46
47 DataSource(std::span<const uint8_t> s)
48 {
49 data.assign(s.begin(), s.end());
50 span = s;
51 }
52
53 DataSource(std::vector<uint8_t>&& data_) :
54 data(std::move(data_)),
55 span(data)
56 {}
57
58 std::span<const uint8_t>& ro_data()
59 {
60 return span;
61 }
62 };
63
83
85 {
86 public:
87 virtual ~AbstractParser() = default;
88 virtual void handle_completed(
89 StreamId stream_id, StreamData* stream_data) = 0;
90 virtual std::shared_ptr<StreamData> create_stream(StreamId stream_id) = 0;
91 virtual std::shared_ptr<StreamData> get_stream(StreamId stream_id) = 0;
92 virtual void destroy_stream(StreamId stream_id) = 0;
93 virtual StreamId get_last_stream_id() const = 0;
95 };
96}
Definition http2_types.h:85
virtual void handle_completed(StreamId stream_id, StreamData *stream_data)=0
virtual ~AbstractParser()=default
virtual std::shared_ptr< StreamData > create_stream(StreamId stream_id)=0
virtual ccf::http::ParserConfiguration get_configuration() const =0
virtual void destroy_stream(StreamId stream_id)=0
virtual StreamId get_last_stream_id() const =0
virtual std::shared_ptr< StreamData > get_stream(StreamId stream_id)=0
Definition http2_types.h:36
DataSource(std::vector< uint8_t > &&data_)
Definition http2_types.h:53
std::span< const uint8_t > & ro_data()
Definition http2_types.h:58
DataSource()=default
DataSource(std::span< const uint8_t > s)
Definition http2_types.h:47
std::map< std::string, std::string, std::less<> > HeaderMap
Definition http_header_map.h:10
std::function< void(void)> StreamOnCloseCallback
Definition http_responder.h:13
Definition http2_callbacks.h:12
int32_t StreamId
Definition http2_types.h:21
ccf::http::StreamOnCloseCallback StreamCloseCB
Definition http2_types.h:24
StreamResponseState
Definition http2_types.h:29
STL namespace.
Definition http_configuration.h:24
Definition http2_types.h:67
std::vector< uint8_t > body
Definition http2_types.h:69
ccf::http::HeaderMap headers
Definition http2_types.h:68
Definition http2_types.h:74
DataSource body
Definition http2_types.h:77
bool has_trailers
Definition http2_types.h:76
StreamResponseState state
Definition http2_types.h:75
Definition http2_types.h:65
StreamCloseCB close_callback
Definition http2_types.h:81
Outgoing outgoing
Definition http2_types.h:79
Incoming incoming
Definition http2_types.h:71