+class RGWGetObjTags : public RGWOp {
+ protected:
+ bufferlist tags_bl;
+ bool has_tags{false};
+ public:
+ int verify_permission();
+ void execute();
+ void pre_exec();
+
+ virtual void send_response_data(bufferlist& bl) = 0;
+ virtual const string name() noexcept override { return "get_obj_tags"; }
+ virtual uint32_t op_mask() { return RGW_OP_TYPE_READ; }
+ RGWOpType get_type() { return RGW_OP_GET_OBJ_TAGGING; }
+
+};
+
+class RGWPutObjTags : public RGWOp {
+ protected:
+ bufferlist tags_bl;
+ public:
+ int verify_permission();
+ void execute();
+
+ virtual void send_response() = 0;
+ virtual int get_params() = 0;
+ virtual const string name() { return "put_obj_tags"; }
+ virtual uint32_t op_mask() { return RGW_OP_TYPE_WRITE; }
+ RGWOpType get_type() { return RGW_OP_PUT_OBJ_TAGGING; }
+
+};
+
+class RGWDeleteObjTags: public RGWOp {
+ public:
+ void pre_exec();
+ int verify_permission();
+ void execute();
+
+ virtual void send_response() = 0;
+ virtual const string name() { return "delete_obj_tags"; }
+ virtual uint32_t op_mask() { return RGW_OP_TYPE_DELETE; }
+ RGWOpType get_type() { return RGW_OP_DELETE_OBJ_TAGGING;}
+};
+