15 public std::enable_shared_from_this<ThreadedSession>
18 size_t execution_thread;
22 std::vector<uint8_t> data;
23 std::shared_ptr<ThreadedSession> self;
38 auto [_, body] = ringbuffer::read_message<::tcp::tcp_inbound>(data);
40 auto msg = std::make_unique<::threading::Tmsg<SendRecvMsg>>(
42 msg->data.self = this->shared_from_this();
43 msg->data.data.assign(body.data, body.data + body.size);
46 execution_thread, std::move(msg));
52 msg->data.self->handle_incoming_data_thread(std::move(msg->data.data));
59 void send_data(std::span<const uint8_t> data)
override
62 std::make_unique<::threading::Tmsg<SendRecvMsg>>(&
send_data_cb);
63 msg->data.self = this->shared_from_this();
64 msg->data.data.assign(data.begin(), data.end());
67 execution_thread, std::move(msg));
73 msg->data.self->send_data_thread(std::move(msg->data.data));
82 virtual bool parse(std::span<const uint8_t> data) = 0;
85 std::shared_ptr<ccf::TLSSession>
tls_io;
91 std::unique_ptr<ccf::tls::Context> ctx) :
94 session_id_, writer_factory,
std::move(ctx))),
99 void send_data(std::span<const uint8_t> data)
override
103 tls_io->send_raw(data.data(), data.size());
108 throw std::logic_error(
"Unimplemented");
118 tls_io->recv_buffered(data.data(), data.size());
126 constexpr auto min_read_block_size = 4096;
127 if (data.size() < min_read_block_size)
129 data.resize(min_read_block_size);
132 auto n_read =
tls_io->read(data.data(), data.size(),
false);
143 bool cont =
parse({data.data(), n_read});
150 n_read =
tls_io->read(data.data(), data.size(),
false);
158 virtual bool parse(std::span<const uint8_t> data) = 0;
169 to_host(writer_factory_.create_writer_to_outside())
void send_data(std::span< const uint8_t > data) override
Definition session.h:99
EncryptedSession(::tcp::ConnID session_id_, ringbuffer::AbstractWriterFactory &writer_factory, std::unique_ptr< ccf::tls::Context > ctx)
Definition session.h:88
void close_session() override
Definition session.h:111
::tcp::ConnID session_id
Definition session.h:86
void send_data_thread(std::vector< uint8_t > &&data) override
Definition session.h:106
void handle_incoming_data_thread(std::vector< uint8_t > &&data) override
Definition session.h:116
std::shared_ptr< ccf::TLSSession > tls_io
Definition session.h:85
virtual bool parse(std::span< const uint8_t > data)=0
Definition tls_session.h:28
void handle_incoming_data(std::span< const uint8_t > data) override
Definition session.h:36
virtual void handle_incoming_data_thread(std::vector< uint8_t > &&data)=0
ThreadedSession(int64_t thread_affinity)
Definition session.h:27
void send_data(std::span< const uint8_t > data) override
Definition session.h:59
static void send_data_cb(std::unique_ptr<::threading::Tmsg< SendRecvMsg > > msg)
Definition session.h:70
static void handle_incoming_data_cb(std::unique_ptr<::threading::Tmsg< SendRecvMsg > > msg)
Definition session.h:49
virtual void send_data_thread(std::vector< uint8_t > &&data)=0
UnencryptedSession(::tcp::ConnID session_id_, ringbuffer::AbstractWriterFactory &writer_factory_)
Definition session.h:164
::tcp::ConnID session_id
Definition session.h:161
void handle_incoming_data_thread(std::vector< uint8_t > &&data) override
Definition session.h:187
void send_data_thread(std::vector< uint8_t > &&data) override
Definition session.h:172
virtual bool parse(std::span< const uint8_t > data)=0
ringbuffer::WriterPtr to_host
Definition session.h:162
void close_session() override
Definition session.h:181
Definition ring_buffer_types.h:153
static ThreadMessaging & instance()
Definition thread_messaging.h:283
void add_task(uint16_t tid, std::unique_ptr< Tmsg< Payload > > msg)
Definition thread_messaging.h:318
uint16_t get_execution_thread(uint32_t i)
Definition thread_messaging.h:371
#define LOG_TRACE_FMT
Definition logger.h:356
Definition app_interface.h:14
std::shared_ptr< AbstractWriter > WriterPtr
Definition ring_buffer_types.h:150
int64_t ConnID
Definition msg_types.h:9
#define RINGBUFFER_WRITE_MESSAGE(MSG,...)
Definition ring_buffer_types.h:255
Definition serializer.h:27
const uint8_t * data
Definition serializer.h:28
Definition thread_messaging.h:27