libfilezilla
ascii_layer.hpp
Go to the documentation of this file.
1 #ifndef LIBFILEZILLA_ASCII_LAYER_HEADER
2 #define LIBFILEZILLA_ASCII_LAYER_HEADER
3 
4 #include "buffer.hpp"
5 #include "socket.hpp"
6 
7 #include <optional>
8 
13 namespace fz {
20 class FZ_PUBLIC_SYMBOL ascii_layer final : public socket_layer, protected fz::event_handler
21 {
22 public:
23  ascii_layer(event_loop& loop, event_handler* handler, socket_interface& next_layer);
24  virtual ~ascii_layer();
25 
26  virtual int read(void *buffer, unsigned int size, int& error) override;
27  virtual int write(void const* buffer, unsigned int size, int& error) override;
28 
29  virtual int shutdown() override;
30 
31  virtual void set_event_handler(event_handler* handler, fz::socket_event_flag retrigger_block = fz::socket_event_flag{}) override;
32 
33 private:
34  virtual FZ_PRIVATE_SYMBOL void operator()(fz::event_base const& ev) override;
35  void FZ_PRIVATE_SYMBOL on_socket_event(socket_event_source* s, socket_event_flag t, int error);
36 
37  std::optional<uint8_t> tmp_read_;
38  buffer buffer_;
39  bool was_cr_{};
40  bool write_blocked_by_send_buffer_{};
41  bool waiting_read_{};
42 };
43 }
44 
45 #endif
Declares fz::buffer.
Definition: ascii_layer.hpp:21
virtual int shutdown() override
Signals peers that we want to close the connections.
virtual void set_event_handler(event_handler *handler, fz::socket_event_flag retrigger_block=fz::socket_event_flag{}) override
The handler for any events generated (or forwarded) by this layer.
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition: buffer.hpp:27
Common base class for all events.
Definition: event.hpp:23
Simple handler for asynchronous event processing.
Definition: event_handler.hpp:55
A threaded event loop that supports sending events and timers.
Definition: event_loop.hpp:34
All classes sending socket events should derive from this.
Definition: socket.hpp:85
Interface for sockets.
Definition: socket.hpp:375
A base class for socket layers.
Definition: socket.hpp:654
The namespace used by libfilezilla.
Definition: apply.hpp:17
@ read
Data has become available.
@ write
data can be written.
socket_event_flag
The type of a socket event.
Definition: socket.hpp:35
Socket classes for networking.