Skip to content

Commit 1d0d95d

Browse files
committed
Peerd: Put Tor proxy in place in Runtime
1 parent 9fe6f0e commit 1d0d95d

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

src/bin/peerd.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,14 @@ fn main() {
211211
PeerSocket::Connect(remote_node) => {
212212
debug!("Peerd running in CONNECT mode");
213213
debug!("Connecting to {}", &remote_node.addr());
214-
peerd::run_from_connect(service_config, remote_node, local_socket, local_node)
215-
.expect("Error running peerd runtime");
214+
peerd::run_from_connect(
215+
service_config,
216+
remote_node,
217+
local_socket,
218+
local_node,
219+
opts.shared.tor_proxy,
220+
)
221+
.expect("Error running peerd runtime");
216222
unreachable!()
217223
}
218224
};

src/peerd/runtime.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use farcaster_core::swap::SwapId;
88
use internet2::addr::LocalNode;
99
use microservices::peer::RecvMessage;
10+
use std::net::SocketAddr;
1011
use std::sync::Arc;
1112
use std::thread::spawn;
1213
use std::time::{Duration, SystemTime};
@@ -39,7 +40,14 @@ pub fn start_connect_peer_listener_runtime(
3940
remote_node_addr: NodeAddr,
4041
local_node: LocalNode,
4142
peerd_service_id: ServiceId,
43+
tor_proxy: Option<SocketAddr>,
4244
) -> Result<(PeerSender, std::sync::mpsc::Sender<()>), Error> {
45+
if tor_proxy.is_none() && matches!(remote_node_addr.addr, InetSocketAddr::Tor(_)) {
46+
return Err(Error::Farcaster(format!(
47+
"Can only connect to remote peer on Tor address {} when Tor proxy is set too",
48+
remote_node_addr
49+
)));
50+
}
4351
let connection = PeerConnection::connect_brontozaur(local_node, remote_node_addr)?;
4452
debug!("Connected to remote peer: {}", remote_node_addr);
4553

@@ -115,6 +123,7 @@ pub fn run_from_connect(
115123
remote_node_addr: NodeAddr,
116124
local_socket: Option<InetSocketAddr>,
117125
local_node: LocalNode,
126+
tor_proxy: Option<SocketAddr>,
118127
) -> Result<(), Error> {
119128
debug!("Opening bridge between runtime and peer receiver threads");
120129
let rx = ZMQ_CONTEXT.socket(zmq::PULL)?;
@@ -132,6 +141,7 @@ pub fn run_from_connect(
132141
remote_node_addr: Some(remote_node_addr),
133142
local_socket,
134143
local_node,
144+
tor_proxy,
135145
peer_sender: None, // As connector we create the sender on is_ready
136146
forked_from_listener: false,
137147
started: SystemTime::now(),
@@ -237,6 +247,7 @@ pub fn run_from_listener(
237247
remote_node_addr,
238248
local_socket,
239249
local_node,
250+
tor_proxy: None,
240251
peer_sender: Some(peer_sender),
241252
forked_from_listener: true,
242253
started: SystemTime::now(),
@@ -372,6 +383,7 @@ pub struct Runtime {
372383
remote_node_addr: Option<NodeAddr>,
373384
local_socket: Option<InetSocketAddr>,
374385
local_node: LocalNode,
386+
tor_proxy: Option<SocketAddr>,
375387

376388
peer_sender: Option<PeerSender>,
377389
// TODO: make this an enum instead with a descriptive distinction of listening and connecting to a listener
@@ -404,6 +416,7 @@ impl esb::Handler<ServiceBus> for Runtime {
404416
self.remote_node_addr.expect("Checked for connecter"),
405417
self.local_node,
406418
self.identity(),
419+
self.tor_proxy,
407420
) {
408421
Ok(val) => {
409422
debug!(
@@ -666,6 +679,7 @@ impl Runtime {
666679
self.remote_node_addr.expect("Checked for connnecter"),
667680
self.local_node,
668681
self.identity(),
682+
self.tor_proxy,
669683
) {
670684
Err(err) => {
671685
attempt += 1;

0 commit comments

Comments
 (0)