From: Radoslaw Zarzynski Date: Fri, 8 Mar 2019 17:57:01 +0000 (+0100) Subject: msg/async, v2: generalize Frame about number of segments. X-Git-Tag: v14.2.0~23^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2c52211add19ee613e8ed7565dd46b8d486e92f;p=ceph.git msg/async, v2: generalize Frame about number of segments. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/msg/async/frames_v2.h b/src/msg/async/frames_v2.h index c45481d7db8c..0a915338ddc4 100644 --- a/src/msg/async/frames_v2.h +++ b/src/msg/async/frames_v2.h @@ -5,6 +5,7 @@ #include "common/Clock.h" #include "crypto_onwire.h" #include +#include /** * Protocol V2 Frame Structures @@ -206,6 +207,14 @@ private: reinterpret_cast(&main_preamble)); } + template + void reset_tx_handler( + ceph::crypto::onwire::rxtx_t &session_stream_handlers, + std::index_sequence) + { + session_stream_handlers.tx->reset_tx_handler({ segments[Is].length()... }); + } + public: ceph::bufferlist get_buffer( ceph::crypto::onwire::rxtx_t &session_stream_handlers) @@ -220,20 +229,8 @@ public: } // let's cipher allocate one huge buffer for entire ciphertext. - // TODO: apply some template magic to make this general - static_assert(SegmentsNumV == 1 || SegmentsNumV == 4); - if constexpr (SegmentsNumV == 1) { - session_stream_handlers.tx->reset_tx_handler({ - segments.front().length(), - }); - } else { - session_stream_handlers.tx->reset_tx_handler({ - segments[0].length(), - segments[1].length(), - segments[2].length(), - segments[3].length(), - }); - } + reset_tx_handler( + session_stream_handlers, std::make_index_sequence()); for (auto& segment : segments) { if (segment.length()) {