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
9pub(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}