Add {Stream,DataSink}::is_alive

This commit is contained in:
ochafik 2024-10-04 05:08:54 +01:00
parent 131bc6c674
commit 3907672163

View File

@ -530,6 +530,7 @@ public:
std::function<bool(const char *data, size_t data_len)> write;
std::function<bool()> is_writable;
std::function<bool()> is_alive;
std::function<void()> done;
std::function<void(const Headers &trailer)> done_with_trailer;
std::ostream os;
@ -722,6 +723,7 @@ public:
virtual bool is_readable() const = 0;
virtual bool is_writable() const = 0;
virtual bool is_alive() const = 0;
virtual ssize_t read(char *ptr, size_t size) = 0;
virtual ssize_t write(const char *ptr, size_t size) = 0;
@ -2333,6 +2335,7 @@ public:
bool is_readable() const override;
bool is_writable() const override;
bool is_alive() const override;
ssize_t read(char *ptr, size_t size) override;
ssize_t write(const char *ptr, size_t size) override;
void get_remote_ip_and_port(std::string &ip, int &port) const override;
@ -3205,6 +3208,7 @@ public:
bool is_readable() const override;
bool is_writable() const override;
bool is_alive() const override;
ssize_t read(char *ptr, size_t size) override;
ssize_t write(const char *ptr, size_t size) override;
void get_remote_ip_and_port(std::string &ip, int &port) const override;
@ -3235,6 +3239,7 @@ public:
bool is_readable() const override;
bool is_writable() const override;
bool is_alive() const override;
ssize_t read(char *ptr, size_t size) override;
ssize_t write(const char *ptr, size_t size) override;
void get_remote_ip_and_port(std::string &ip, int &port) const override;
@ -4410,6 +4415,7 @@ inline bool write_content(Stream &strm, const ContentProvider &content_provider,
};
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
while (offset < end_offset && !is_shutting_down()) {
if (!strm.is_writable()) {
@ -4456,6 +4462,7 @@ write_content_without_length(Stream &strm,
};
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
data_sink.done = [&](void) { data_available = false; };
@ -4508,6 +4515,7 @@ write_content_chunked(Stream &strm, const ContentProvider &content_provider,
};
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
auto done_with_trailer = [&](const Headers *trailer) {
if (!ok) { return; }
@ -5821,6 +5829,10 @@ inline bool SocketStream::is_writable() const {
is_socket_alive(sock_);
}
inline bool SocketStream::is_alive() const {
return is_socket_alive(sock_);
}
inline ssize_t SocketStream::read(char *ptr, size_t size) {
#ifdef _WIN32
size =
@ -5895,6 +5907,8 @@ inline bool BufferStream::is_readable() const { return true; }
inline bool BufferStream::is_writable() const { return true; }
inline bool BufferStream::is_alive() const { return true; }
inline ssize_t BufferStream::read(char *ptr, size_t size) {
#if defined(_MSC_VER) && _MSC_VER < 1910
auto len_read = buffer._Copy_s(ptr, size, size, position);
@ -8904,6 +8918,10 @@ inline bool SSLSocketStream::is_writable() const {
is_socket_alive(sock_);
}
inline bool SSLSocketStream::is_alive() const {
return is_socket_alive(sock_);
}
inline ssize_t SSLSocketStream::read(char *ptr, size_t size) {
if (SSL_pending(ssl_) > 0) {
return SSL_read(ssl_, ptr, static_cast<int>(size));