might require some more tweaks..

This commit is contained in:
Robin Müller 2023-09-16 22:19:48 +02:00
parent 706dde51c4
commit d582ce212e
Signed by: muellerr
GPG Key ID: A649FB78196E3849
2 changed files with 19 additions and 9 deletions

View File

@ -56,7 +56,7 @@ impl<TcError, TmError> TcpTmtcServerBase<TcError, TmError> {
}) })
} }
pub (crate) fn local_addr(&self) -> std::io::Result<SocketAddr> { pub(crate) fn local_addr(&self) -> std::io::Result<SocketAddr> {
self.listener.local_addr() self.listener.local_addr()
} }
} }

View File

@ -3,9 +3,9 @@ use alloc::vec;
use cobs::decode_in_place; use cobs::decode_in_place;
use cobs::encode; use cobs::encode;
use cobs::max_encoding_length; use cobs::max_encoding_length;
use std::net::SocketAddr;
use std::io::Read; use std::io::Read;
use std::io::Write; use std::io::Write;
use std::net::SocketAddr;
use std::net::ToSocketAddrs; use std::net::ToSocketAddrs;
use std::vec::Vec; use std::vec::Vec;
@ -147,7 +147,7 @@ impl<TcError: 'static, TmError: 'static> TcpTmtcInCobsServer<TcError, TmError> {
current_idx += 1; current_idx += 1;
current_idx += encode( current_idx += encode(
&self.base.tm_buffer[..read_tm_len], &self.base.tm_buffer[..read_tm_len],
&mut self.tm_encoding_buffer, &mut self.tm_encoding_buffer[current_idx..],
); );
self.tm_encoding_buffer[current_idx] = 0; self.tm_encoding_buffer[current_idx] = 0;
current_idx += 1; current_idx += 1;
@ -275,7 +275,7 @@ mod tests {
type Error = (); type Error = ();
fn retrieve_packet(&mut self, buffer: &mut [u8]) -> Result<usize, Self::Error> { fn retrieve_packet(&mut self, buffer: &mut [u8]) -> Result<usize, Self::Error> {
let tm_queue = self.tm_queue.lock().expect("locking tm queue failed"); let mut tm_queue = self.tm_queue.lock().expect("locking tm queue failed");
if !tm_queue.is_empty() { if !tm_queue.is_empty() {
let next_vec = tm_queue.front().unwrap(); let next_vec = tm_queue.front().unwrap();
if buffer.len() < next_vec.len() { if buffer.len() < next_vec.len() {
@ -284,7 +284,8 @@ mod tests {
next_vec.len() next_vec.len()
); );
} }
buffer[0..next_vec.len()].copy_from_slice(next_vec); let next_vec = tm_queue.pop_front().unwrap();
buffer[0..next_vec.len()].copy_from_slice(&next_vec);
return Ok(next_vec.len()); return Ok(next_vec.len());
} }
Ok(0) Ok(0)
@ -478,7 +479,9 @@ mod tests {
let tm_source = SyncTmSource::default(); let tm_source = SyncTmSource::default();
let mut tcp_server = let mut tcp_server =
generic_tmtc_server(&auto_port_addr, tc_receiver.clone(), tm_source.clone()); generic_tmtc_server(&auto_port_addr, tc_receiver.clone(), tm_source.clone());
let dest_addr = tcp_server.local_addr().expect("retrieving dest addr failed"); let dest_addr = tcp_server
.local_addr()
.expect("retrieving dest addr failed");
let conn_handled: Arc<AtomicBool> = Default::default(); let conn_handled: Arc<AtomicBool> = Default::default();
let set_if_done = conn_handled.clone(); let set_if_done = conn_handled.clone();
// Call the connection handler in separate thread, does block. // Call the connection handler in separate thread, does block.
@ -531,7 +534,9 @@ mod tests {
tm_source.add_tm(&INVERTED_PACKET); tm_source.add_tm(&INVERTED_PACKET);
let mut tcp_server = let mut tcp_server =
generic_tmtc_server(&auto_port_addr, tc_receiver.clone(), tm_source.clone()); generic_tmtc_server(&auto_port_addr, tc_receiver.clone(), tm_source.clone());
let dest_addr = tcp_server.local_addr().expect("retrieving dest addr failed"); let dest_addr = tcp_server
.local_addr()
.expect("retrieving dest addr failed");
let conn_handled: Arc<AtomicBool> = Default::default(); let conn_handled: Arc<AtomicBool> = Default::default();
let set_if_done = conn_handled.clone(); let set_if_done = conn_handled.clone();
// Call the connection handler in separate thread, does block. // Call the connection handler in separate thread, does block.
@ -553,6 +558,10 @@ mod tests {
stream stream
.write_all(&encoded_buf[..current_idx]) .write_all(&encoded_buf[..current_idx])
.expect("writing to TCP server failed"); .expect("writing to TCP server failed");
// Done with writing.
stream
.shutdown(std::net::Shutdown::Write)
.expect("shutting down write failed");
let mut read_buf: [u8; 16] = [0; 16]; let mut read_buf: [u8; 16] = [0; 16];
let read_len = stream.read(&mut read_buf).expect("read failed"); let read_len = stream.read(&mut read_buf).expect("read failed");
// 1 byte encoding overhead, 2 sentinel bytes. // 1 byte encoding overhead, 2 sentinel bytes.
@ -562,7 +571,8 @@ mod tests {
let decoded_len = let decoded_len =
cobs::decode_in_place(&mut read_buf[1..read_len]).expect("COBS decoding failed"); cobs::decode_in_place(&mut read_buf[1..read_len]).expect("COBS decoding failed");
assert_eq!(decoded_len, 5); assert_eq!(decoded_len, 5);
assert_eq!(&read_buf[..INVERTED_PACKET.len()], &INVERTED_PACKET); // Skip first sentinel byte.
assert_eq!(&read_buf[1..1 + INVERTED_PACKET.len()], &INVERTED_PACKET);
drop(stream); drop(stream);
// A certain amount of time is allowed for the transaction to complete. // A certain amount of time is allowed for the transaction to complete.