Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
node: User smaller type to represent wire sizes
Alexis Sellier committed 3 years ago
commit 381080a5a5247837ae107aa29afde9b9cbf752e6
parent 79c89a239ad0b364fcfa2d072510f58e6e3fd0ce
2 files changed +11 -7
modified node/src/protocol/filter.rs
@@ -70,11 +70,10 @@ impl wire::Encode for Filter {

impl wire::Decode for Filter {
    fn decode<R: std::io::Read + ?Sized>(reader: &mut R) -> Result<Self, wire::Error> {
-
        let size: usize = wire::Decode::decode(reader)?;
-
        if size != FILTER_SIZE {
-
            return Err(wire::Error::InvalidFilterSize(size));
+
        let size: wire::Size = wire::Decode::decode(reader)?;
+
        if size as usize != FILTER_SIZE {
+
            return Err(wire::Error::InvalidFilterSize(size as usize));
        }
-

        let bytes: [u8; FILTER_SIZE] = wire::Decode::decode(reader)?;
        let bf = BloomFilter::from(Vec::from(bytes));

modified node/src/protocol/wire.rs
@@ -13,6 +13,11 @@ use crate::hash::Digest;
use crate::identity::Id;
use crate::storage::refs::Refs;

+
/// The default type we use to represent sizes.
+
/// Four bytes is more than enough for anything sent over the wire.
+
/// Note that in certain cases, we may use only one or two byte types.
+
pub type Size = u32;
+

#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error("i/o: {0}")]
@@ -147,7 +152,7 @@ where
    T: Encode,
{
    fn encode<W: io::Write + ?Sized>(&self, writer: &mut W) -> Result<usize, io::Error> {
-
        let mut n = self.len().encode(writer)?;
+
        let mut n = (self.len() as Size).encode(writer)?;

        for item in self.iter() {
            n += item.encode(writer)?;
@@ -324,8 +329,8 @@ where
    T: Decode,
{
    fn decode<R: io::Read + ?Sized>(reader: &mut R) -> Result<Self, Error> {
-
        let len: usize = usize::decode(reader)?;
-
        let mut vec = Vec::with_capacity(len);
+
        let len: Size = Size::decode(reader)?;
+
        let mut vec = Vec::with_capacity(len as usize);

        for _ in 0..len {
            let item = T::decode(reader)?;