Changeset View
Changeset View
Standalone View
Standalone View
src/torcontrol.cpp
Show First 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | |||||
TorControlConnection::~TorControlConnection() { | TorControlConnection::~TorControlConnection() { | ||||
if (b_conn) { | if (b_conn) { | ||||
bufferevent_free(b_conn); | bufferevent_free(b_conn); | ||||
} | } | ||||
} | } | ||||
void TorControlConnection::readcb(struct bufferevent *bev, void *ctx) { | void TorControlConnection::readcb(struct bufferevent *bev, void *ctx) { | ||||
TorControlConnection *self = (TorControlConnection *)ctx; | TorControlConnection *self = static_cast<TorControlConnection *>(ctx); | ||||
struct evbuffer *input = bufferevent_get_input(bev); | struct evbuffer *input = bufferevent_get_input(bev); | ||||
size_t n_read_out = 0; | size_t n_read_out = 0; | ||||
char *line; | char *line; | ||||
assert(input); | assert(input); | ||||
// If there is not a whole line to read, evbuffer_readln returns nullptr | // If there is not a whole line to read, evbuffer_readln returns nullptr | ||||
while ((line = evbuffer_readln(input, &n_read_out, EVBUFFER_EOL_CRLF)) != | while ((line = evbuffer_readln(input, &n_read_out, EVBUFFER_EOL_CRLF)) != | ||||
nullptr) { | nullptr) { | ||||
std::string s(line, n_read_out); | std::string s(line, n_read_out); | ||||
Show All 34 Lines | void TorControlConnection::readcb(struct bufferevent *bev, void *ctx) { | ||||
if (evbuffer_get_length(input) > MAX_LINE_LENGTH) { | if (evbuffer_get_length(input) > MAX_LINE_LENGTH) { | ||||
LogPrintf("tor: Disconnecting because MAX_LINE_LENGTH exceeded\n"); | LogPrintf("tor: Disconnecting because MAX_LINE_LENGTH exceeded\n"); | ||||
self->Disconnect(); | self->Disconnect(); | ||||
} | } | ||||
} | } | ||||
void TorControlConnection::eventcb(struct bufferevent *bev, short what, | void TorControlConnection::eventcb(struct bufferevent *bev, short what, | ||||
void *ctx) { | void *ctx) { | ||||
TorControlConnection *self = (TorControlConnection *)ctx; | TorControlConnection *self = static_cast<TorControlConnection *>(ctx); | ||||
if (what & BEV_EVENT_CONNECTED) { | if (what & BEV_EVENT_CONNECTED) { | ||||
LogPrint(BCLog::TOR, "tor: Successfully connected!\n"); | LogPrint(BCLog::TOR, "tor: Successfully connected!\n"); | ||||
self->connected(*self); | self->connected(*self); | ||||
} else if (what & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { | } else if (what & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { | ||||
if (what & BEV_EVENT_ERROR) { | if (what & BEV_EVENT_ERROR) { | ||||
LogPrint(BCLog::TOR, | LogPrint(BCLog::TOR, | ||||
"tor: Error connecting to Tor control socket\n"); | "tor: Error connecting to Tor control socket\n"); | ||||
} else { | } else { | ||||
▲ Show 20 Lines • Show All 559 Lines • ▼ Show 20 Lines | void TorController::Reconnect() { | ||||
} | } | ||||
} | } | ||||
fs::path TorController::GetPrivateKeyFile() { | fs::path TorController::GetPrivateKeyFile() { | ||||
return GetDataDir() / "onion_private_key"; | return GetDataDir() / "onion_private_key"; | ||||
} | } | ||||
void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg) { | void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg) { | ||||
TorController *self = (TorController *)arg; | TorController *self = static_cast<TorController *>(arg); | ||||
self->Reconnect(); | self->Reconnect(); | ||||
} | } | ||||
/****** Thread ********/ | /****** Thread ********/ | ||||
static struct event_base *gBase; | static struct event_base *gBase; | ||||
static std::thread torControlThread; | static std::thread torControlThread; | ||||
static void TorControlThread() { | static void TorControlThread() { | ||||
Show All 36 Lines |