Line data Source code
1 : #pragma once 2 : 3 : #include <string> 4 : 5 : #include "envoy/http/header_map.h" 6 : #include "envoy/http/message.h" 7 : 8 : #include "source/common/buffer/buffer_impl.h" 9 : #include "source/common/common/non_copyable.h" 10 : #include "source/common/http/header_map_impl.h" 11 : 12 : namespace Envoy { 13 : namespace Http { 14 : 15 : /** 16 : * Implementation of Http::Message. This implementation does not support streaming. 17 : */ 18 : template <class HeadersInterfaceType, class HeadersImplType, class TrailersInterfaceType, 19 : class TrailersImplType> 20 : class MessageImpl : public Message<HeadersInterfaceType, TrailersInterfaceType> { 21 : public: 22 107 : MessageImpl() : headers_(HeadersImplType::create()) {} 23 3 : MessageImpl(std::unique_ptr<HeadersInterfaceType>&& headers) : headers_(std::move(headers)) {} 24 : 25 : // Http::Message 26 911 : HeadersInterfaceType& headers() override { return *headers_; } 27 6 : Buffer::Instance& body() override { return body_; } 28 0 : TrailersInterfaceType* trailers() override { return trailers_.get(); } 29 0 : void trailers(std::unique_ptr<TrailersInterfaceType>&& trailers) override { 30 0 : trailers_ = std::move(trailers); 31 0 : } 32 3 : std::string bodyAsString() const override { return body_.toString(); } 33 : 34 : private: 35 : std::unique_ptr<HeadersInterfaceType> headers_; 36 : Buffer::OwnedImpl body_; 37 : std::unique_ptr<TrailersInterfaceType> trailers_; 38 : }; 39 : 40 : using RequestMessageImpl = 41 : MessageImpl<RequestHeaderMap, RequestHeaderMapImpl, RequestTrailerMap, RequestTrailerMapImpl>; 42 : using ResponseMessageImpl = MessageImpl<ResponseHeaderMap, ResponseHeaderMapImpl, 43 : ResponseTrailerMap, ResponseTrailerMapImpl>; 44 : 45 : } // namespace Http 46 : } // namespace Envoy