]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: simplify encryption handling in the PayloadFrame class.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 30 Jan 2019 20:07:42 +0000 (21:07 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 21 Feb 2019 20:53:28 +0000 (21:53 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/msg/async/ProtocolV2.cc

index 30e61934408a5fa4c22a924dbc9565ca327015ed..1ec6cc2c063172d4ceebe0581950ea4b8ea9899f 100644 (file)
@@ -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 <class T>
 struct Frame {
 protected:
@@ -145,11 +142,9 @@ protected:
   // this tuple is only used when decoding values from a payload buffer
   std::tuple<Args...> _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 <typename T>
   inline void _encode_payload_each(T &t) {
@@ -162,9 +157,6 @@ protected:
       }
     } else if constexpr (std::is_same<T, ceph_msg_header2 const>()) {
       this->payload.append((char *)&t, sizeof(t));
-    } else if constexpr (std::is_same<T, signature_t const>()) {
-      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<T, signature_t>()) {
-      // 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<Args...>());
   }
@@ -294,20 +276,19 @@ struct AuthDoneFrame
 };
 
 template <class T, typename... Args>
-struct SignedEncryptedFrame : public PayloadFrame<T, Args..., signature_t> {
+struct SignedEncryptedFrame : public PayloadFrame<T, Args...> {
   SignedEncryptedFrame(ProtocolV2 *protocol, const Args &... args)
-      : PayloadFrame<T, Args..., signature_t>(protocol, args...,
-                                              signature_t()) {}
+      : PayloadFrame<T, Args...>(args...) {
+    ceph_assert(protocol);
+    protocol->authencrypt_payload(this->payload);
+  }
 
   SignedEncryptedFrame(ProtocolV2 *protocol, char *payload, uint32_t length)
-      : PayloadFrame<T, Args..., signature_t>(protocol) {
+      : PayloadFrame<T, Args...>() {
     ceph_assert(protocol);
     protocol->authdecrypt_payload(payload, length);
     this->decode_frame(payload, length);
   }
-
-  template <class C, typename... A>
-  friend struct PayloadFrame;
 };
 
 struct ClientIdentFrame