diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-21 12:48:36 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-21 12:48:36 +0200 |
commit | 41c95fc5b6b1c8bc4b944d889414a4197a23837b (patch) | |
tree | 86519d51df113263e0c1e6d92b96b35c72cf37d9 /server/client-lib/src | |
parent | 526bde82158fc58f59a8147566ef0ef01845ac49 (diff) | |
download | hurrycurry-41c95fc5b6b1c8bc4b944d889414a4197a23837b.tar hurrycurry-41c95fc5b6b1c8bc4b944d889414a4197a23837b.tar.bz2 hurrycurry-41c95fc5b6b1c8bc4b944d889414a4197a23837b.tar.zst |
reg: connection test
Diffstat (limited to 'server/client-lib/src')
-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(); |