/proc/self/cwd/source/extensions/filters/network/thrift_proxy/framed_transport_impl.cc
Line | Count | Source (jump to first uncovered line) |
1 | | #include "source/extensions/filters/network/thrift_proxy/framed_transport_impl.h" |
2 | | |
3 | | #include "envoy/common/exception.h" |
4 | | |
5 | | #include "source/extensions/filters/network/thrift_proxy/buffer_helper.h" |
6 | | |
7 | | namespace Envoy { |
8 | | namespace Extensions { |
9 | | namespace NetworkFilters { |
10 | | namespace ThriftProxy { |
11 | | |
12 | 0 | bool FramedTransportImpl::decodeFrameStart(Buffer::Instance& buffer, MessageMetadata& metadata) { |
13 | 0 | UNREFERENCED_PARAMETER(metadata); |
14 | |
|
15 | 0 | if (buffer.length() < 4) { |
16 | 0 | return false; |
17 | 0 | } |
18 | | |
19 | 0 | int32_t thrift_size = buffer.peekBEInt<int32_t>(); |
20 | |
|
21 | 0 | if (thrift_size <= 0 || thrift_size > MaxFrameSize) { |
22 | 0 | throw EnvoyException(absl::StrCat("invalid thrift framed transport frame size ", thrift_size)); |
23 | 0 | } |
24 | | |
25 | 0 | buffer.drain(4); |
26 | |
|
27 | 0 | metadata.setFrameSize(static_cast<uint32_t>(thrift_size)); |
28 | 0 | return true; |
29 | 0 | } |
30 | | |
31 | 0 | bool FramedTransportImpl::decodeFrameEnd(Buffer::Instance&) { return true; } |
32 | | |
33 | | void FramedTransportImpl::encodeFrame(Buffer::Instance& buffer, const MessageMetadata& metadata, |
34 | 0 | Buffer::Instance& message) { |
35 | 0 | UNREFERENCED_PARAMETER(metadata); |
36 | |
|
37 | 0 | uint64_t size = message.length(); |
38 | 0 | if (size == 0 || size > MaxFrameSize) { |
39 | 0 | throw EnvoyException(absl::StrCat("invalid thrift framed transport frame size ", size)); |
40 | 0 | } |
41 | | |
42 | 0 | int32_t thrift_size = static_cast<int32_t>(size); |
43 | |
|
44 | 0 | buffer.writeBEInt<int32_t>(thrift_size); |
45 | 0 | buffer.move(message); |
46 | 0 | } |
47 | | |
48 | | class FramedTransportConfigFactory : public TransportFactoryBase<FramedTransportImpl> { |
49 | | public: |
50 | 4 | FramedTransportConfigFactory() : TransportFactoryBase(TransportNames::get().FRAMED) {} |
51 | | }; |
52 | | |
53 | | /** |
54 | | * Static registration for the framed transport. @see RegisterFactory. |
55 | | */ |
56 | | REGISTER_FACTORY(FramedTransportConfigFactory, NamedTransportConfigFactory); |
57 | | |
58 | | } // namespace ThriftProxy |
59 | | } // namespace NetworkFilters |
60 | | } // namespace Extensions |
61 | | } // namespace Envoy |