aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/network.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-10-10 17:18:31 +0200
committerGustav Sörnäs <gustav@sornas.net>2020-10-10 17:18:31 +0200
commite88e8df4d464e7c937e64ea68701a7c155bd3f1d (patch)
tree428952fc5fb884106f82bca29735734fce270f5a /mumd/src/network.rs
parentf1338cb1e2c830f1049a99b4a7b1eab3adc7087f (diff)
downloadmum-e88e8df4d464e7c937e64ea68701a7c155bd3f1d.tar.gz
create network.rs and move code
Co-authored-by: Eskil Queseth <eskilq@kth.se>
Diffstat (limited to 'mumd/src/network.rs')
-rw-r--r--mumd/src/network.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/mumd/src/network.rs b/mumd/src/network.rs
new file mode 100644
index 0000000..6aec343
--- /dev/null
+++ b/mumd/src/network.rs
@@ -0,0 +1,40 @@
+use futures::StreamExt;
+use futures_util::stream::{SplitSink, SplitStream};
+use mumble_protocol::{Serverbound, Clientbound};
+use mumble_protocol::control::ClientControlCodec;
+use mumble_protocol::control::ControlCodec;
+use mumble_protocol::control::ControlPacket;
+use std::net::SocketAddr;
+use tokio::net::TcpStream;
+use tokio_tls::TlsConnector;
+use tokio_tls::TlsStream;
+use tokio_util::codec::Decoder;
+use tokio_util::codec::Framed;
+
+pub async fn connect_tcp(
+ server_addr: SocketAddr,
+ server_host: String,
+ accept_invalid_cert: bool,
+) -> (
+ SplitSink<Framed<TlsStream<TcpStream>, ControlCodec<Serverbound, Clientbound>>, ControlPacket<Serverbound>>,
+ SplitStream<Framed<TlsStream<TcpStream>, ControlCodec<Serverbound, Clientbound>>>
+) {
+
+ let stream = TcpStream::connect(&server_addr).await.expect("failed to connect to server:");
+ println!("TCP connected");
+
+ let mut builder = native_tls::TlsConnector::builder();
+ builder.danger_accept_invalid_certs(accept_invalid_cert);
+ let connector: TlsConnector = builder
+ .build()
+ .expect("failed to create TLS connector")
+ .into();
+ let tls_stream = connector
+ .connect(&server_host, stream)
+ .await
+ .expect("failed to connect TLS: {}");
+ println!("TLS connected");
+
+ // Wrap the TLS stream with Mumble's client-side control-channel codec
+ ClientControlCodec::new().framed(tls_stream).split()
+}