8#ifndef BITCOIN_TORCONTROL_H
9#define BITCOIN_TORCONTROL_H
14#include <util/threadinterrupt.h>
93 bool WaitForData(std::chrono::milliseconds timeout);
A combination of a network address (CNetAddr) and a (TCP) port.
A helper class for interruptible sleeps.
Low-level handling for Tor control connection.
TorControlReply m_message
Message being received.
std::deque< ReplyHandlerCB > m_reply_handlers
Response handlers.
bool Command(const std::string &cmd, const ReplyHandlerCB &reply_handler)
Send a command, register a handler for the reply.
CThreadInterrupt & m_interrupt
Reference to interrupt object for clean shutdown.
bool WaitForData(std::chrono::milliseconds timeout)
Wait for data to be available on the socket.
std::string m_recv_buffer
Buffer for incoming data.
std::function< void(TorControlConnection &, const TorControlReply &)> ReplyHandlerCB
bool ProcessBuffer()
Process complete lines from the receive buffer.
bool ReceiveAndProcess()
Read available data from socket and process complete replies.
void Disconnect()
Disconnect from Tor control port.
bool Connect(const std::string &tor_control_center)
Connect to a Tor control port.
std::unique_ptr< Sock > m_sock
Socket for the connection.
bool IsConnected() const
Check if the connection is established.
Reply from Tor, can be single or multi-line.
std::vector< std::string > lines
Controller that connects to Tor control socket, authenticate, then create and maintain an ephemeral o...
CThreadInterrupt m_interrupt
fs::path GetPrivateKeyFile()
Get name of file to store private key in.
void connected_cb(TorControlConnection &conn)
Callback after successful connection.
void get_socks_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for GETINFO net/listeners/socks result.
void add_onion_cb(TorControlConnection &conn, const TorControlReply &reply, bool pow_was_enabled)
Callback for ADD_ONION result.
const std::string m_tor_control_center
std::vector< uint8_t > m_client_nonce
ClientNonce for SAFECOOKIE auth.
void disconnected_cb(TorControlConnection &conn)
Callback after connection lost or failed connection attempt.
void authchallenge_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHCHALLENGE result.
TorControlConnection m_conn
std::atomic< bool > m_reconnect
void Interrupt()
Interrupt the controller thread.
std::string m_private_key
void Join()
Wait for the controller thread to exit.
void auth_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHENTICATE result.
void protocolinfo_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for PROTOCOLINFO result.
std::chrono::duration< double > m_reconnect_timeout
std::vector< uint8_t > m_cookie
Cookie for SAFECOOKIE auth.
constexpr int TOR_REPLY_SYNTAX_ERROR
Syntax error in command argument.
constexpr uint16_t DEFAULT_TOR_SOCKS_PORT
Functionality for communicating with Tor.
const std::string DEFAULT_TOR_CONTROL
Default control ip and port.
constexpr int TOR_REPLY_OK
Tor control reply code.
constexpr bool DEFAULT_LISTEN_ONION
constexpr int TOR_REPLY_UNRECOGNIZED
constexpr int DEFAULT_TOR_CONTROL_PORT
CService DefaultOnionServiceTarget(uint16_t port)
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.