better lz4

This commit is contained in:
Marcel Märtens 2020-07-06 00:32:38 +02:00
parent 4cefdcefea
commit 8fb445b0e8
3 changed files with 16 additions and 17 deletions

View File

@ -36,13 +36,16 @@ pub(crate) struct IncomingMessage {
pub(crate) fn serialize<M: Serialize>(message: &M) -> MessageBuffer {
//this will never fail: https://docs.rs/bincode/0.8.0/bincode/fn.serialize.html
let writer = bincode::serialize(message).unwrap();
MessageBuffer { data: writer }
MessageBuffer {
data: lz4_compress::compress(&writer),
}
}
//pub(crate) fn deserialize<M: DeserializeOwned>(buffer: MessageBuffer) ->
// std::Result<M, std::Box<bincode::error::bincode::ErrorKind>> {
pub(crate) fn deserialize<M: DeserializeOwned>(buffer: MessageBuffer) -> bincode::Result<M> {
let span = buffer.data;
let span = lz4_compress::decompress(&buffer.data)
.expect("lz4_compression error, failed to deserialze");
//this might fail if you choose the wrong type for M. in that case probably X
// got transfered while you assume Y. probably this means your application
// logic is wrong. E.g. You expect a String, but just get a u8.
@ -134,13 +137,11 @@ mod tests {
fn serialize_test() {
let msg = "abc";
let mb = serialize(&msg);
assert_eq!(mb.data.len(), 11);
assert_eq!(mb.data[0], 3);
assert_eq!(mb.data[1], 0);
assert_eq!(mb.data[7], 0);
assert_eq!(mb.data[8], b'a');
assert_eq!(mb.data[8], 97);
assert_eq!(mb.data[9], b'b');
assert_eq!(mb.data[10], b'c');
assert_eq!(mb.data.len(), 9);
assert_eq!(mb.data[0], 34);
assert_eq!(mb.data[1], 3);
assert_eq!(mb.data[6], b'a');
assert_eq!(mb.data[7], b'b');
assert_eq!(mb.data[8], b'c');
}
}

View File

@ -182,10 +182,9 @@ impl TcpProtocol {
bytes[15],
]);
let length = u16::from_le_bytes([bytes[16], bytes[17]]);
let mut cdata = vec![0; length as usize];
let mut data = vec![0; length as usize];
throughput_cache.inc_by(length as i64);
Self::read_except_or_close(cid, &stream, &mut cdata, w2c_cid_frame_s).await;
let data = lz4_compress::decompress(&cdata).unwrap();
Self::read_except_or_close(cid, &stream, &mut data, w2c_cid_frame_s).await;
Frame::Data { mid, start, data }
},
FRAME_RAW => {
@ -348,7 +347,6 @@ impl TcpProtocol {
},
Frame::Data { mid, start, data } => {
throughput_cache.inc_by(data.len() as i64);
let cdata = lz4_compress::compress(&data);
Self::write_or_close(&mut stream, &FRAME_DATA.to_be_bytes(), &mut c2w_frame_r)
.await
|| Self::write_or_close(&mut stream, &mid.to_le_bytes(), &mut c2w_frame_r)
@ -357,11 +355,11 @@ impl TcpProtocol {
.await
|| Self::write_or_close(
&mut stream,
&(cdata.len() as u16).to_le_bytes(),
&(data.len() as u16).to_le_bytes(),
&mut c2w_frame_r,
)
.await
|| Self::write_or_close(&mut stream, &cdata, &mut c2w_frame_r).await
|| Self::write_or_close(&mut stream, &data, &mut c2w_frame_r).await
},
Frame::Raw(data) => {
Self::write_or_close(&mut stream, &FRAME_RAW.to_be_bytes(), &mut c2w_frame_r)

View File

@ -34,7 +34,7 @@ pub const PROMISES_COMPRESSED: Promises = 8;
pub const PROMISES_ENCRYPTED: Promises = 16;
pub(crate) const VELOREN_MAGIC_NUMBER: [u8; 7] = [86, 69, 76, 79, 82, 69, 78]; //VELOREN
pub const VELOREN_NETWORK_VERSION: [u32; 3] = [0, 3, 0];
pub const VELOREN_NETWORK_VERSION: [u32; 3] = [0, 4, 0];
pub(crate) const STREAM_ID_OFFSET1: Sid = Sid::new(0);
pub(crate) const STREAM_ID_OFFSET2: Sid = Sid::new(u64::MAX / 2);