/proc/self/cwd/source/extensions/filters/network/thrift_proxy/protocol_converter.h
Line | Count | Source (jump to first uncovered line) |
1 | | #pragma once |
2 | | |
3 | | #include "envoy/buffer/buffer.h" |
4 | | |
5 | | #include "source/extensions/filters/network/thrift_proxy/decoder_events.h" |
6 | | #include "source/extensions/filters/network/thrift_proxy/protocol.h" |
7 | | |
8 | | namespace Envoy { |
9 | | namespace Extensions { |
10 | | namespace NetworkFilters { |
11 | | namespace ThriftProxy { |
12 | | |
13 | | /** |
14 | | * ProtocolConverter is an class that implements protocol-related methods on |
15 | | * DecoderEventHandler in terms of converting the decoded messages into a different protocol. |
16 | | */ |
17 | | class ProtocolConverter : public virtual DecoderEventHandler { |
18 | | public: |
19 | 0 | ProtocolConverter() = default; Unexecuted instantiation: Envoy::Extensions::NetworkFilters::ThriftProxy::ProtocolConverter::ProtocolConverter() Unexecuted instantiation: Envoy::Extensions::NetworkFilters::ThriftProxy::ProtocolConverter::ProtocolConverter() |
20 | 0 | ~ProtocolConverter() override = default; |
21 | | |
22 | 0 | void initProtocolConverter(Protocol& proto, Buffer::Instance& buffer) { |
23 | 0 | proto_ = &proto; |
24 | 0 | buffer_ = &buffer; |
25 | 0 | } |
26 | | |
27 | | // DecoderEventHandler |
28 | 0 | FilterStatus passthroughData(Buffer::Instance& data) override { |
29 | 0 | buffer_->move(data); |
30 | 0 | return FilterStatus::Continue; |
31 | 0 | } |
32 | | |
33 | 0 | FilterStatus transportBegin(MessageMetadataSharedPtr) override { return FilterStatus::Continue; } |
34 | | |
35 | 0 | FilterStatus transportEnd() override { return FilterStatus::Continue; } |
36 | | |
37 | 0 | FilterStatus messageBegin(MessageMetadataSharedPtr metadata) override { |
38 | 0 | proto_->writeMessageBegin(*buffer_, *metadata); |
39 | 0 | return FilterStatus::Continue; |
40 | 0 | } |
41 | | |
42 | 0 | FilterStatus messageEnd() override { |
43 | 0 | proto_->writeMessageEnd(*buffer_); |
44 | 0 | return FilterStatus::Continue; |
45 | 0 | } |
46 | | |
47 | 0 | FilterStatus structBegin(absl::string_view name) override { |
48 | 0 | proto_->writeStructBegin(*buffer_, std::string(name)); |
49 | 0 | return FilterStatus::Continue; |
50 | 0 | } |
51 | | |
52 | 0 | FilterStatus structEnd() override { |
53 | 0 | proto_->writeFieldBegin(*buffer_, "", FieldType::Stop, 0); |
54 | 0 | proto_->writeStructEnd(*buffer_); |
55 | 0 | return FilterStatus::Continue; |
56 | 0 | } |
57 | | |
58 | | FilterStatus fieldBegin(absl::string_view name, FieldType& field_type, |
59 | 0 | int16_t& field_id) override { |
60 | 0 | proto_->writeFieldBegin(*buffer_, std::string(name), field_type, field_id); |
61 | 0 | return FilterStatus::Continue; |
62 | 0 | } |
63 | | |
64 | 0 | FilterStatus fieldEnd() override { |
65 | 0 | proto_->writeFieldEnd(*buffer_); |
66 | 0 | return FilterStatus::Continue; |
67 | 0 | } |
68 | | |
69 | 0 | FilterStatus boolValue(bool& value) override { |
70 | 0 | proto_->writeBool(*buffer_, value); |
71 | 0 | return FilterStatus::Continue; |
72 | 0 | } |
73 | | |
74 | 0 | FilterStatus byteValue(uint8_t& value) override { |
75 | 0 | proto_->writeByte(*buffer_, value); |
76 | 0 | return FilterStatus::Continue; |
77 | 0 | } |
78 | | |
79 | 0 | FilterStatus int16Value(int16_t& value) override { |
80 | 0 | proto_->writeInt16(*buffer_, value); |
81 | 0 | return FilterStatus::Continue; |
82 | 0 | } |
83 | | |
84 | 0 | FilterStatus int32Value(int32_t& value) override { |
85 | 0 | proto_->writeInt32(*buffer_, value); |
86 | 0 | return FilterStatus::Continue; |
87 | 0 | } |
88 | | |
89 | 0 | FilterStatus int64Value(int64_t& value) override { |
90 | 0 | proto_->writeInt64(*buffer_, value); |
91 | 0 | return FilterStatus::Continue; |
92 | 0 | } |
93 | | |
94 | 0 | FilterStatus doubleValue(double& value) override { |
95 | 0 | proto_->writeDouble(*buffer_, value); |
96 | 0 | return FilterStatus::Continue; |
97 | 0 | } |
98 | | |
99 | 0 | FilterStatus stringValue(absl::string_view value) override { |
100 | 0 | proto_->writeString(*buffer_, std::string(value)); |
101 | 0 | return FilterStatus::Continue; |
102 | 0 | } |
103 | | |
104 | 0 | FilterStatus mapBegin(FieldType& key_type, FieldType& value_type, uint32_t& size) override { |
105 | 0 | proto_->writeMapBegin(*buffer_, key_type, value_type, size); |
106 | 0 | return FilterStatus::Continue; |
107 | 0 | } |
108 | | |
109 | 0 | FilterStatus mapEnd() override { |
110 | 0 | proto_->writeMapEnd(*buffer_); |
111 | 0 | return FilterStatus::Continue; |
112 | 0 | } |
113 | | |
114 | 0 | FilterStatus listBegin(FieldType& elem_type, uint32_t& size) override { |
115 | 0 | proto_->writeListBegin(*buffer_, elem_type, size); |
116 | 0 | return FilterStatus::Continue; |
117 | 0 | } |
118 | | |
119 | 0 | FilterStatus listEnd() override { |
120 | 0 | proto_->writeListEnd(*buffer_); |
121 | 0 | return FilterStatus::Continue; |
122 | 0 | } |
123 | | |
124 | 0 | FilterStatus setBegin(FieldType& elem_type, uint32_t& size) override { |
125 | 0 | proto_->writeSetBegin(*buffer_, elem_type, size); |
126 | 0 | return FilterStatus::Continue; |
127 | 0 | } |
128 | | |
129 | 0 | FilterStatus setEnd() override { |
130 | 0 | proto_->writeSetEnd(*buffer_); |
131 | 0 | return FilterStatus::Continue; |
132 | 0 | } |
133 | | |
134 | | private: |
135 | | Protocol* proto_; |
136 | | Buffer::Instance* buffer_{}; |
137 | | }; |
138 | | |
139 | | using ProtocolConverterSharedPtr = std::shared_ptr<ProtocolConverter>; |
140 | | } // namespace ThriftProxy |
141 | | } // namespace NetworkFilters |
142 | | } // namespace Extensions |
143 | | } // namespace Envoy |