Skip to content

Commit bc5f9bb

Browse files
committed
Fix peer_handler message serialization
Fixes a bug introduced in 3e89106 where messages were being encoded with their size instead of their type. Also utilizes the new size_hinting in peer_handler
1 parent 93891e9 commit bc5f9bb

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/ln/peer_handler.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use secp256k1::key::{SecretKey,PublicKey};
22

33
use ln::msgs;
4-
use util::ser::{Writeable, Readable};
4+
use util::ser::{Writeable, Writer, Readable};
55
use ln::peer_channel_encryptor::{PeerChannelEncryptor,NextNoiseStep};
66
use util::byte_utils;
77
use util::events::{EventsProvider,Event};
@@ -112,15 +112,23 @@ pub struct PeerManager<Descriptor: SocketDescriptor> {
112112
logger: Arc<Logger>,
113113
}
114114

115+
struct VecWriter(Vec<u8>);
116+
impl Writer for VecWriter {
117+
fn write_all(&mut self, buf: &[u8]) -> Result<(), ::std::io::Error> {
118+
self.0.extend_from_slice(buf);
119+
Ok(())
120+
}
121+
fn size_hint(&mut self, size: usize) {
122+
self.0.reserve_exact(size);
123+
}
124+
}
125+
115126
macro_rules! encode_msg {
116127
($msg: expr, $msg_code: expr) => {{
117-
let mut w = ::std::io::Cursor::new(vec![]);
118-
0u16.write(&mut w).unwrap();
119-
$msg.write(&mut w).unwrap();
120-
let mut msg = w.into_inner();
121-
let len = msg.len();
122-
msg[..2].copy_from_slice(&byte_utils::be16_to_array(len as u16 - 2));
123-
msg
128+
let mut msg = VecWriter(Vec::new());
129+
($msg_code as u16).write(&mut msg).unwrap();
130+
$msg.write(&mut msg).unwrap();
131+
msg.0
124132
}}
125133
}
126134

0 commit comments

Comments
 (0)