feat(secure): add saving of reports into the report folder

This commit is contained in:
DJMrTV 2025-02-04 17:08:04 +01:00
commit d8c184171d
5 changed files with 53 additions and 2 deletions

View file

@ -18,7 +18,7 @@ rand = "0.9.0-beta.3"
rustls = "^0.23.21"
hmac = "0.12.1"
md-5 = "^0.10.6"
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread", "net", "sync"] }
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread", "net", "sync", "fs"] }
tokio-stream = { version = "0.1.17", features = ["io-util"] }
tonic = "0.12.3"
prost = "0.13.4"

View file

@ -0,0 +1,35 @@
use std::io::Cursor;
use log::error;
use crate::endianness::{IS_BIG_ENDIAN, ReadExtensions};
use crate::protocols::secure::method_register::register;
use crate::prudp::socket::ConnectionData;
use crate::prudp::station_url::StationUrl;
use crate::rmc::message::RMCMessage;
use crate::rmc::response::{ErrorCode, RMCResponseResult};
use crate::rmc::response::ErrorCode::Core_InvalidArgument;
use crate::rmc::structures::qbuffer;
pub async fn send_report(rmcmessage: &RMCMessage, report_id: u32, data: Vec<u8>) -> RMCResponseResult{
let result = tokio::fs::write(format!("./reports/{}", report_id), data).await;
match result{
Ok(_) => {},
Err(e) => error!("{}", e)
}
return rmcmessage.success_with_data(Vec::new());
}
pub async fn send_report_raw_params(rmcmessage: &RMCMessage, conn_data: &mut ConnectionData, _: ()) -> RMCResponseResult{
let mut reader = Cursor::new(&rmcmessage.rest_of_data);
let Ok(error_id) = reader.read_struct(IS_BIG_ENDIAN) else {
return rmcmessage.error_result_with_code(Core_InvalidArgument);
};
let Ok(data) = qbuffer::read(&mut reader) else {
return rmcmessage.error_result_with_code(Core_InvalidArgument);
};
send_report(rmcmessage, error_id, data).await
}

View file

@ -1,10 +1,13 @@
mod method_register;
mod method_send_report;
use crate::define_protocol;
use crate::protocols::secure::method_register::register_raw_params;
use crate::protocols::secure::method_send_report::send_report_raw_params;
define_protocol!{
11() => {
0x01 => register_raw_params
0x01 => register_raw_params,
0x08 => send_report_raw_params
}
}

View file

@ -22,6 +22,7 @@ pub mod buffer;
pub mod connection_data;
pub mod rmc_struct;
pub mod list;
pub mod qbuffer;
pub trait RmcSerialize: Sized{
fn serialize(&self, writer: &mut dyn Write) -> Result<()>;

View file

@ -0,0 +1,12 @@
use std::io::Read;
use crate::endianness::{IS_BIG_ENDIAN, ReadExtensions};
use crate::rmc::structures::Result;
pub fn read(reader: &mut impl Read) -> Result<Vec<u8>>{
let size: u16 = reader.read_struct(IS_BIG_ENDIAN)?;
let mut vec = vec![0; size as usize];
reader.read_exact(&mut vec)?;
Ok(vec)
}