77use farcaster_core:: swap:: SwapId ;
88use internet2:: addr:: LocalNode ;
99use microservices:: peer:: RecvMessage ;
10+ use std:: net:: SocketAddr ;
1011use std:: sync:: Arc ;
1112use std:: thread:: spawn;
1213use 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