Coverage Report

Created: 2023-11-12 09:30

/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