diff options
Diffstat (limited to 'server/client-lib/src/network/tokio.rs')
-rw-r--r-- | server/client-lib/src/network/tokio.rs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/server/client-lib/src/network/tokio.rs b/server/client-lib/src/network/tokio.rs index 60cafd95..3f68e091 100644 --- a/server/client-lib/src/network/tokio.rs +++ b/server/client-lib/src/network/tokio.rs @@ -15,7 +15,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use anyhow::Result; +use anyhow::{anyhow, Result}; use futures_util::{ stream::{SplitSink, SplitStream, StreamExt}, SinkExt, TryStreamExt, @@ -39,8 +39,8 @@ pub struct Network { } impl Network { - pub async fn connect(addr: &str) -> Result<Self> { - let (parts, _) = addr.into_client_request().unwrap().into_parts(); + pub async fn connect(uri: &str) -> Result<Self> { + let (parts, _) = uri.into_client_request().unwrap().into_parts(); let mut builder = Request::builder() .uri(parts.uri.clone().clone()) .method(parts.method.clone()) @@ -64,7 +64,18 @@ impl Network { info!("Connecting: host={host:?} port={port}"); let stream = TcpStream::connect((host, port)).await?; - stream.set_nodelay(true).unwrap(); + Self::connect_raw(stream, uri).await + } + pub async fn connect_raw(stream: TcpStream, uri: &str) -> Result<Self> { + let (parts, _) = uri.into_client_request()?.into_parts(); + let mut builder = Request::builder() + .uri(parts.uri.clone().clone()) + .method(parts.method.clone()) + .version(parts.version); + *builder.headers_mut().ok_or(anyhow!("???"))? = parts.headers.clone(); + let request = builder.body(())?; + + stream.set_nodelay(true)?; let (sock, _) = client_async_tls_with_config(request, stream, None, None).await?; info!("Handshake complete."); let (sock_send, sock_recv) = sock.split(); |