dust_devil_core/sandstorm/
socks5_sockets.rs1use std::{io::Error, net::SocketAddr};
2
3use tokio::io::{AsyncRead, AsyncWrite};
4
5use crate::serialize::{ByteRead, ByteWrite};
6
7use super::{RemoveSocketResponse, SandstormCommandType};
8
9pub struct ListSocks5SocketsRequest;
11
12pub struct ListSocks5SocketsResponse(
14 pub Vec<SocketAddr>,
16);
17
18pub struct ListSocks5SocketsResponseRef<'a>(
20 &'a [SocketAddr],
22);
23
24impl ListSocks5SocketsResponse {
25 pub fn as_ref(&self) -> ListSocks5SocketsResponseRef {
26 ListSocks5SocketsResponseRef(&self.0)
27 }
28}
29
30impl ByteRead for ListSocks5SocketsRequest {
31 async fn read<R: AsyncRead + Unpin + ?Sized>(_reader: &mut R) -> Result<Self, Error> {
32 Ok(Self)
33 }
34}
35
36impl ByteWrite for ListSocks5SocketsRequest {
37 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
38 SandstormCommandType::ListSocks5Sockets.write(writer).await
39 }
40}
41
42impl ByteRead for ListSocks5SocketsResponse {
43 async fn read<R: AsyncRead + Unpin + ?Sized>(reader: &mut R) -> Result<Self, Error> {
44 Ok(Self(<Vec<SocketAddr> as ByteRead>::read(reader).await?))
45 }
46}
47
48impl ByteWrite for ListSocks5SocketsResponse {
49 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
50 self.as_ref().write(writer).await
51 }
52}
53
54impl<'a> ByteWrite for ListSocks5SocketsResponseRef<'a> {
55 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
56 (SandstormCommandType::ListSocks5Sockets, self.0).write(writer).await
57 }
58}
59
60pub struct AddSocks5SocketRequest(
62 pub SocketAddr,
64);
65
66pub struct AddSocks5SocketResponse(
68 pub Result<(), Error>,
70);
71
72pub struct AddSocks5SocketResponseRef<'a>(
74 pub Result<(), &'a Error>,
76);
77
78impl AddSocks5SocketResponse {
79 pub fn as_ref(&self) -> AddSocks5SocketResponseRef {
80 AddSocks5SocketResponseRef(self.0.as_ref().map(|_| ()))
81 }
82}
83
84impl ByteRead for AddSocks5SocketRequest {
85 async fn read<R: AsyncRead + Unpin + ?Sized>(reader: &mut R) -> Result<Self, Error> {
86 Ok(Self(SocketAddr::read(reader).await?))
87 }
88}
89
90impl ByteWrite for AddSocks5SocketRequest {
91 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
92 (SandstormCommandType::AddSocks5Socket, &self.0).write(writer).await
93 }
94}
95
96impl ByteRead for AddSocks5SocketResponse {
97 async fn read<R: AsyncRead + Unpin + ?Sized>(reader: &mut R) -> Result<Self, Error> {
98 Ok(Self(<Result<(), Error> as ByteRead>::read(reader).await?))
99 }
100}
101
102impl ByteWrite for AddSocks5SocketResponse {
103 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
104 self.as_ref().write(writer).await
105 }
106}
107
108impl<'a> ByteWrite for AddSocks5SocketResponseRef<'a> {
109 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
110 (SandstormCommandType::AddSocks5Socket, self.0).write(writer).await
111 }
112}
113
114pub struct RemoveSocks5SocketRequest(
116 pub SocketAddr,
118);
119
120pub struct RemoveSocks5SocketResponse(
122 pub RemoveSocketResponse,
124);
125
126impl ByteRead for RemoveSocks5SocketRequest {
127 async fn read<R: AsyncRead + Unpin + ?Sized>(reader: &mut R) -> Result<Self, Error> {
128 Ok(Self(SocketAddr::read(reader).await?))
129 }
130}
131
132impl ByteWrite for RemoveSocks5SocketRequest {
133 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
134 (SandstormCommandType::RemoveSocks5Socket, &self.0).write(writer).await
135 }
136}
137
138impl ByteRead for RemoveSocks5SocketResponse {
139 async fn read<R: AsyncRead + Unpin + ?Sized>(reader: &mut R) -> Result<Self, Error> {
140 Ok(Self(RemoveSocketResponse::read(reader).await?))
141 }
142}
143
144impl ByteWrite for RemoveSocks5SocketResponse {
145 async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
146 (SandstormCommandType::RemoveSocks5Socket, &self.0).write(writer).await
147 }
148}