diff options
author | Stuart Stock <stuart@int08h.com> | 2019-02-10 18:41:44 -0600 |
---|---|---|
committer | Stuart Stock <stuart@int08h.com> | 2019-02-10 18:41:44 -0600 |
commit | 177372f63a33b25a075c4cba446319929950b0f8 (patch) | |
tree | 5f274bf2f4874a6dc66770c71cf1a036432f122f /src/server.rs | |
parent | 62e6dd64a276dbf8e10cbe6a4111f0cfb98d163f (diff) | |
download | roughenough-177372f63a33b25a075c4cba446319929950b0f8.zip |
initial version of client response mangling
Diffstat (limited to 'src/server.rs')
-rw-r--r-- | src/server.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/server.rs b/src/server.rs index 85411ce..8d2d7c1 100644 --- a/src/server.rs +++ b/src/server.rs @@ -37,6 +37,7 @@ use mio_extras::timer::Timer; use crate::{Error, RtMessage, Tag, MIN_REQUEST_LENGTH}; use crate::config::ServerConfig; +use crate::grease::Grease; use crate::key::{LongTermKey, OnlineKey}; use crate::kms; use crate::merkle::MerkleTree; @@ -78,6 +79,7 @@ pub struct Server { health_listener: Option<TcpListener>, keep_running: Arc<AtomicBool>, poll_duration: Option<Duration>, + grease: Grease, timer: Timer<()>, poll: Poll, merkle: MerkleTree, @@ -154,6 +156,7 @@ impl Server { Box::new(AggregatedStats::new()) }; + let grease = Grease::new(config.fault_percentage()); let merkle = MerkleTree::new(); let requests = Vec::with_capacity(config.batch_size() as usize); @@ -167,6 +170,7 @@ impl Server { keep_running, poll_duration, + grease, timer, poll, merkle, @@ -357,7 +361,7 @@ impl Server { } } - fn send_responses(&mut self) -> () { + fn send_responses(&mut self) { let merkle_root = self.merkle.compute_root(); // The SREP tag is identical for each response @@ -365,8 +369,11 @@ impl Server { for (i, &(ref nonce, ref src_addr)) in self.requests.iter().enumerate() { let paths = self.merkle.get_paths(i); - let resp = self.make_response(&srep, &self.cert_bytes, &paths, i as u32); - let resp_bytes = resp.encode().unwrap(); + let resp_msg = { + let r = self.make_response(&srep, &self.cert_bytes, &paths, i as u32); + if self.grease.should_add_error() { self.grease.add_errors(&r) } else { r } + }; + let resp_bytes = resp_msg.encode().unwrap(); let bytes_sent = self .socket |