Skip to content

Commit

Permalink
Fix improper error management
Browse files Browse the repository at this point in the history
  • Loading branch information
SajjadPourali committed Apr 9, 2024
1 parent 44e0f47 commit fe10c17
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ where
&mut streams,
&pkt_sender,
&config,
)? {
) {
accept_sender.send(stream)?;
}
}
Expand All @@ -153,13 +153,13 @@ fn process_read(
streams: &mut AHashMap<NetworkTuple, UnboundedSender<NetworkPacket>>,
pkt_sender: &UnboundedSender<NetworkPacket>,
config: &IpStackConfig,
) -> Result<Option<IpStackStream>> {
) -> Option<IpStackStream> {
let Ok(packet) = NetworkPacket::parse(data) else {
return Ok(Some(IpStackStream::UnknownNetwork(data.to_owned())));
return Some(IpStackStream::UnknownNetwork(data.to_owned()));
};

if let IpStackPacketProtocol::Unknown = packet.transport_protocol() {
return Ok(Some(IpStackStream::UnknownTransport(
return Some(IpStackStream::UnknownTransport(
IpStackUnknownTransport::new(
packet.src_addr().ip(),
packet.dst_addr().ip(),
Expand All @@ -168,33 +168,33 @@ fn process_read(
config.mtu,
pkt_sender.clone(),
),
)));
));
}

Ok(match streams.entry(packet.network_tuple()) {
match streams.entry(packet.network_tuple()) {
Occupied(mut entry) => {
if let Err(e) = entry.get().send(packet) {
trace!("New stream because: {}", e);
create_stream(e.0, config, pkt_sender)?.map(|s| {
create_stream(e.0, config, pkt_sender).map(|s| {
entry.insert(s.0);
s.1
})
} else {
None
}
}
Vacant(entry) => create_stream(packet, config, pkt_sender)?.map(|s| {
Vacant(entry) => create_stream(packet, config, pkt_sender).map(|s| {
entry.insert(s.0);
s.1
}),
})
}
}

fn create_stream(
packet: NetworkPacket,
config: &IpStackConfig,
pkt_sender: &UnboundedSender<NetworkPacket>,
) -> Result<Option<(UnboundedSender<NetworkPacket>, IpStackStream)>> {
) -> Option<(UnboundedSender<NetworkPacket>, IpStackStream)> {
match packet.transport_protocol() {
IpStackPacketProtocol::Tcp(h) => {
match IpStackTcpStream::new(
Expand All @@ -205,15 +205,14 @@ fn create_stream(
config.mtu,
config.tcp_timeout,
) {
Ok(stream) => Ok(Some((stream.stream_sender(), IpStackStream::Tcp(stream)))),
Ok(stream) => Some((stream.stream_sender(), IpStackStream::Tcp(stream))),
Err(e) => {
if matches!(e, IpStackError::InvalidTcpPacket) {
trace!("Invalid TCP packet");
Ok(None)
} else {
error!("IpStackTcpStream::new failed \"{}\"", e);
Err(e)
}
None
}
}
}
Expand All @@ -226,7 +225,7 @@ fn create_stream(
config.mtu,
config.udp_timeout,
);
Ok(Some((stream.stream_sender(), IpStackStream::Udp(stream))))
Some((stream.stream_sender(), IpStackStream::Udp(stream)))
}
IpStackPacketProtocol::Unknown => {
unreachable!()
Expand Down

0 comments on commit fe10c17

Please sign in to comment.