diag_reader: move error handling outside of trait

This commit is contained in:
Will Greenberg
2023-12-20 17:03:46 -08:00
parent eed983daae
commit 5128f468cf
2 changed files with 18 additions and 15 deletions

View File

@@ -1,6 +1,6 @@
use wavehunter::debug_file::DebugFileReader;
use wavehunter::diag_reader::DiagReader;
use wavehunter::diag_device::DiagResult;
use wavehunter::diag_device::{DiagResult, DiagDeviceError};
use wavehunter::gsmtap_parser::GsmtapParser;
use wavehunter::pcap::PcapFile;
@@ -21,12 +21,21 @@ fn main() -> DiagResult<()> {
pcap_file.write_iface_header().unwrap();
loop {
for msg in debug_reader.read_response()? {
debug!("msg: {:?}", msg);
if let Some((timestamp, gsmtap_msg)) = gsmtap_parser.recv_message(msg).unwrap() {
debug!("gsmtap_msg: {:?}", gsmtap_msg);
pcap_file.write_gsmtap_message(gsmtap_msg, timestamp).unwrap();
}
match debug_reader.read_response() {
Ok(msgs) => {
for msg in msgs {
debug!("msg: {:?}", msg);
if let Some((timestamp, gsmtap_msg)) = gsmtap_parser.recv_message(msg).unwrap() {
debug!("gsmtap_msg: {:?}", gsmtap_msg);
pcap_file.write_gsmtap_message(gsmtap_msg, timestamp).unwrap();
}
}
},
Err(DiagDeviceError::IO(err)) if err.kind() == std::io::ErrorKind::UnexpectedEof => {
println!("Reached end of debug file, exiting...");
std::process::exit(0);
},
Err(err) => panic!("Error reading debug file {}", err),
}
}
}

View File

@@ -5,7 +5,7 @@ use crate::diag::*;
use deku::prelude::*;
use std::fs::File;
use std::io::Read;
use log::{warn, info};
use log::warn;
#[derive(Debug, DekuRead, DekuWrite)]
#[deku(endian = "little")]
@@ -31,13 +31,7 @@ impl DebugFileReader {
impl DiagReader for DebugFileReader {
fn get_next_messages_container(&mut self) -> DiagResult<MessagesContainer> {
let mut bytes_read_buf = [0; 4];
if let Err(e) = self.file.read_exact(&mut bytes_read_buf) {
if e.kind() == std::io::ErrorKind::UnexpectedEof {
info!("reached end of debug file, exiting...");
std::process::exit(0);
}
return Err(e.into());
}
self.file.read_exact(&mut bytes_read_buf)?;
let bytes_read = u32::from_le_bytes(bytes_read_buf) as usize;
let mut data = vec![0; bytes_read as usize];
self.file.read_exact(&mut data)?;