ssh/client/
client.rs

1use crate::{
2    algorithm::compression::{CompressNone, Compression},
3    config::algorithm::AlgList,
4};
5use crate::{algorithm::encryption::Encryption, config::Config};
6use crate::{algorithm::encryption::EncryptionNone, model::Sequence};
7use std::time::Duration;
8
9// the underlay connection
10pub(crate) struct Client {
11    pub(super) sequence: Sequence,
12    pub(super) config: Config,
13    pub(super) negotiated: AlgList,
14    pub(super) encryptor: Box<dyn Encryption>,
15    pub(super) compressor: Box<dyn Compression>,
16    pub(super) session_id: Vec<u8>,
17}
18
19impl Client {
20    pub fn new(config: Config) -> Self {
21        Self {
22            config,
23            encryptor: Box::<EncryptionNone>::default(),
24            compressor: Box::<CompressNone>::default(),
25            negotiated: AlgList::new(),
26            session_id: vec![],
27            sequence: Sequence::new(),
28        }
29    }
30
31    pub fn get_encryptor(&mut self) -> &mut dyn Encryption {
32        self.encryptor.as_mut()
33    }
34
35    pub fn get_compressor(&mut self) -> &mut dyn Compression {
36        self.compressor.as_mut()
37    }
38
39    pub fn get_seq(&mut self) -> &mut Sequence {
40        &mut self.sequence
41    }
42
43    pub fn get_timeout(&self) -> Option<Duration> {
44        self.config.timeout
45    }
46
47    pub fn set_timeout(&mut self, tm: Option<Duration>) {
48        self.config.timeout = tm
49    }
50}