aboutsummaryrefslogtreecommitdiff
path: root/server/client-lib/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'server/client-lib/src/network')
-rw-r--r--server/client-lib/src/network/tokio.rs19
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();