refactor(ironrdp): small refactoring;

This commit is contained in:
Pavlo Myroniuk 2025-07-07 18:14:19 +03:00
parent 61f4419922
commit 3eb1439b66
3 changed files with 22 additions and 29 deletions

View file

@ -159,9 +159,12 @@ impl<'a> CredsspSequence<'a> {
output: &mut WriteBuf,
) -> ConnectorResult<Written> {
let (ts_request, next_state) = match result {
Ok(ServerState::ReplyNeeded(ts_request)) => (Some(Box::new(ts_request)), CredsspState::Ongoing),
Ok(ServerState::ReplyNeeded(ts_request)) => (Some(ts_request), CredsspState::Ongoing),
Ok(ServerState::Finished(_id)) => (None, CredsspState::Finished),
Err(err) => (err.ts_request, CredsspState::ServerError(err.error)),
Err(err) => (
err.ts_request.map(|ts_request| *ts_request),
CredsspState::ServerError(err.error),
),
};
self.state = next_state;

View file

@ -13,14 +13,6 @@ use std::io;
use bytes::BytesMut;
use tokio::io::{AsyncRead, AsyncWrite, ReadHalf, WriteHalf};
#[cfg(feature = "reqwest")]
pub trait AsyncSendableNetworkClient: Send + Sync {
fn send<'a>(
&'a mut self,
network_request: &'a sspi::NetworkRequest,
) -> Pin<Box<dyn core::future::Future<Output = ironrdp_connector::ConnectorResult<Vec<u8>>> + Send + 'a>>;
}
pub type TokioFramed<S> = Framed<TokioStream<S>>;
pub fn split_tokio_framed<S>(framed: TokioFramed<S>) -> (TokioFramed<ReadHalf<S>>, TokioFramed<WriteHalf<S>>)

View file

@ -9,7 +9,7 @@ use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::{TcpStream, UdpSocket};
use url::Url;
use crate::{AsyncNetworkClient, AsyncSendableNetworkClient};
use crate::AsyncNetworkClient;
pub struct ReqwestNetworkClient {
client: Option<Client>,
@ -20,24 +20,7 @@ impl AsyncNetworkClient for ReqwestNetworkClient {
&'a mut self,
request: &'a sspi::generator::NetworkRequest,
) -> Pin<Box<dyn Future<Output = ConnectorResult<Vec<u8>>> + 'a>> {
AsyncSendableNetworkClient::send(self, request)
}
}
impl AsyncSendableNetworkClient for ReqwestNetworkClient {
fn send<'a>(
&'a mut self,
request: &'a sspi::generator::NetworkRequest,
) -> Pin<Box<dyn Future<Output = ConnectorResult<Vec<u8>>> + Send + 'a>> {
Box::pin(async move {
match &request.protocol {
sspi::network_client::NetworkProtocol::Tcp => self.send_tcp(&request.url, &request.data).await,
sspi::network_client::NetworkProtocol::Udp => self.send_udp(&request.url, &request.data).await,
sspi::network_client::NetworkProtocol::Http | sspi::network_client::NetworkProtocol::Https => {
self.send_http(&request.url, &request.data).await
}
}
})
ReqwestNetworkClient::send(self, request)
}
}
@ -54,6 +37,21 @@ impl Default for ReqwestNetworkClient {
}
impl ReqwestNetworkClient {
pub fn send<'a>(
&'a mut self,
request: &'a sspi::generator::NetworkRequest,
) -> Pin<Box<dyn Future<Output = ConnectorResult<Vec<u8>>> + Send + 'a>> {
Box::pin(async move {
match &request.protocol {
sspi::network_client::NetworkProtocol::Tcp => self.send_tcp(&request.url, &request.data).await,
sspi::network_client::NetworkProtocol::Udp => self.send_udp(&request.url, &request.data).await,
sspi::network_client::NetworkProtocol::Http | sspi::network_client::NetworkProtocol::Https => {
self.send_http(&request.url, &request.data).await
}
}
})
}
async fn send_tcp(&self, url: &Url, data: &[u8]) -> ConnectorResult<Vec<u8>> {
let addr = format!("{}:{}", url.host_str().unwrap_or_default(), url.port().unwrap_or(88));