1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
2#[cfg_attr(feature = "safe_enums", derive(num_enum::FromPrimitive))]
3#[repr(u8)]
4pub enum Event {
5 None = 0,
6 Completed,
7 Started,
8 Stopped,
9 Paused,
10 #[cfg(feature = "safe_enums")]
11 #[num_enum(default)]
12 Unknown,
13}
14
15pub use crate::ffi::ffi::PieceIndex;
16
17impl PieceIndex {
18 pub fn new(value: i32) -> Self {
19 Self { inner: value }
20 }
21
22 pub fn to_inner(self) -> i32 {
23 self.inner
24 }
25}
26
27#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
28#[cfg_attr(feature = "safe_enums", derive(num_enum::FromPrimitive))]
29#[repr(u8)]
30pub enum SocketType {
31 Tcp = 0,
32 Socks5,
33 Http,
34 Utp,
35 I2p,
36 TcpSsl,
37 Socks5Ssl,
38 HttpSsl,
39 UtpSsl,
40 #[cfg(feature = "safe_enums")]
41 #[num_enum(default)]
42 Unknown,
43}
44
45#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
46#[cfg_attr(feature = "safe_enums", derive(num_enum::FromPrimitive))]
47#[repr(u8)]
48pub enum ConnectionType {
49 BitTorrent = 0,
50 UrlSeed,
51 HttpSeed,
52 #[cfg(feature = "safe_enums")]
53 #[num_enum(default)]
54 Unknown,
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
58#[cfg_attr(feature = "safe_enums", derive(num_enum::FromPrimitive))]
59#[repr(u8)]
60pub enum Direction {
61 In = 0,
62 Out,
63 #[cfg(feature = "safe_enums")]
64 #[num_enum(default)]
65 Unknown,
66}
67
68#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
72#[cfg_attr(feature = "safe_enums", derive(num_enum::FromPrimitive))]
73#[repr(u16)]
74pub enum CloseReason {
75 None = 0,
77 DuplicatePeerId,
79 TorrentRemoved,
81 NoMemory,
83 PortBlocked,
85 Blocked,
87 UploadToUpload,
90 NotInterestedUploadOnly,
93 Timeout,
95 TimedOutInterest,
98 TimedOutActivity,
100 TimedOutHandshake,
102 TimedOutRequest,
105 ProtocolBlocked,
107 PeerChurn,
110 TooManyConnections,
112 TooManyFiles,
114
115 EncryptionError = 256,
117 InvalidInfoHash,
119 SelfConnection,
120 InvalidMetadata,
124 MetadataTooBig,
126
127 MessageTooBig,
129 InvalidMessageId,
130 InvalidMessage,
131 InvalidPieceMessage,
132 InvalidHaveMessage,
133 InvalidBitfieldMessage,
134 InvalidChokeMessage,
135 InvalidUnchokeMessage,
136 InvalidInterestedMessage,
137 InvalidNotInterestedMessage,
138 InvalidRequestMessage,
139 InvalidRejectMessage,
140 InvalidAllowFastMessage,
141 InvalidExtendedMessage,
142 InvalidCancelMessage,
143 InvalidDhtPortMessage,
144 InvalidSuggestMessage,
145 InvalidHaveAllMessage,
146 InvalidDontHaveMessage,
147 InvalidHaveNoneMessage,
148 InvalidPexMessage,
149 InvalidMetadataRequestMessage,
150 InvalidMetadataMessage,
151 InvalidMetadataOffset,
152
153 RequestWhenChoked,
155
156 CorruptPieces,
158
159 PexMessageTooBig,
160 PexTooFrequent,
161
162 #[cfg(feature = "safe_enums")]
163 #[num_enum(default)]
164 Unknown,
165}
166
167impl CloseReason {
168 pub(crate) fn from_u16(value: u16) -> Self {
169 cfg_if::cfg_if! {
170 if #[cfg(feature = "safe_enums")] {
171 value.into()
172 } else {
173 unsafe { std::mem::transmute(value) }
174 }
175 }
176 }
177}
178
179pub use crate::ffi::ffi::PeerRequest;
180impl PartialEq for PeerRequest {
181 fn eq(&self, other: &Self) -> bool {
182 self.piece == other.piece && self.start == other.start && self.length == other.length
183 }
184}
185
186impl Direction {
187 pub(crate) fn from_u8(value: u8) -> Self {
188 cfg_if::cfg_if! {
189 if #[cfg(feature = "safe_enums")] {
190 value.into()
191 } else {
192 unsafe { std::mem::transmute(value) }
193 }
194 }
195 }
196}
197
198impl ConnectionType {
199 pub(crate) fn from_u8(value: u8) -> Self {
200 cfg_if::cfg_if! {
201 if #[cfg(feature = "safe_enums")] {
202 value.into()
203 } else {
204 unsafe { std::mem::transmute(value) }
205 }
206 }
207 }
208}
209
210impl SocketType {
211 pub(crate) fn from_u8(value: u8) -> Self {
212 cfg_if::cfg_if! {
213 if #[cfg(feature = "safe_enums")] {
214 value.into()
215 } else {
216 unsafe { std::mem::transmute(value) }
217 }
218 }
219 }
220}
221
222impl Event {
223 pub(crate) fn from_u8(value: u8) -> Self {
224 cfg_if::cfg_if! {
225 if #[cfg(feature = "safe_enums")] {
226 value.into()
227 } else {
228 unsafe { std::mem::transmute(value) }
229 }
230 }
231 }
232}