Coverage Report

Created: 2023-11-12 09:30

/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