| 84 | } |
| 85 | |
| 86 | bool TorControlConnection::Connect(const std::string& tor_control_center) |
| 87 | { |
| 88 | if (m_sock) { |
| 89 | Disconnect(); |
| 90 | } |
| 91 | |
| 92 | std::optional<CService> control_service = Lookup(tor_control_center, DEFAULT_TOR_CONTROL_PORT, fNameLookup); |
| 93 | if (!control_service.has_value()) { |
| 94 | LogWarning("tor: Failed to look up control center %s", tor_control_center); |
| 95 | return false; |
| 96 | } |
| 97 | |
| 98 | m_sock = ConnectDirectly(control_service.value(), /*manual_connection=*/true); |
| 99 | if (!m_sock) { |
| 100 | LogWarning("tor: Error connecting to address %s", tor_control_center); |
| 101 | return false; |
| 102 | } |
| 103 | |
| 104 | m_recv_buffer.clear(); |
| 105 | m_message.Clear(); |
| 106 | m_reply_handlers.clear(); |
| 107 | |
| 108 | LogDebug(BCLog::TOR, "Successfully connected to Tor control port"); |
| 109 | return true; |
| 110 | } |
| 111 | |
| 112 | void TorControlConnection::Disconnect() |
| 113 | { |
no test coverage detected