From e88e8df4d464e7c937e64ea68701a7c155bd3f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sat, 10 Oct 2020 17:18:31 +0200 Subject: create network.rs and move code Co-authored-by: Eskil Queseth --- mumd/src/network.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 mumd/src/network.rs (limited to 'mumd/src/network.rs') 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, ControlCodec>, ControlPacket>, + SplitStream, ControlCodec>> +) { + + 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() +} -- cgit v1.2.1