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::debug_file::DebugFileReader;
use wavehunter::diag_reader::DiagReader; use wavehunter::diag_reader::DiagReader;
use wavehunter::diag_device::DiagResult; use wavehunter::diag_device::{DiagResult, DiagDeviceError};
use wavehunter::gsmtap_parser::GsmtapParser; use wavehunter::gsmtap_parser::GsmtapParser;
use wavehunter::pcap::PcapFile; use wavehunter::pcap::PcapFile;
@@ -21,12 +21,21 @@ fn main() -> DiagResult<()> {
pcap_file.write_iface_header().unwrap(); pcap_file.write_iface_header().unwrap();
loop { loop {
for msg in debug_reader.read_response()? { match debug_reader.read_response() {
debug!("msg: {:?}", msg); Ok(msgs) => {
if let Some((timestamp, gsmtap_msg)) = gsmtap_parser.recv_message(msg).unwrap() { for msg in msgs {
debug!("gsmtap_msg: {:?}", gsmtap_msg); debug!("msg: {:?}", msg);
pcap_file.write_gsmtap_message(gsmtap_msg, timestamp).unwrap(); 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 deku::prelude::*;
use std::fs::File; use std::fs::File;
use std::io::Read; use std::io::Read;
use log::{warn, info}; use log::warn;
#[derive(Debug, DekuRead, DekuWrite)] #[derive(Debug, DekuRead, DekuWrite)]
#[deku(endian = "little")] #[deku(endian = "little")]
@@ -31,13 +31,7 @@ impl DebugFileReader {
impl DiagReader for DebugFileReader { impl DiagReader for DebugFileReader {
fn get_next_messages_container(&mut self) -> DiagResult<MessagesContainer> { fn get_next_messages_container(&mut self) -> DiagResult<MessagesContainer> {
let mut bytes_read_buf = [0; 4]; let mut bytes_read_buf = [0; 4];
if let Err(e) = self.file.read_exact(&mut bytes_read_buf) { 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());
}
let bytes_read = u32::from_le_bytes(bytes_read_buf) as usize; let bytes_read = u32::from_le_bytes(bytes_read_buf) as usize;
let mut data = vec![0; bytes_read as usize]; let mut data = vec![0; bytes_read as usize];
self.file.read_exact(&mut data)?; self.file.read_exact(&mut data)?;