// -*- mode: c++; c-basic-offset: 2; -*- #ifndef MITM_HH #define MITM_HH #include #include 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