54 lines
1.1 KiB
C++
54 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "async.h"
|
|
#include "common.h"
|
|
|
|
#include <cstdint>
|
|
#include <optional>
|
|
|
|
namespace saw {
|
|
/*
|
|
* Helper classes for the specific driver implementations
|
|
*/
|
|
|
|
/*
|
|
* Since I don't want to repeat these implementations for tls on unix systems
|
|
* and gnutls doesn't let me write or read into buffers I have to have this kind
|
|
* of strange abstraction. This may also be reusable for windows/macOS though.
|
|
*/
|
|
class input_stream;
|
|
|
|
class read_task_and_step_helper {
|
|
public:
|
|
struct read_io_task {
|
|
void *buffer;
|
|
size_t min_length;
|
|
size_t max_length;
|
|
size_t already_read = 0;
|
|
};
|
|
std::optional<read_io_task> read_task;
|
|
own<conveyor_feeder<size_t>> read_done = nullptr;
|
|
|
|
own<conveyor_feeder<void>> on_read_disconnect = nullptr;
|
|
|
|
public:
|
|
void read_step(input_stream &reader);
|
|
};
|
|
|
|
class output_stream;
|
|
|
|
class write_task_and_step_helper {
|
|
public:
|
|
struct write_io_task {
|
|
const void *buffer;
|
|
size_t length;
|
|
size_t already_written = 0;
|
|
};
|
|
std::optional<write_io_task> write_task;
|
|
own<conveyor_feeder<size_t>> write_done = nullptr;
|
|
|
|
public:
|
|
void writeStep(output_stream &writer);
|
|
};
|
|
} // namespace saw
|