|
@@ -67,6 +67,7 @@ async fn manage_conversation(
|
|
|
&mut state_to_writers,
|
|
|
user,
|
|
|
group,
|
|
|
+ true,
|
|
|
&mut rng,
|
|
|
)
|
|
|
.await
|
|
@@ -78,6 +79,7 @@ async fn manage_conversation(
|
|
|
&mut state_to_writers,
|
|
|
user,
|
|
|
group,
|
|
|
+ true,
|
|
|
&mut rng,
|
|
|
)
|
|
|
.await
|
|
@@ -145,11 +147,9 @@ async fn reader(
|
|
|
// send a message or the peer reaches out to us.
|
|
|
break;
|
|
|
};
|
|
|
-
|
|
|
- let group = msg.group.clone();
|
|
|
let channel_to_conversation = group_to_conversation_thread
|
|
|
- .get(&group)
|
|
|
- .unwrap_or_else(|| panic!("Unknown group: {}", group));
|
|
|
+ .get(&msg.group)
|
|
|
+ .unwrap_or_else(|| panic!("Unknown group: {}", msg.group));
|
|
|
channel_to_conversation
|
|
|
.send(msg)
|
|
|
.expect("reader: Channel to group closed");
|
|
@@ -220,31 +220,34 @@ async fn writer<'a>(
|
|
|
}
|
|
|
|
|
|
// immediately try to connect to the peer
|
|
|
- let connection_attempt = Socks5Stream::connect_with_password(
|
|
|
- socks_params.socks.as_str(),
|
|
|
- socks_params.target.as_str(),
|
|
|
- &socks_params.user,
|
|
|
- &socks_params.recipient,
|
|
|
- )
|
|
|
- .await;
|
|
|
- if let Ok(mut stream) = connection_attempt {
|
|
|
- log!(
|
|
|
- "connection attempt success from {} to {} on {}",
|
|
|
+ tokio::select! {
|
|
|
+ connection_attempt = Socks5Stream::connect_with_password(
|
|
|
+ socks_params.socks.as_str(),
|
|
|
+ socks_params.target.as_str(),
|
|
|
&socks_params.user,
|
|
|
&socks_params.recipient,
|
|
|
- &socks_params.target
|
|
|
- );
|
|
|
- stream
|
|
|
- .write_all(&mgen::serialize_str(&socks_params.user))
|
|
|
- .await?;
|
|
|
- let (rd, wr) = stream.into_inner().into_split();
|
|
|
- read_socket_updater.send(rd);
|
|
|
- return Ok(wr);
|
|
|
- } else if let Err(e) = connection_attempt {
|
|
|
- let e: MessengerError = e.into();
|
|
|
- if let MessengerError::Fatal(e) = e {
|
|
|
- return Err(e);
|
|
|
+ ) => {
|
|
|
+ if let Ok(mut stream) = connection_attempt {
|
|
|
+ log!(
|
|
|
+ "connection attempt success from {} to {} on {}",
|
|
|
+ &socks_params.user,
|
|
|
+ &socks_params.recipient,
|
|
|
+ &socks_params.target
|
|
|
+ );
|
|
|
+ stream
|
|
|
+ .write_all(&mgen::serialize_str(&socks_params.user))
|
|
|
+ .await?;
|
|
|
+ let (rd, wr) = stream.into_inner().into_split();
|
|
|
+ read_socket_updater.send(rd);
|
|
|
+ return Ok(wr);
|
|
|
+ } else if let Err(e) = connection_attempt {
|
|
|
+ let e: MessengerError = e.into();
|
|
|
+ if let MessengerError::Fatal(e) = e {
|
|
|
+ return Err(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ stream = write_socket_updater.recv() => {return Ok(stream);},
|
|
|
}
|
|
|
|
|
|
// Usually we'll have returned by now, but sometimes we'll fail to
|