Skip to content

Commit cbb0342

Browse files
committed
Make MessageGenerator infallible
The in-memory buffer cannot fail when serializing a message, and the encryption cannot fail when memory is know as well.
1 parent ce67d9c commit cbb0342

File tree

2 files changed

+41
-47
lines changed

2 files changed

+41
-47
lines changed

src/network/outbound_messages.rs

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,125 +18,119 @@ use bitcoin::{
1818

1919
use crate::default_port_from_network;
2020

21-
use super::{error::PeerError, KYOTO_VERSION, PROTOCOL_VERSION, RUST_BITCOIN_VERSION};
21+
use super::{KYOTO_VERSION, PROTOCOL_VERSION, RUST_BITCOIN_VERSION};
2222

2323
// Responsible for serializing messages to write over the wire, either encrypted or plaintext.
24-
pub(crate) struct MessageGenerator {
24+
pub(in crate::network) struct MessageGenerator {
2525
pub network: Network,
2626
pub transport: Transport,
2727
}
2828

29-
pub(crate) enum Transport {
29+
pub(in crate::network) enum Transport {
3030
V1,
3131
V2 { encryptor: PacketWriter },
3232
}
3333

3434
impl MessageGenerator {
35-
fn serialize(&mut self, msg: NetworkMessage) -> Result<Vec<u8>, PeerError> {
35+
pub(in crate::network) fn serialize(&mut self, msg: NetworkMessage) -> Vec<u8> {
3636
match &mut self.transport {
3737
Transport::V1 => {
3838
let data = RawNetworkMessage::new(self.network.magic(), msg);
39-
Ok(serialize(&data))
39+
serialize(&data)
4040
}
4141
Transport::V2 { encryptor } => {
42-
let plaintext = serialize_network_message(msg)?;
42+
let plaintext = serialize_network_message(msg);
4343
encrypt_plaintext(encryptor, plaintext)
4444
}
4545
}
4646
}
4747

48-
pub(crate) fn version_message(&mut self, port: Option<u16>) -> Result<Vec<u8>, PeerError> {
48+
pub(in crate::network) fn version_message(&mut self, port: Option<u16>) -> Vec<u8> {
4949
let msg = NetworkMessage::Version(make_version(port, &self.network));
5050
self.serialize(msg)
5151
}
5252

53-
pub(crate) fn verack(&mut self) -> Result<Vec<u8>, PeerError> {
53+
pub(in crate::network) fn verack(&mut self) -> Vec<u8> {
5454
let msg = NetworkMessage::Verack;
5555
self.serialize(msg)
5656
}
5757

58-
pub(crate) fn addr(&mut self) -> Result<Vec<u8>, PeerError> {
58+
pub(in crate::network) fn addr(&mut self) -> Vec<u8> {
5959
let msg = NetworkMessage::GetAddr;
6060
self.serialize(msg)
6161
}
6262

63-
pub(crate) fn addrv2(&mut self) -> Result<Vec<u8>, PeerError> {
63+
pub(in crate::network) fn addrv2(&mut self) -> Vec<u8> {
6464
let msg = NetworkMessage::SendAddrV2;
6565
self.serialize(msg)
6666
}
6767

68-
pub(crate) fn wtxid_relay(&mut self) -> Result<Vec<u8>, PeerError> {
68+
pub(in crate::network) fn wtxid_relay(&mut self) -> Vec<u8> {
6969
let msg = NetworkMessage::WtxidRelay;
7070
self.serialize(msg)
7171
}
7272

73-
pub(crate) fn sendheaders(&mut self) -> Result<Vec<u8>, PeerError> {
73+
pub(in crate::network) fn sendheaders(&mut self) -> Vec<u8> {
7474
let msg = NetworkMessage::SendHeaders;
7575
self.serialize(msg)
7676
}
7777

78-
pub(crate) fn headers(&mut self, msg: GetHeadersMessage) -> Result<Vec<u8>, PeerError> {
78+
pub(in crate::network) fn headers(&mut self, msg: GetHeadersMessage) -> Vec<u8> {
7979
let msg = NetworkMessage::GetHeaders(msg);
8080
self.serialize(msg)
8181
}
8282

83-
pub(crate) fn cf_headers(&mut self, message: GetCFHeaders) -> Result<Vec<u8>, PeerError> {
83+
pub(in crate::network) fn cf_headers(&mut self, message: GetCFHeaders) -> Vec<u8> {
8484
let msg = NetworkMessage::GetCFHeaders(message);
8585
self.serialize(msg)
8686
}
8787

88-
pub(crate) fn filters(&mut self, message: GetCFilters) -> Result<Vec<u8>, PeerError> {
88+
pub(in crate::network) fn filters(&mut self, message: GetCFilters) -> Vec<u8> {
8989
let msg = NetworkMessage::GetCFilters(message);
9090
self.serialize(msg)
9191
}
9292

93-
pub(crate) fn block(&mut self, hash: BlockHash) -> Result<Vec<u8>, PeerError> {
93+
pub(in crate::network) fn block(&mut self, hash: BlockHash) -> Vec<u8> {
9494
let inv = Inventory::Block(hash);
9595
let msg = NetworkMessage::GetData(vec![inv]);
9696
self.serialize(msg)
9797
}
9898

99-
pub(crate) fn ping(&mut self, nonce: u64) -> Result<Vec<u8>, PeerError> {
99+
pub(in crate::network) fn ping(&mut self, nonce: u64) -> Vec<u8> {
100100
let msg = NetworkMessage::Ping(nonce);
101101
self.serialize(msg)
102102
}
103103

104-
pub(crate) fn pong(&mut self, nonce: u64) -> Result<Vec<u8>, PeerError> {
104+
pub(in crate::network) fn pong(&mut self, nonce: u64) -> Vec<u8> {
105105
let msg = NetworkMessage::Pong(nonce);
106106
self.serialize(msg)
107107
}
108108

109-
pub(crate) fn announce_transactions(
110-
&mut self,
111-
wtxids: Vec<Wtxid>,
112-
) -> Result<Vec<u8>, PeerError> {
109+
pub(in crate::network) fn announce_transactions(&mut self, wtxids: Vec<Wtxid>) -> Vec<u8> {
113110
let msg = NetworkMessage::Inv(wtxids.into_iter().map(Inventory::WTx).collect());
114111
self.serialize(msg)
115112
}
116113

117-
pub(crate) fn broadcast_transaction(
114+
pub(in crate::network) fn broadcast_transaction(
118115
&mut self,
119116
transaction: Transaction,
120-
) -> Result<Vec<u8>, PeerError> {
117+
) -> Vec<u8> {
121118
let msg = NetworkMessage::Tx(transaction);
122119
self.serialize(msg)
123120
}
124121
}
125122

126-
fn serialize_network_message(message: NetworkMessage) -> Result<Vec<u8>, PeerError> {
127-
bip324::serde::serialize(message).map_err(From::from)
123+
fn serialize_network_message(message: NetworkMessage) -> Vec<u8> {
124+
bip324::serde::serialize(message).expect("in memory serialiation cannot fail.")
128125
}
129126

130-
fn encrypt_plaintext(
131-
encryptor: &mut PacketWriter,
132-
plaintext: Vec<u8>,
133-
) -> Result<Vec<u8>, PeerError> {
127+
fn encrypt_plaintext(encryptor: &mut PacketWriter, plaintext: Vec<u8>) -> Vec<u8> {
134128
encryptor
135129
.encrypt_packet(&plaintext, None, PacketType::Genuine)
136-
.map_err(From::from)
130+
.expect("encryption to in memory buffer cannot fail.")
137131
}
138132

139-
fn make_version(port: Option<u16>, network: &Network) -> VersionMessage {
133+
pub(in crate::network) fn make_version(port: Option<u16>, network: &Network) -> VersionMessage {
140134
let now = SystemTime::now()
141135
.duration_since(UNIX_EPOCH)
142136
.expect("time went backwards")

src/network/peer.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ impl Peer {
102102
(outbound_messages, reader)
103103
};
104104

105-
let message = outbound_messages.version_message(None)?;
105+
let message = outbound_messages.version_message(None);
106106
self.write_bytes(&mut writer, message).await?;
107107
self.message_state.start_version_handshake();
108108
let read_handle = tokio::spawn(async move { peer_reader.read_from_remote().await });
@@ -113,7 +113,7 @@ impl Peer {
113113
return Ok(());
114114
}
115115
if let Some(nonce) = self.message_state.ping_state.send_ping() {
116-
let msg = outbound_messages.ping(nonce)?;
116+
let msg = outbound_messages.ping(nonce);
117117
self.write_bytes(&mut writer, msg).await?;
118118
let msg_id = TimeSensitiveId::PING;
119119
self.message_state
@@ -261,7 +261,7 @@ impl Peer {
261261
for wtxid in requests {
262262
let transaction = tx_queue.fetch_tx(wtxid);
263263
if let Some(transaction) = transaction {
264-
let msg = message_generator.broadcast_transaction(transaction)?;
264+
let msg = message_generator.broadcast_transaction(transaction);
265265
self.write_bytes(writer, msg).await?;
266266
self.message_state.sent_tx(wtxid);
267267
tx_queue.successful(wtxid);
@@ -285,7 +285,7 @@ impl Peer {
285285
Ok(())
286286
}
287287
ReaderMessage::Ping(nonce) => {
288-
let message = message_generator.pong(nonce)?;
288+
let message = message_generator.pong(nonce);
289289
self.write_bytes(writer, message).await?;
290290
Ok(())
291291
}
@@ -333,38 +333,38 @@ impl Peer {
333333
}
334334
match request {
335335
MainThreadMessage::GetAddr => {
336-
let message = message_generator.addr()?;
336+
let message = message_generator.addr();
337337
self.write_bytes(writer, message).await?;
338338
}
339339
MainThreadMessage::GetAddrV2 => {
340-
let message = message_generator.addrv2()?;
340+
let message = message_generator.addrv2();
341341
self.write_bytes(writer, message).await?;
342342
}
343343
MainThreadMessage::WtxidRelay => {
344-
let message = message_generator.wtxid_relay()?;
344+
let message = message_generator.wtxid_relay();
345345
self.write_bytes(writer, message).await?;
346346
}
347347
MainThreadMessage::SendHeaders => {
348-
let message = message_generator.sendheaders()?;
348+
let message = message_generator.sendheaders();
349349
self.write_bytes(writer, message).await?;
350350
}
351351
MainThreadMessage::GetHeaders(config) => {
352-
let message = message_generator.headers(config)?;
352+
let message = message_generator.headers(config);
353353
self.write_bytes(writer, message).await?;
354354
}
355355
MainThreadMessage::GetFilterHeaders(config) => {
356-
let message = message_generator.cf_headers(config)?;
356+
let message = message_generator.cf_headers(config);
357357
self.write_bytes(writer, message).await?;
358358
}
359359
MainThreadMessage::GetFilters(config) => {
360360
self.message_state
361361
.filter_rate
362362
.batch_requested(config.stop_hash);
363-
let message = message_generator.filters(config)?;
363+
let message = message_generator.filters(config);
364364
self.write_bytes(writer, message).await?;
365365
}
366366
MainThreadMessage::GetBlock(message) => {
367-
let message = message_generator.block(message)?;
367+
let message = message_generator.block(message);
368368
self.write_bytes(writer, message).await?;
369369
}
370370
MainThreadMessage::BroadcastPending => {
@@ -377,12 +377,12 @@ impl Peer {
377377
queue.pending_wtxid()
378378
};
379379
if !wtxids.is_empty() {
380-
let message = message_generator.announce_transactions(wtxids)?;
380+
let message = message_generator.announce_transactions(wtxids);
381381
self.write_bytes(writer, message).await?;
382382
}
383383
}
384384
MainThreadMessage::Verack => {
385-
let message = message_generator.verack()?;
385+
let message = message_generator.verack();
386386
self.write_bytes(writer, message).await?;
387387
self.message_state.verack.sent_ack();
388388
if self.message_state.verack.both_acks() {
@@ -395,7 +395,7 @@ impl Peer {
395395
queue.pending_wtxid()
396396
};
397397
if !wtxids.is_empty() {
398-
let message = message_generator.announce_transactions(wtxids)?;
398+
let message = message_generator.announce_transactions(wtxids);
399399
self.write_bytes(writer, message).await?;
400400
}
401401
}

0 commit comments

Comments
 (0)