|
@@ -13,7 +13,6 @@ use tokio::net::{
|
|
|
use tokio::sync::mpsc;
|
|
use tokio::sync::mpsc;
|
|
|
use tokio::task;
|
|
use tokio::task;
|
|
|
use tokio::time::Duration;
|
|
use tokio::time::Duration;
|
|
|
-use tokio_socks::tcp::Socks5Stream;
|
|
|
|
|
|
|
|
|
|
mod messenger;
|
|
mod messenger;
|
|
|
|
|
|
|
@@ -23,6 +22,7 @@ use crate::messenger::state::{
|
|
|
manage_active_conversation, manage_idle_conversation, StateFromReader, StateMachine,
|
|
manage_active_conversation, manage_idle_conversation, StateFromReader, StateMachine,
|
|
|
StateToWriter,
|
|
StateToWriter,
|
|
|
};
|
|
};
|
|
|
|
|
+use crate::messenger::tcp::{connect, SocksParams};
|
|
|
|
|
|
|
|
/// Type for sending messages from the reader thread to the state thread.
|
|
/// Type for sending messages from the reader thread to the state thread.
|
|
|
type ReaderToState = mpsc::UnboundedSender<MessageHeader>;
|
|
type ReaderToState = mpsc::UnboundedSender<MessageHeader>;
|
|
@@ -221,12 +221,7 @@ async fn writer<'a>(
|
|
|
|
|
|
|
|
// immediately try to connect to the peer
|
|
// immediately try to connect to the peer
|
|
|
tokio::select! {
|
|
tokio::select! {
|
|
|
- connection_attempt = Socks5Stream::connect_with_password(
|
|
|
|
|
- socks_params.socks.as_str(),
|
|
|
|
|
- socks_params.target.as_str(),
|
|
|
|
|
- &socks_params.user,
|
|
|
|
|
- &socks_params.recipient,
|
|
|
|
|
- ) => {
|
|
|
|
|
|
|
+ connection_attempt = connect(socks_params) => {
|
|
|
if let Ok(mut stream) = connection_attempt {
|
|
if let Ok(mut stream) = connection_attempt {
|
|
|
log!(
|
|
log!(
|
|
|
"connection attempt success from {} to {} on {}",
|
|
"connection attempt success from {} to {} on {}",
|
|
@@ -237,14 +232,11 @@ async fn writer<'a>(
|
|
|
stream
|
|
stream
|
|
|
.write_all(&mgen::serialize_str(&socks_params.user))
|
|
.write_all(&mgen::serialize_str(&socks_params.user))
|
|
|
.await?;
|
|
.await?;
|
|
|
- let (rd, wr) = stream.into_inner().into_split();
|
|
|
|
|
|
|
+ let (rd, wr) = stream.into_split();
|
|
|
read_socket_updater.send(rd);
|
|
read_socket_updater.send(rd);
|
|
|
return Ok(wr);
|
|
return Ok(wr);
|
|
|
- } else if let Err(e) = connection_attempt {
|
|
|
|
|
- let e: MessengerError = e.into();
|
|
|
|
|
- if let MessengerError::Fatal(e) = e {
|
|
|
|
|
|
|
+ } else if let Err(MessengerError::Fatal(e)) = connection_attempt {
|
|
|
return Err(e);
|
|
return Err(e);
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
stream = write_socket_updater.recv() => {return Ok(stream);},
|
|
stream = write_socket_updater.recv() => {return Ok(stream);},
|
|
@@ -278,16 +270,11 @@ async fn writer<'a>(
|
|
|
) -> Result<OwnedWriteHalf, MessengerError> {
|
|
) -> Result<OwnedWriteHalf, MessengerError> {
|
|
|
tokio::select! {
|
|
tokio::select! {
|
|
|
() = tokio::time::sleep(retry) => {
|
|
() = tokio::time::sleep(retry) => {
|
|
|
- let mut stream = Socks5Stream::connect_with_password(
|
|
|
|
|
- socks_params.socks.as_str(),
|
|
|
|
|
- socks_params.target.as_str(),
|
|
|
|
|
- &socks_params.user,
|
|
|
|
|
- &socks_params.recipient,
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ let mut stream = connect(socks_params)
|
|
|
.await?;
|
|
.await?;
|
|
|
stream.write_all(&mgen::serialize_str(&socks_params.user)).await?;
|
|
stream.write_all(&mgen::serialize_str(&socks_params.user)).await?;
|
|
|
|
|
|
|
|
- let (rd, wr) = stream.into_inner().into_split();
|
|
|
|
|
|
|
+ let (rd, wr) = stream.into_split();
|
|
|
read_socket_updater.send(rd);
|
|
read_socket_updater.send(rd);
|
|
|
Ok(wr)
|
|
Ok(wr)
|
|
|
},
|
|
},
|
|
@@ -297,15 +284,6 @@ async fn writer<'a>(
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/// Parameters used in establishing the connection through the socks proxy.
|
|
|
|
|
-/// (Members may be useful elsewhere as well, but that's the primary purpose.)
|
|
|
|
|
-struct SocksParams {
|
|
|
|
|
- socks: String,
|
|
|
|
|
- target: String,
|
|
|
|
|
- user: String,
|
|
|
|
|
- recipient: String,
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
/// This user or a recipient.
|
|
/// This user or a recipient.
|
|
|
/// If this user, address is a local address to listen on.
|
|
/// If this user, address is a local address to listen on.
|
|
|
/// If a recipient, address is a remote address to send to.
|
|
/// If a recipient, address is a remote address to send to.
|
|
@@ -320,7 +298,7 @@ struct Config {
|
|
|
user: Peer,
|
|
user: Peer,
|
|
|
group: String,
|
|
group: String,
|
|
|
recipients: Vec<Peer>,
|
|
recipients: Vec<Peer>,
|
|
|
- socks: String,
|
|
|
|
|
|
|
+ socks: Option<String>,
|
|
|
bootstrap: f64,
|
|
bootstrap: f64,
|
|
|
retry: f64,
|
|
retry: f64,
|
|
|
distributions: ConfigDistributions,
|
|
distributions: ConfigDistributions,
|