mirror of
https://github.com/Noratrieb/cluelessh.git
synced 2026-01-16 01:15:04 +01:00
migrate cluelessh-faked to cluelessh-tokio
This commit is contained in:
parent
01d6a861f1
commit
b6d0675976
11 changed files with 513 additions and 137 deletions
|
|
@ -1,13 +1,15 @@
|
|||
use cluelessh_connection::{ChannelNumber, ChannelOpen, ChannelOperation, ChannelOperationKind};
|
||||
use cluelessh_connection::{ChannelKind, ChannelNumber, ChannelOperation, ChannelOperationKind};
|
||||
use std::{collections::HashMap, pin::Pin, sync::Arc};
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||
|
||||
use cluelessh_protocol::{ChannelUpdateKind, SshStatus};
|
||||
use eyre::{bail, ContextCompat, OptionExt, Result, WrapErr};
|
||||
use futures::future::BoxFuture;
|
||||
use cluelessh_protocol::{ChannelUpdateKind, SshStatus};
|
||||
use tokio::io::{AsyncRead, AsyncWrite};
|
||||
use tracing::{debug, info, warn};
|
||||
|
||||
use crate::Channel;
|
||||
|
||||
pub struct ClientConnection<S> {
|
||||
stream: Pin<Box<S>>,
|
||||
buf: [u8; 1024],
|
||||
|
|
@ -55,11 +57,6 @@ pub struct PendingChannel {
|
|||
ready_recv: tokio::sync::oneshot::Receiver<Result<(), String>>,
|
||||
channel: Channel,
|
||||
}
|
||||
pub struct Channel {
|
||||
number: ChannelNumber,
|
||||
updates_recv: tokio::sync::mpsc::Receiver<ChannelUpdateKind>,
|
||||
ops_send: tokio::sync::mpsc::Sender<ChannelOperation>,
|
||||
}
|
||||
|
||||
impl<S: AsyncRead + AsyncWrite> ClientConnection<S> {
|
||||
pub async fn connect(stream: S, auth: ClientAuth) -> Result<Self> {
|
||||
|
|
@ -75,7 +72,9 @@ impl<S: AsyncRead + AsyncWrite> ClientConnection<S> {
|
|||
channel_ops_recv,
|
||||
channels: HashMap::new(),
|
||||
proto: cluelessh_protocol::ClientConnection::new(
|
||||
cluelessh_transport::client::ClientConnection::new(cluelessh_protocol::ThreadRngRand),
|
||||
cluelessh_transport::client::ClientConnection::new(
|
||||
cluelessh_protocol::ThreadRngRand,
|
||||
),
|
||||
cluelessh_protocol::auth::ClientAuth::new(auth.username.as_bytes().to_vec()),
|
||||
),
|
||||
auth,
|
||||
|
|
@ -245,14 +244,14 @@ impl<S: AsyncRead + AsyncWrite> ClientConnection<S> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn open_channel(&mut self, kind: ChannelOpen) -> PendingChannel {
|
||||
pub fn open_channel(&mut self, kind: ChannelKind) -> PendingChannel {
|
||||
let Some(channels) = self.proto.channels() else {
|
||||
panic!("connection not ready yet")
|
||||
};
|
||||
let (updates_send, updates_recv) = tokio::sync::mpsc::channel(10);
|
||||
let (ready_send, ready_recv) = tokio::sync::oneshot::channel();
|
||||
|
||||
let number = channels.create_channel(kind);
|
||||
let number = channels.create_channel(kind.clone());
|
||||
|
||||
self.channels.insert(
|
||||
number,
|
||||
|
|
@ -268,6 +267,7 @@ impl<S: AsyncRead + AsyncWrite> ClientConnection<S> {
|
|||
number,
|
||||
updates_recv,
|
||||
ops_send: self.channel_ops_send.clone(),
|
||||
kind,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -290,11 +290,4 @@ impl Channel {
|
|||
.await
|
||||
.map_err(Into::into)
|
||||
}
|
||||
|
||||
pub async fn next_update(&mut self) -> Result<ChannelUpdateKind> {
|
||||
self.updates_recv
|
||||
.recv()
|
||||
.await
|
||||
.ok_or_eyre("channel has been closed")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue