Skip to content

Commit f8b14b8

Browse files
committed
refactor create_stream function
1 parent 8d56c39 commit f8b14b8

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/lib.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,13 @@ async fn process_device_read(
169169
}
170170
std::collections::hash_map::Entry::Vacant(entry) => {
171171
let (tx, rx) = tokio::sync::oneshot::channel::<()>();
172-
let (packet_sender, ip_stack_stream) = create_stream(packet, config, up_pkt_sender, Some(tx))?;
172+
let ip_stack_stream = create_stream(packet, config, up_pkt_sender, Some(tx))?;
173173
tokio::spawn(async move {
174174
rx.await.ok();
175175
sessions_clone.lock().await.remove(&network_tuple);
176176
log::debug!("session destroyed: {}", network_tuple);
177177
});
178+
let packet_sender = ip_stack_stream.stream_sender()?;
178179
accept_sender.send(ip_stack_stream)?;
179180
entry.insert(packet_sender);
180181
log::debug!("session created: {}", network_tuple);
@@ -188,18 +189,18 @@ fn create_stream(
188189
cfg: &IpStackConfig,
189190
up_pkt_sender: PacketSender,
190191
msgr: Option<::tokio::sync::oneshot::Sender<()>>,
191-
) -> Result<(PacketSender, IpStackStream)> {
192+
) -> Result<IpStackStream> {
192193
let src_addr = packet.src_addr();
193194
let dst_addr = packet.dst_addr();
194195
match packet.transport_header() {
195196
TransportHeader::Tcp(h) => {
196197
let stream = IpStackTcpStream::new(src_addr, dst_addr, h.clone(), up_pkt_sender, cfg.mtu, cfg.tcp_timeout, msgr)?;
197-
Ok((stream.stream_sender(), IpStackStream::Tcp(stream)))
198+
Ok(IpStackStream::Tcp(stream))
198199
}
199200
TransportHeader::Udp(_) => {
200201
let payload = packet.payload.unwrap_or_default();
201202
let stream = IpStackUdpStream::new(src_addr, dst_addr, payload, up_pkt_sender, cfg.mtu, cfg.udp_timeout, msgr);
202-
Ok((stream.stream_sender(), IpStackStream::Udp(stream)))
203+
Ok(IpStackStream::Udp(stream))
203204
}
204205
TransportHeader::Unknown => Err(IpStackError::UnsupportedTransportProtocol),
205206
}

src/stream/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,12 @@ impl IpStackStream {
4040
},
4141
}
4242
}
43+
44+
pub fn stream_sender(&self) -> Result<crate::PacketSender, std::io::Error> {
45+
match self {
46+
IpStackStream::Tcp(tcp) => Ok(tcp.stream_sender()),
47+
IpStackStream::Udp(udp) => Ok(udp.stream_sender()),
48+
_ => Err(std::io::Error::other("Unknown transport stream does not have a sender")),
49+
}
50+
}
4351
}

0 commit comments

Comments
 (0)