/usr/include/measurement_kit/net/transport.hpp is in libmeasurement-kit-dev 0.7.1-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | // Part of measurement-kit <https://measurement-kit.github.io/>.
// Measurement-kit is free software. See AUTHORS and LICENSE for more
// information on the copying conditions.
#ifndef MEASUREMENT_KIT_NET_TRANSPORT_HPP
#define MEASUREMENT_KIT_NET_TRANSPORT_HPP
#include <measurement_kit/net/buffer.hpp>
#include <measurement_kit/net/utils.hpp>
namespace mk {
namespace dns {
class ResolveHostnameResult; /* Forward declaration */
} // namespace dns
namespace net {
class TransportEmitter {
public:
virtual ~TransportEmitter();
virtual void emit_connect() = 0;
virtual void emit_data(Buffer buf) = 0;
virtual void emit_flush() = 0;
virtual void emit_error(Error err) = 0;
virtual void on_connect(Callback<>) = 0;
virtual void on_data(Callback<Buffer>) = 0;
virtual void on_flush(Callback<>) = 0;
virtual void on_error(Callback<Error>) = 0;
virtual void close(Callback<>) = 0;
};
class TransportRecorder {
public:
virtual ~TransportRecorder();
virtual void record_received_data() = 0;
virtual void dont_record_received_data() = 0;
virtual Buffer &received_data() = 0;
virtual void record_sent_data() = 0;
virtual void dont_record_sent_data() = 0;
virtual Buffer &sent_data() = 0;
};
class TransportWriter {
public:
virtual ~TransportWriter();
virtual void write(const void *, size_t) = 0;
virtual void write(std::string) = 0;
virtual void write(Buffer) = 0;
};
class TransportSocks5 {
public:
virtual ~TransportSocks5();
virtual std::string socks5_address() = 0;
virtual std::string socks5_port() = 0;
};
class TransportPollable {
public:
virtual ~TransportPollable();
virtual void set_timeout(double) = 0;
virtual void clear_timeout() = 0;
/*
* This is the interface with the underlying I/O system. As such, it is
* specified here, for clarity, but is also protected.
*/
protected:
virtual void adjust_timeout(double) = 0;
virtual void shutdown() = 0;
/*
* Writing is stopped automatically when the send buffer is empty
* and, when this happens, the FLUSH event is emitted.
*/
virtual void start_reading() = 0;
virtual void stop_reading() = 0;
virtual void start_writing() = 0;
};
class TransportConnectable {
public:
virtual ~TransportConnectable();
virtual double connect_time() = 0;
virtual void set_connect_time_(double) = 0;
virtual std::vector<Error> connect_errors() = 0;
virtual void set_connect_errors_(std::vector<Error>) = 0;
virtual dns::ResolveHostnameResult dns_result() = 0;
virtual void set_dns_result_(dns::ResolveHostnameResult) = 0;
};
class TransportSockNamePeerName {
public:
virtual ~TransportSockNamePeerName();
virtual Endpoint sockname() = 0;
virtual Endpoint peername() = 0;
};
class Transport : public TransportEmitter,
public TransportRecorder,
public TransportWriter,
public TransportSocks5,
public TransportPollable,
public TransportConnectable,
public TransportSockNamePeerName {
public:
virtual ~Transport();
};
/*
* Syntactic sugar when you need only to write or read (vis a vis Transport,
* required when you need read and write at the same time).
*/
void write(Var<Transport> txp, Buffer buf, Callback<Error> cb);
void readn(Var<Transport> txp, Var<Buffer> buff, size_t n, Callback<Error> cb,
Var<Reactor> reactor = Reactor::global());
void read(Var<Transport> t, Var<Buffer> buff, Callback<Error> callback,
Var<Reactor> reactor = Reactor::global());
} // namespace net
} // namespace mk
#endif
|