use super::duplex_stream::DuplexStream;
use crate::{
HysteriaError,
protocol::{tcp_request, TCPResponseStatus, read_tcp_response},
};
pub struct HysteriaClient {
pub(crate) quic_connection: quinn::Connection,
}
impl HysteriaClient {
pub async fn tcp_connect(&self, address: impl AsRef<str>) -> Result<DuplexStream, HysteriaError> {
let (mut send, mut recv) = self.quic_connection.open_bi().await?;
send.write_all(&tcp_request(address, 0)).await?;
let (status, msg) = read_tcp_response(&mut recv).await?;
if status != TCPResponseStatus::Ok {
return Err(HysteriaError::TcpConnectError(msg));
}
Ok(DuplexStream { send, recv })
}
}