sctp_proto/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5/// Errors triggered during SCTP association operation
6#[derive(Debug, Error, Eq, Clone, PartialEq)]
7#[non_exhaustive]
8pub enum Error {
9    #[error("raw is too small for a SCTP chunk")]
10    ErrChunkHeaderTooSmall,
11    #[error("not enough data left in SCTP packet to satisfy requested length")]
12    ErrChunkHeaderNotEnoughSpace,
13    #[error("chunk PADDING is non-zero at offset")]
14    ErrChunkHeaderPaddingNonZero,
15    #[error("chunk has invalid length")]
16    ErrChunkHeaderInvalidLength,
17
18    #[error("ChunkType is not of type ABORT")]
19    ErrChunkTypeNotAbort,
20    #[error("failed build Abort Chunk")]
21    ErrBuildAbortChunkFailed,
22    #[error("ChunkType is not of type COOKIEACK")]
23    ErrChunkTypeNotCookieAck,
24    #[error("ChunkType is not of type COOKIEECHO")]
25    ErrChunkTypeNotCookieEcho,
26    #[error("ChunkType is not of type ctError")]
27    ErrChunkTypeNotCt,
28    #[error("failed build Error Chunk")]
29    ErrBuildErrorChunkFailed,
30    #[error("failed to marshal stream")]
31    ErrMarshalStreamFailed,
32    #[error("chunk too short")]
33    ErrChunkTooShort,
34    #[error("ChunkType is not of type ForwardTsn")]
35    ErrChunkTypeNotForwardTsn,
36    #[error("ChunkType is not of type HEARTBEAT")]
37    ErrChunkTypeNotHeartbeat,
38    #[error("ChunkType is not of type HEARTBEATACK")]
39    ErrChunkTypeNotHeartbeatAck,
40    #[error("heartbeat is not long enough to contain Heartbeat Info")]
41    ErrHeartbeatNotLongEnoughInfo,
42    #[error("failed to parse param type")]
43    ErrParseParamTypeFailed,
44    #[error("heartbeat should only have HEARTBEAT param")]
45    ErrHeartbeatParam,
46    #[error("failed unmarshalling param in Heartbeat Chunk")]
47    ErrHeartbeatChunkUnmarshal,
48    #[error("unimplemented")]
49    ErrUnimplemented,
50    #[error("heartbeat Ack must have one param")]
51    ErrHeartbeatAckParams,
52    #[error("heartbeat Ack must have one param, and it should be a HeartbeatInfo")]
53    ErrHeartbeatAckNotHeartbeatInfo,
54    #[error("unable to marshal parameter for Heartbeat Ack")]
55    ErrHeartbeatAckMarshalParam,
56
57    #[error("raw is too small for error cause")]
58    ErrErrorCauseTooSmall,
59
60    #[error("unhandled ParamType: {typ}")]
61    ErrParamTypeUnhandled { typ: u16 },
62
63    #[error("unexpected ParamType")]
64    ErrParamTypeUnexpected,
65
66    #[error("param header too short")]
67    ErrParamHeaderTooShort,
68    #[error("param self reported length is shorter than header length")]
69    ErrParamHeaderSelfReportedLengthShorter,
70    #[error("param self reported length is longer than header length")]
71    ErrParamHeaderSelfReportedLengthLonger,
72    #[error("failed to parse param type")]
73    ErrParamHeaderParseFailed,
74
75    #[error("packet to short")]
76    ErrParamPacketTooShort,
77    #[error("outgoing SSN reset request parameter too short")]
78    ErrSsnResetRequestParamTooShort,
79    #[error("reconfig response parameter too short")]
80    ErrReconfigRespParamTooShort,
81    #[error("invalid algorithm type")]
82    ErrInvalidAlgorithmType,
83
84    #[error("failed to parse param type")]
85    ErrInitChunkParseParamTypeFailed,
86    #[error("failed unmarshalling param in Init Chunk")]
87    ErrInitChunkUnmarshalParam,
88    #[error("unable to marshal parameter for INIT/INITACK")]
89    ErrInitAckMarshalParam,
90
91    #[error("ChunkType is not of type INIT")]
92    ErrChunkTypeNotTypeInit,
93    #[error("chunk Value isn't long enough for mandatory parameters exp")]
94    ErrChunkValueNotLongEnough,
95    #[error("ChunkType of type INIT flags must be all 0")]
96    ErrChunkTypeInitFlagZero,
97    #[error("failed to unmarshal INIT body")]
98    ErrChunkTypeInitUnmarshalFailed,
99    #[error("failed marshaling INIT common data")]
100    ErrChunkTypeInitMarshalFailed,
101    #[error("ChunkType of type INIT ACK InitiateTag must not be 0")]
102    ErrChunkTypeInitInitiateTagZero,
103    #[error("INIT ACK inbound stream request must be > 0")]
104    ErrInitInboundStreamRequestZero,
105    #[error("INIT ACK outbound stream request must be > 0")]
106    ErrInitOutboundStreamRequestZero,
107    #[error("INIT ACK Advertised Receiver Window Credit (a_rwnd) must be >= 1500")]
108    ErrInitAdvertisedReceiver1500,
109
110    #[error("packet is smaller than the header size")]
111    ErrChunkPayloadSmall,
112    #[error("ChunkType is not of type PayloadData")]
113    ErrChunkTypeNotPayloadData,
114    #[error("ChunkType is not of type Reconfig")]
115    ErrChunkTypeNotReconfig,
116    #[error("ChunkReconfig has invalid ParamA")]
117    ErrChunkReconfigInvalidParamA,
118
119    #[error("failed to parse param type")]
120    ErrChunkParseParamTypeFailed,
121    #[error("unable to marshal parameter A for reconfig")]
122    ErrChunkMarshalParamAReconfigFailed,
123    #[error("unable to marshal parameter B for reconfig")]
124    ErrChunkMarshalParamBReconfigFailed,
125
126    #[error("ChunkType is not of type SACK")]
127    ErrChunkTypeNotSack,
128    #[error("SACK Chunk size is not large enough to contain header")]
129    ErrSackSizeNotLargeEnoughInfo,
130
131    #[error("invalid chunk size")]
132    ErrInvalidChunkSize,
133    #[error("ChunkType is not of type SHUTDOWN")]
134    ErrChunkTypeNotShutdown,
135
136    #[error("ChunkType is not of type SHUTDOWN-ACK")]
137    ErrChunkTypeNotShutdownAck,
138    #[error("ChunkType is not of type SHUTDOWN-COMPLETE")]
139    ErrChunkTypeNotShutdownComplete,
140
141    #[error("raw is smaller than the minimum length for a SCTP packet")]
142    ErrPacketRawTooSmall,
143    #[error("unable to parse SCTP chunk, not enough data for complete header")]
144    ErrParseSctpChunkNotEnoughData,
145    #[error("failed to unmarshal, contains unknown chunk type")]
146    ErrUnmarshalUnknownChunkType,
147    #[error("checksum mismatch theirs")]
148    ErrChecksumMismatch,
149
150    #[error("unexpected chunk popped (unordered)")]
151    ErrUnexpectedChuckPoppedUnordered,
152    #[error("unexpected chunk popped (ordered)")]
153    ErrUnexpectedChuckPoppedOrdered,
154    #[error("unexpected q state (should've been selected)")]
155    ErrUnexpectedQState,
156    #[error("try again")]
157    ErrTryAgain,
158
159    #[error("abort chunk, with following errors: {0}")]
160    ErrAbortChunk(String),
161    #[error("shutdown called in non-Established state")]
162    ErrShutdownNonEstablished,
163    #[error("association closed before connecting")]
164    ErrAssociationClosedBeforeConn,
165    #[error("association init failed")]
166    ErrAssociationInitFailed,
167    #[error("association handshake closed")]
168    ErrAssociationHandshakeClosed,
169    #[error("silently discard")]
170    ErrSilentlyDiscard,
171    #[error("the init not stored to send")]
172    ErrInitNotStoredToSend,
173    #[error("cookieEcho not stored to send")]
174    ErrCookieEchoNotStoredToSend,
175    #[error("sctp packet must not have a source port of 0")]
176    ErrSctpPacketSourcePortZero,
177    #[error("sctp packet must not have a destination port of 0")]
178    ErrSctpPacketDestinationPortZero,
179    #[error("init chunk must not be bundled with any other chunk")]
180    ErrInitChunkBundled,
181    #[error("init chunk expects a verification tag of 0 on the packet when out-of-the-blue")]
182    ErrInitChunkVerifyTagNotZero,
183    #[error("todo: handle Init when in state")]
184    ErrHandleInitState,
185    #[error("no cookie in InitAck")]
186    ErrInitAckNoCookie,
187    #[error("there already exists a stream with identifier")]
188    ErrStreamAlreadyExist,
189    #[error("Failed to create a stream with identifier")]
190    ErrStreamCreateFailed,
191    #[error("unable to be popped from inflight queue TSN")]
192    ErrInflightQueueTsnPop,
193    #[error("requested non-existent TSN")]
194    ErrTsnRequestNotExist,
195    #[error("sending reset packet in non-Established state")]
196    ErrResetPacketInStateNotExist,
197    #[error("unexpected parameter type")]
198    ErrParameterType,
199    #[error("sending payload data in non-Established state")]
200    ErrPayloadDataStateNotExist,
201    #[error("unhandled chunk type")]
202    ErrChunkTypeUnhandled,
203    #[error("handshake failed (INIT ACK)")]
204    ErrHandshakeInitAck,
205    #[error("handshake failed (COOKIE ECHO)")]
206    ErrHandshakeCookieEcho,
207
208    #[error("outbound packet larger than maximum message size")]
209    ErrOutboundPacketTooLarge,
210    #[error("Stream closed")]
211    ErrStreamClosed,
212    #[error("Stream not existed")]
213    ErrStreamNotExisted,
214    #[error("Short buffer to be filled")]
215    ErrShortBuffer,
216    #[error("Io EOF")]
217    ErrEof,
218    #[error("Invalid SystemTime")]
219    ErrInvalidSystemTime,
220    #[error("Net Conn read error")]
221    ErrNetConnRead,
222    #[error("Max Data Channel ID")]
223    ErrMaxDataChannelID,
224
225    #[error("{0}")]
226    Other(String),
227}