16#include <boost/asio/ip/tcp.hpp>
17#include <boost/asio/steady_timer.hpp>
18#include <boost/asio/streambuf.hpp>
31class RASocket :
public std::enable_shared_from_this<RASocket>
34 RASocket(std::shared_ptr<Skyfire::Asio::IoContextExecutor> executor, std::unique_ptr<RASocketHandle> socket, std::string
const& remoteAddress);
68 int check_password(
const std::string& user,
const std::string& pass);
70 static void zprint(
void* callbackArg,
const char* szText);
74 std::shared_ptr<Skyfire::Asio::IoContextExecutor>
_executor;
void handle_async_write(boost::system::error_code const &error)
bool _commandOutputDrainInProgress
std::unique_ptr< RASocketHandle > _socket
void queue_write(std::string data, WriteCallback callback=WriteCallback())
boost::asio::streambuf _lineBuffer
void send_authentication_required()
std::function< void(bool, std::string)> ReadLineCallback
void async_read_line(ReadLineCallback callback)
std::string _remoteAddress
void start_command(std::string const &command)
void finish_subnegotiation()
std::shared_ptr< Skyfire::Asio::IoContextExecutor > _executor
uint8 _minLevel
Minimum security level required to connect.
RASocket(std::shared_ptr< Skyfire::Asio::IoContextExecutor > executor, std::unique_ptr< RASocketHandle > socket, std::string const &remoteAddress)
std::function< void(bool)> WriteCallback
void handle_subnegotiation_read(boost::system::error_code const &error, size_t transferredBytes)
boost::asio::steady_timer _subnegotiationTimer
int check_password(const std::string &user, const std::string &pass)
bool _subnegotiationTimedOut
void drain_command_output()
std::shared_ptr< RASocket > _commandSelf
std::atomic< bool > _commandExecuting
static void zprint(void *callbackArg, const char *szText)
int check_access_level(const std::string &user)
void handle_command(std::string const &command)
static void commandFinished(void *callbackArg, bool success)
std::array< char, 1024 > _subnegotiationBuffer
void handle_credentials()
void start_subnegotiation()
Used by telnet protocol RFC 854 / 855.
void handle_read_line(boost::system::error_code const &error, size_t transferredBytes, ReadLineCallback callback)
std::queue< std::string > _commandOutput
std::atomic< bool > _closed
std::deque< PendingWrite > _writeQueue
boost::asio::ip::tcp::socket RASocketHandle