dfir_rs/util/
socket.rs
1use tokio::net::UnixStream;
2use tokio::net::unix::{OwnedReadHalf, OwnedWriteHalf};
3use tokio_util::codec::{
4 BytesCodec, Decoder, FramedRead, FramedWrite, LengthDelimitedCodec, LinesCodec,
5};
6
7pub fn unix_framed<Codec>(
10 stream: UnixStream,
11 codec: Codec,
12) -> (
13 FramedWrite<OwnedWriteHalf, Codec>,
14 FramedRead<OwnedReadHalf, Codec>,
15)
16where
17 Codec: Clone + Decoder,
18{
19 let (recv, send) = stream.into_split();
20 let send = FramedWrite::new(send, codec.clone());
21 let recv = FramedRead::new(recv, codec);
22 (send, recv)
23}
24
25pub fn unix_bytes(
28 stream: UnixStream,
29) -> (
30 FramedWrite<OwnedWriteHalf, LengthDelimitedCodec>,
31 FramedRead<OwnedReadHalf, LengthDelimitedCodec>,
32) {
33 unix_framed(stream, LengthDelimitedCodec::new())
34}
35
36pub fn unix_bytestream(
38 stream: UnixStream,
39) -> (
40 FramedWrite<OwnedWriteHalf, BytesCodec>,
41 FramedRead<OwnedReadHalf, BytesCodec>,
42) {
43 unix_framed(stream, BytesCodec::new())
44}
45
46pub fn unix_lines(
48 stream: UnixStream,
49) -> (
50 FramedWrite<OwnedWriteHalf, LinesCodec>,
51 FramedRead<OwnedReadHalf, LinesCodec>,
52) {
53 unix_framed(stream, LinesCodec::new())
54}