This commit is contained in:
asxalex 2024-03-29 23:35:26 +08:00
parent 726e30610d
commit 0654985a2f
5 changed files with 23 additions and 3 deletions

3
Makefile Normal file
View File

@ -0,0 +1,3 @@
test:
RUSTFLAGS="-L ." cargo test --release

View File

@ -3,6 +3,8 @@ use crate::utils::Result;
use super::packet::Packet;
use byteorder::{BigEndian, ByteOrder};
use tracing::{debug, error};
use serde_repr::*;
use crate::utils::*;
@ -263,6 +265,12 @@ pub fn encode_packet<T: serde::Serialize>(cmn: &Common, pkt: &T) -> Result<Vec<u
// body
let body = serde_json::to_vec(pkt)?;
debug!(
"body({}): {}",
body.len(),
std::str::from_utf8(&body).unwrap()
);
let mut result = Vec::with_capacity(2 + hdr.len() + body.len());
let total_size = (hdr.len() + body.len()) as u16;
// insert total size
@ -274,6 +282,9 @@ pub fn encode_packet<T: serde::Serialize>(cmn: &Common, pkt: &T) -> Result<Vec<u
// insert body
result.extend_from_slice(&body);
debug!("enocded packet size: {}", result.len());
debug!("encoded packet: {:?}", result);
Ok(result)
}
@ -285,11 +296,15 @@ pub fn decode_common<'a>(value: &'a [u8]) -> Result<(Common<'a>, &'a [u8])> {
let size_bytes = value[0..2].try_into().expect("never goes here");
let size = u16::from_be_bytes(size_bytes);
if value.len() < 2 + size as usize {
error!("decode pkt header error: {}: {}", value.len(), 2 + size);
return Err(SDLanError::NormalError("decode pkt header size error"));
}
let value2 = &value[2..2 + size as usize];
let (cmn, value2) = Common::from_slice(value2)?;
let Ok((cmn, value2)) = Common::from_slice(value2) else {
error!("failed to decode common");
return Err(SDLanError::NormalError("failed to deocde common"));
};
Ok((cmn, value2))
}

View File

@ -1,6 +1,6 @@
use serde::{Deserialize, Serialize};
use crate::peer::SdlanSock;
use crate::peer::{SdlanSock, V6Info};
#[derive(Serialize, Deserialize)]
pub struct PeerInfo {
@ -9,4 +9,5 @@ pub struct PeerInfo {
pub src_ip: u32,
pub dst_ip: u32,
pub sock: SdlanSock,
pub v6_info: Option<V6Info>,
}

View File

@ -10,7 +10,7 @@ pub struct RegisterSuperACK {
pub dev_addr: IpSubnetNonAtomic,
// sock info
pub sock: SdlanSock,
pub sock: Option<SdlanSock>,
// 头加密aesrsa加密之后
pub header_key: Vec<u8>,

View File

@ -3,4 +3,5 @@ use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct RegisterSuperNAK {
pub cookie: u32,
pub src_ip: u32,
}