From de973723312c56a58651f12146668500697543c0 Mon Sep 17 00:00:00 2001 From: Max Audron Date: Fri, 17 Jan 2020 10:47:50 +0100 Subject: finish main parsing --- src/protocol/primitive/basic.rs | 29 ++++++++++++----------- src/protocol/primitive/mod.rs | 2 +- src/protocol/primitive/variant.rs | 48 ++++++++++++++++----------------------- 3 files changed, 35 insertions(+), 44 deletions(-) (limited to 'src/protocol/primitive') diff --git a/src/protocol/primitive/basic.rs b/src/protocol/primitive/basic.rs index 100da20..30de1c7 100644 --- a/src/protocol/primitive/basic.rs +++ b/src/protocol/primitive/basic.rs @@ -33,7 +33,6 @@ use byteorder::{ByteOrder, BigEndian, ReadBytesExt}; use std::io::Read; use std::vec::Vec; -use std::net::TcpStream; use std::convert::TryInto; use crate::util; @@ -46,8 +45,8 @@ impl deserialize::Deserialize for bool { } impl qread::QRead for bool { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { - s.read(&mut [b[0]]).unwrap() + fn read(s: &mut T, b: &mut [u8]) -> usize { + s.read(&mut b[0..1]).unwrap() } } @@ -58,7 +57,7 @@ impl deserialize::Deserialize for u64 { } impl qread::QRead for u64 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..8]).unwrap() } } @@ -71,7 +70,7 @@ impl deserialize::Deserialize for u32 { } impl qread::QRead for u32 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..4]).unwrap() } } @@ -83,7 +82,7 @@ impl deserialize::Deserialize for u16 { } impl qread::QRead for u16 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..2]).unwrap() } } @@ -95,7 +94,7 @@ impl deserialize::Deserialize for u8 { } impl qread::QRead for u8 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut [b[0]]).unwrap() } } @@ -107,7 +106,7 @@ impl deserialize::Deserialize for i64 { } impl qread::QRead for i64 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..8]).unwrap() } } @@ -120,7 +119,7 @@ impl deserialize::Deserialize for i32 { } impl qread::QRead for i32 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..4]).unwrap() } } @@ -132,7 +131,7 @@ impl deserialize::Deserialize for i16 { } impl qread::QRead for i16 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..2]).unwrap() } } @@ -144,7 +143,7 @@ impl deserialize::Deserialize for i8 { } impl qread::QRead for i8 { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut [b[0]]).unwrap() } } @@ -207,7 +206,7 @@ impl deserialize::DeserializeUTF8 for String { } impl qread::QRead for String { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { use crate::protocol::primitive::deserialize::Deserialize; s.read(&mut b[0..4]).unwrap(); @@ -254,17 +253,17 @@ impl deserialize::Deserialize for StringList { } impl qread::QRead for StringList { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { use crate::protocol::primitive::deserialize::Deserialize; s.read(&mut b[0..4]).unwrap(); let (_, len) = i32::parse(&b[0..4]); - let mut pos: usize = 0; + let mut pos: usize = 4; for _ in 0..len { pos += String::read(s, &mut b[pos..]); } - return 4 + pos; + return pos; } } diff --git a/src/protocol/primitive/mod.rs b/src/protocol/primitive/mod.rs index 03c62bc..2cdd20a 100644 --- a/src/protocol/primitive/mod.rs +++ b/src/protocol/primitive/mod.rs @@ -25,6 +25,6 @@ pub mod deserialize { pub mod qread { pub trait QRead { - fn read(stream: &mut std::net::TcpStream, buf: &mut [u8]) -> usize; + fn read(stream: &mut T, buf: &mut [u8]) -> usize; } } diff --git a/src/protocol/primitive/variant.rs b/src/protocol/primitive/variant.rs index f868e9f..fdf93ad 100644 --- a/src/protocol/primitive/variant.rs +++ b/src/protocol/primitive/variant.rs @@ -3,8 +3,6 @@ use std::convert::TryInto; use std::collections::HashMap; use std::io::Read; -use std::net::TcpStream; - use crate::util; use crate::protocol::primitive::serialize::{Serialize, SerializeUTF8}; use crate::protocol::primitive::deserialize::{Deserialize, DeserializeUTF8}; @@ -33,19 +31,15 @@ impl Serialize for VariantMap { impl Deserialize for VariantMap { fn parse(b: &[u8]) -> (usize, Self) { let (_, len) = i32::parse(&b[0..4]); - println!("len: {:?}", len); let mut pos = 4; let mut map = VariantMap::new(); for _ in 0..len { - println!("pos: {:?}", pos); let (nlen, name) = String::parse(&b[(pos)..]); pos += nlen; - println!("pos: {:?}", pos); let (vlen, value) = Variant::parse(&b[(pos)..]); pos += vlen; - println!("pos: {:?}", pos); map.insert(name, value); } @@ -55,7 +49,7 @@ impl Deserialize for VariantMap { } impl QRead for VariantMap { - fn read(mut s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..4]).unwrap(); @@ -63,8 +57,8 @@ impl QRead for VariantMap { let mut pos = 4; for _ in 0..len { - pos += String::read(&mut s, &mut b[pos..]); - pos += Variant::read(&mut s, &mut b[(pos+3..)]); + pos += String::read(s, &mut b[pos..]); + pos += Variant::read(s, &mut b[(pos+3..)]); } return pos; @@ -105,14 +99,14 @@ impl Deserialize for VariantList { } impl QRead for VariantList { - fn read(mut s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..4]).unwrap(); let (_, len) = i32::parse(&b[0..4]); let mut pos = 4; for _ in 0..len { - pos += Variant::read(&mut s, &mut b[(pos+3..)]); + pos += Variant::read(s, &mut b[(pos+3..)]); } return pos; @@ -300,32 +294,30 @@ impl Deserialize for Variant { } impl QRead for Variant { - fn read(s: &mut TcpStream, b: &mut [u8]) -> usize { + fn read(s: &mut T, b: &mut [u8]) -> usize { s.read(&mut b[0..4]).unwrap(); let (_, qtype) = i32::parse(&b[0..4]); let qtype = qtype as u32; s.read(&mut [b[4]]).unwrap(); - #[allow(unused_variables)] - let unknown: u8 = b[4]; let mut len = 5; match qtype { - primitive::QVARIANTMAP => len += VariantMap::read(s, &mut b[5..]), - primitive::QVARIANTLIST => len += VariantList::read(s, &mut b[5..]), - primitive::QSTRING => len += String::read(s, &mut b[5..]), - primitive::QBYTEARRAY => len += String::read(s, &mut b[5..]), - primitive::QSTRINGLIST => len += StringList::read(s, &mut b[5..]), - primitive::BOOL => len += bool::read(s, &mut b[5..]), - primitive::ULONG => len += u64::read(s, &mut b[5..]), - primitive::UINT => len += u32::read(s, &mut b[5..]), - primitive::USHORT => len += u16::read(s, &mut b[5..]), - primitive::UCHAR => len += u8::read(s, &mut b[5..]), - primitive::LONG => len += i64::read(s, &mut b[5..]), - primitive::INT => len += i32::read(s, &mut b[5..]), - primitive::SHORT => len += i16::read(s, &mut b[5..]), - primitive::CHAR => len += i8::read(s, &mut b[5..]), + primitive::QVARIANTMAP => len += VariantMap::read(s, &mut b[len..]), + primitive::QVARIANTLIST => len += VariantList::read(s, &mut b[len..]), + primitive::QSTRING => len += String::read(s, &mut b[len..]), + primitive::QBYTEARRAY => len += String::read(s, &mut b[len..]), + primitive::QSTRINGLIST => len += StringList::read(s, &mut b[len..]), + primitive::BOOL => len += bool::read(s, &mut b[len..]), + primitive::ULONG => len += u64::read(s, &mut b[len..]), + primitive::UINT => len += u32::read(s, &mut b[len..]), + primitive::USHORT => len += u16::read(s, &mut b[len..]), + primitive::UCHAR => len += u8::read(s, &mut b[len..]), + primitive::LONG => len += i64::read(s, &mut b[len..]), + primitive::INT => len += i32::read(s, &mut b[len..]), + primitive::SHORT => len += i16::read(s, &mut b[len..]), + primitive::CHAR => len += i8::read(s, &mut b[len..]), _ => return len } -- cgit v1.2.3