summaryrefslogtreecommitdiff
path: root/src/mitm.hh
blob: 6d79e8f157d6c5412df32c883f40ed4237970a2a (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// -*- mode: c++; c-basic-offset: 2; -*-

#ifndef MITM_HH
#define MITM_HH

#include <cstddef>
#include <string>

class Buffer;
class Config;
class Logger;

class Mitm {
public:
  virtual ~Mitm() {}

  static Mitm* create(Logger* logger, Config* config, std::string const& cwd);

  virtual bool reload(Config* config, std::string const& cwd) = 0;

  enum DetectResult {
    SSL,
    OTHER,
    NEED_MORE,
  };
  virtual DetectResult detect(void const* data, size_t avail) = 0;

  class Monitor {
  public:
    virtual ~Monitor() {}

    virtual void local2remote(void const* data, size_t size) = 0;
    virtual void remote2local(void const* data, size_t size) = 0;

  protected:
    Monitor() {}
  };

  class Connection {
  public:
    virtual ~Connection() {}

    virtual bool transfer(
        Buffer* local_in, Buffer* local_out,
        Buffer* remote_in, Buffer* remote_out,
        Monitor* monitor) = 0;

    virtual bool local_eof() const = 0;
    virtual bool remote_eof() const = 0;

    virtual void close_local() = 0;
    virtual void close_remote() = 0;

  protected:
    Connection() {}
    Connection(Connection const&) = delete;
  };

  virtual Connection* open(std::string const& host) = 0;

protected:
  Mitm() {}
  Mitm(Mitm const&) = delete;
};

#endif  // MITM_HH