diff --git a/src/bin/wavehunter_reader.rs b/src/bin/wavehunter_reader.rs index 3be7350..db9792c 100644 --- a/src/bin/wavehunter_reader.rs +++ b/src/bin/wavehunter_reader.rs @@ -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), } } } diff --git a/src/debug_file.rs b/src/debug_file.rs index 89284d7..55ad776 100644 --- a/src/debug_file.rs +++ b/src/debug_file.rs @@ -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 { 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)?;