From d97c8eb50cd8d900e4f7ee89885d75456ba6a4aa Mon Sep 17 00:00:00 2001 From: Tomasz Grabiec Date: Wed, 8 Oct 2014 18:30:19 +0200 Subject: [PATCH] net: introduce packet as data_source adapter --- net/packet-data-source.hh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 net/packet-data-source.hh diff --git a/net/packet-data-source.hh b/net/packet-data-source.hh new file mode 100644 index 0000000000..178607f989 --- /dev/null +++ b/net/packet-data-source.hh @@ -0,0 +1,35 @@ +#ifndef _PACKET_DATA_SOURCE_HH +#define _PACKET_DATA_SOURCE_HH + +#include "core/reactor.hh" +#include "net/packet.hh" + +namespace net { + +class packet_data_source final : public data_source_impl { + size_t _cur_frag = 0; + packet _p; +public: + explicit packet_data_source(net::packet&& p) + : _p(std::move(p)) + {} + + virtual future> get() override { + if (_cur_frag != _p.nr_frags()) { + auto& f = _p.fragments()[_cur_frag++]; + return make_ready_future>( + temporary_buffer(f.base, f.size, + make_deleter(deleter(), [p = _p.share()] () mutable {}))); + } + return make_ready_future>(temporary_buffer(0)); + } +}; + +static inline +input_stream as_input_stream(packet&& p) { + return input_stream(data_source(std::make_unique(std::move(p)))); +} + +} + +#endif