From: Radoslaw Zarzynski Date: Wed, 30 Jan 2019 20:07:42 +0000 (+0100) Subject: msg/async: simplify encryption handling in the PayloadFrame class. X-Git-Tag: v14.1.1~157^2~50 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a2a290c47911e1ef0a488798280979fa3f9b5b12;p=ceph.git msg/async: simplify encryption handling in the PayloadFrame class. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 30e61934408a5..1ec6cc2c06317 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -104,9 +104,6 @@ static void alloc_aligned_buffer(bufferlist &data, unsigned len, unsigned off) { * Protocol V2 Frame Structures **/ -// this type is used to specify the position of the signature within a frame -struct signature_t {}; - template struct Frame { protected: @@ -145,11 +142,9 @@ protected: // this tuple is only used when decoding values from a payload buffer std::tuple _values; - // required for using econding/decoding features or when signing and - // encryting payload, otherwise is null - ProtocolV2 *protocol; - - uint64_t features; + // FIXME: for now, we assume specific features for the purpoess of encoding + // the frames themselves (*not* messages in message frames!). + uint64_t features = msgr2_frame_assumed; template inline void _encode_payload_each(T &t) { @@ -162,9 +157,6 @@ protected: } } else if constexpr (std::is_same()) { this->payload.append((char *)&t, sizeof(t)); - } else if constexpr (std::is_same()) { - ceph_assert(protocol); - protocol->authencrypt_payload(this->payload); } else { encode(t, this->payload, features); } @@ -187,9 +179,6 @@ protected: auto ptr = ti.get_current_ptr(); ti.advance(sizeof(T)); t = *(T *)ptr.raw_c_str(); - } else if constexpr (std::is_same()) { - // ignore signature_t marker, at this point signature was already - // verified in the ctor of SignedEncryptedFrame } else { decode(t, ti); } @@ -207,22 +196,15 @@ protected: } public: - PayloadFrame(const Args &... args) : protocol(nullptr), features(0) { - (_encode_payload_each(args), ...); - } - - PayloadFrame(ProtocolV2 *protocol, const Args &... args) - : protocol(protocol), - features(protocol->connection_features | msgr2_frame_assumed) { + PayloadFrame(const Args &... args) { (_encode_payload_each(args), ...); } - PayloadFrame(char *payload, uint32_t length) : protocol(nullptr) { + PayloadFrame() = default; + PayloadFrame(char *payload, uint32_t length) { this->decode_frame(payload, length); } - PayloadFrame(ProtocolV2 *protocol) : protocol(protocol) {} - void decode_payload(bufferlist::const_iterator &ti) { _decode_payload(ti, std::index_sequence_for()); } @@ -294,20 +276,19 @@ struct AuthDoneFrame }; template -struct SignedEncryptedFrame : public PayloadFrame { +struct SignedEncryptedFrame : public PayloadFrame { SignedEncryptedFrame(ProtocolV2 *protocol, const Args &... args) - : PayloadFrame(protocol, args..., - signature_t()) {} + : PayloadFrame(args...) { + ceph_assert(protocol); + protocol->authencrypt_payload(this->payload); + } SignedEncryptedFrame(ProtocolV2 *protocol, char *payload, uint32_t length) - : PayloadFrame(protocol) { + : PayloadFrame() { ceph_assert(protocol); protocol->authdecrypt_payload(payload, length); this->decode_frame(payload, length); } - - template - friend struct PayloadFrame; }; struct ClientIdentFrame