feat(secure): add saving of reports into the report folder
This commit is contained in:
parent
d69d0a5f6b
commit
d8c184171d
5 changed files with 53 additions and 2 deletions
|
|
@ -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"
|
||||
|
|
|
|||
35
src/protocols/secure/method_send_report.rs
Normal file
35
src/protocols/secure/method_send_report.rs
Normal 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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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<()>;
|
||||
|
|
|
|||
12
src/rmc/structures/qbuffer.rs
Normal file
12
src/rmc/structures/qbuffer.rs
Normal 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)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue