Pass body_len to read_filterload instead of calculating it ourself
This lets us still be generic over the reader trait and we aren't recomputing again. Co-Authored-By: Henry de Valence <hdevalence@hdevalence.ca>
This commit is contained in:
parent
3fbfffeb44
commit
cbd95dfc1f
|
@ -1,6 +1,5 @@
|
||||||
//! A Tokio codec mapping byte streams to Bitcoin message streams.
|
//! A Tokio codec mapping byte streams to Bitcoin message streams.
|
||||||
|
|
||||||
use std::convert::TryInto;
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io::{Cursor, Read, Write};
|
use std::io::{Cursor, Read, Write};
|
||||||
|
|
||||||
|
@ -415,7 +414,7 @@ impl Decoder for Codec {
|
||||||
b"notfound\0\0\0\0" => self.read_notfound(body_reader),
|
b"notfound\0\0\0\0" => self.read_notfound(body_reader),
|
||||||
b"tx\0\0\0\0\0\0\0\0\0\0" => self.read_tx(body_reader),
|
b"tx\0\0\0\0\0\0\0\0\0\0" => self.read_tx(body_reader),
|
||||||
b"mempool\0\0\0\0\0" => self.read_mempool(body_reader),
|
b"mempool\0\0\0\0\0" => self.read_mempool(body_reader),
|
||||||
b"filterload\0\0" => self.read_filterload(body_reader),
|
b"filterload\0\0" => self.read_filterload(body_reader, body_len),
|
||||||
b"filteradd\0\0\0" => self.read_filteradd(body_reader),
|
b"filteradd\0\0\0" => self.read_filteradd(body_reader),
|
||||||
b"filterclear\0" => self.read_filterclear(body_reader),
|
b"filterclear\0" => self.read_filterclear(body_reader),
|
||||||
_ => return Err(Parse("unknown command")),
|
_ => return Err(Parse("unknown command")),
|
||||||
|
@ -599,13 +598,11 @@ impl Codec {
|
||||||
Ok(Message::Mempool)
|
Ok(Message::Mempool)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_filterload(&self, mut reader: Cursor<&BytesMut>) -> Result<Message, Error> {
|
fn read_filterload<R: Read>(&self, mut reader: R, body_len: usize) -> Result<Message, Error> {
|
||||||
const MAX_FILTER_LENGTH: usize = 36000;
|
const MAX_FILTER_LENGTH: usize = 36000;
|
||||||
const FILTERLOAD_REMAINDER_LENGTH: usize = 4 + 4 + 1;
|
const FILTERLOAD_REMAINDER_LENGTH: usize = 4 + 4 + 1;
|
||||||
|
|
||||||
let filter_length: usize = (reader.get_ref().len() - FILTERLOAD_REMAINDER_LENGTH)
|
let filter_length: usize = body_len - FILTERLOAD_REMAINDER_LENGTH;
|
||||||
.try_into()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let mut filter_bytes = vec![0; std::cmp::min(filter_length, MAX_FILTER_LENGTH)];
|
let mut filter_bytes = vec![0; std::cmp::min(filter_length, MAX_FILTER_LENGTH)];
|
||||||
reader.read_exact(&mut filter_bytes)?;
|
reader.read_exact(&mut filter_bytes)?;
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
use hex;
|
use hex;
|
||||||
use std::{
|
use std::fmt;
|
||||||
fmt,
|
|
||||||
io::{Read, Write},
|
|
||||||
};
|
|
||||||
|
|
||||||
use zebra_chain::serialization::{SerializationError, ZcashDeserialize, ZcashSerialize};
|
|
||||||
|
|
||||||
/// A magic number identifying the network.
|
/// A magic number identifying the network.
|
||||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
#[derive(Copy, Clone, Eq, PartialEq)]
|
||||||
|
|
Loading…
Reference in New Issue