summaryrefslogtreecommitdiffstats
path: root/src/rgw/rgw_lua_data_filter.h
blob: 75596b64e6135de69a1757d41607ca08b3de6e7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#pragma once

#include "rgw_op.h"

class DoutPrefixProvider;

namespace rgw::lua {

class RGWObjFilter {
  req_state* const s;
  const std::string script;

public:
  RGWObjFilter(req_state* s,
      const std::string& script) : 
    s(s), script(script) {}

  int execute(bufferlist& bl, off_t offset, const char* op_name) const;
};

class RGWGetObjFilter : public RGWGetObj_Filter {
  const RGWObjFilter filter;

public:
  RGWGetObjFilter(req_state* s,
      const std::string& script,
      RGWGetObj_Filter* next) : RGWGetObj_Filter(next), filter(s, script) 
  {}

  ~RGWGetObjFilter() override = default;

  int handle_data(bufferlist& bl,
                  off_t bl_ofs,
                  off_t bl_len) override;

};

class RGWPutObjFilter : public rgw::putobj::Pipe {
  const RGWObjFilter filter;

public:
  RGWPutObjFilter(req_state* s,
      const std::string& script,
      rgw::sal::DataProcessor* next) : rgw::putobj::Pipe(next), filter(s, script) 
  {}

  ~RGWPutObjFilter() override = default;

  int process(bufferlist&& data, uint64_t logical_offset) override;
};
} // namespace rgw::lua