♻️ refactor
							parent
							
								
									ca3145669d
								
							
						
					
					
						commit
						4ba35ee7d1
					
				| 
						 | 
					@ -37,59 +37,66 @@ async fn main () -> anyhow::Result <()> {
 | 
				
			||||||
	trace! ("Accepting bi streams from P3");
 | 
						trace! ("Accepting bi streams from P3");
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	loop {
 | 
						loop {
 | 
				
			||||||
		let (mut relay_send, mut relay_recv) = bi_streams.next ().await.ok_or_else (|| anyhow::anyhow! ("Relay server didn't open a bi stream"))??;
 | 
							let (relay_send, relay_recv) = bi_streams.next ().await.ok_or_else (|| anyhow::anyhow! ("Relay server didn't open a bi stream"))??;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		tokio::spawn (async move {
 | 
							tokio::spawn (handle_p2_connection (relay_send, relay_recv, local_tcp_port));
 | 
				
			||||||
			let mut req_buf = [0, 0, 0, 0];
 | 
					 | 
				
			||||||
			relay_recv.read_exact (&mut req_buf).await?;
 | 
					 | 
				
			||||||
			assert_eq! (req_buf [0], Command::CONNECT_P2_TO_P4_STEP_2.0);
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			// TODO: Authorize P2 to connect to us
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			let resp_buf = [
 | 
					 | 
				
			||||||
				Command::OKAY.0, 
 | 
					 | 
				
			||||||
				Command::CONNECT_P2_TO_P4_STEP_2.0,
 | 
					 | 
				
			||||||
				0, 
 | 
					 | 
				
			||||||
				0,
 | 
					 | 
				
			||||||
			];
 | 
					 | 
				
			||||||
			relay_send.write_all (&resp_buf).await?;
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			let mut req_buf = [0, 0, 0, 0];
 | 
					 | 
				
			||||||
			relay_recv.read_exact (&mut req_buf).await?;
 | 
					 | 
				
			||||||
			assert_eq! (req_buf [0], Command::CONNECT_P2_TO_P5.0);
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			// TODO: Authorize P2 to connect to P5
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			let resp_buf = [
 | 
					 | 
				
			||||||
				Command::OKAY.0, 
 | 
					 | 
				
			||||||
				Command::CONNECT_P2_TO_P5.0,
 | 
					 | 
				
			||||||
				0,
 | 
					 | 
				
			||||||
				0,
 | 
					 | 
				
			||||||
			];
 | 
					 | 
				
			||||||
			relay_send.write_all (&resp_buf).await?;
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			debug! ("Started PTTH connection");
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			let stream = TcpStream::connect (("127.0.0.1", local_tcp_port)).await?;
 | 
					 | 
				
			||||||
			let (local_recv, local_send) = stream.into_split ();
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			trace! ("Relaying bytes...");
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			let ptth_conn = PtthNewConnection {
 | 
					 | 
				
			||||||
				local_send,
 | 
					 | 
				
			||||||
				local_recv,
 | 
					 | 
				
			||||||
				relay_send,
 | 
					 | 
				
			||||||
				relay_recv,
 | 
					 | 
				
			||||||
			}.build ();
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			ptth_conn.uplink_task.await??;
 | 
					 | 
				
			||||||
			ptth_conn.downlink_task.await??;
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			Ok::<_, anyhow::Error> (())
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async fn handle_p2_connection (
 | 
				
			||||||
 | 
						mut relay_send: quinn::SendStream,
 | 
				
			||||||
 | 
						mut relay_recv: quinn::RecvStream,
 | 
				
			||||||
 | 
						local_tcp_port: u16,
 | 
				
			||||||
 | 
					) -> anyhow::Result <()>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						let mut req_buf = [0, 0, 0, 0];
 | 
				
			||||||
 | 
						relay_recv.read_exact (&mut req_buf).await?;
 | 
				
			||||||
 | 
						assert_eq! (req_buf [0], Command::CONNECT_P2_TO_P4_STEP_2.0);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// TODO: Authorize P2 to connect to us
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						let resp_buf = [
 | 
				
			||||||
 | 
							Command::OKAY.0, 
 | 
				
			||||||
 | 
							Command::CONNECT_P2_TO_P4_STEP_2.0,
 | 
				
			||||||
 | 
							0, 
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
						];
 | 
				
			||||||
 | 
						relay_send.write_all (&resp_buf).await?;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						let mut req_buf = [0, 0, 0, 0];
 | 
				
			||||||
 | 
						relay_recv.read_exact (&mut req_buf).await?;
 | 
				
			||||||
 | 
						assert_eq! (req_buf [0], Command::CONNECT_P2_TO_P5.0);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// TODO: Authorize P2 to connect to P5
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						let resp_buf = [
 | 
				
			||||||
 | 
							Command::OKAY.0, 
 | 
				
			||||||
 | 
							Command::CONNECT_P2_TO_P5.0,
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
						];
 | 
				
			||||||
 | 
						relay_send.write_all (&resp_buf).await?;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						debug! ("Started PTTH connection");
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						let stream = TcpStream::connect (("127.0.0.1", local_tcp_port)).await?;
 | 
				
			||||||
 | 
						let (local_recv, local_send) = stream.into_split ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						trace! ("Relaying bytes...");
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						let ptth_conn = PtthNewConnection {
 | 
				
			||||||
 | 
							local_send,
 | 
				
			||||||
 | 
							local_recv,
 | 
				
			||||||
 | 
							relay_send,
 | 
				
			||||||
 | 
							relay_recv,
 | 
				
			||||||
 | 
						}.build ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						ptth_conn.uplink_task.await??;
 | 
				
			||||||
 | 
						ptth_conn.downlink_task.await??;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						Ok (())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct PtthNewConnection {
 | 
					struct PtthNewConnection {
 | 
				
			||||||
	local_send: tokio::net::tcp::OwnedWriteHalf,
 | 
						local_send: tokio::net::tcp::OwnedWriteHalf,
 | 
				
			||||||
	local_recv: tokio::net::tcp::OwnedReadHalf,
 | 
						local_recv: tokio::net::tcp::OwnedReadHalf,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue