Skip to content
File

Blob: firmware/vendor/sctp-proto/src/chunk/chunk_shutdown_ack.rs

rust56 lines
1use super::{chunk_header::*, chunk_type::*, *};
2 
3///chunkShutdownAck represents an SCTP Chunk of type chunkShutdownAck
4///
5///0 1 2 3
6///0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
7///+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8///| Type = 8 | Chunk Flags | Length = 4 |
9///+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
10#[derive(Default, Debug, Clone)]
11pub(crate) struct ChunkShutdownAck;
12 
13/// makes chunkShutdownAck printable
14impl fmt::Display for ChunkShutdownAck {
15 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16 write!(f, "{}", self.header())
17 }
18}
19 
20impl Chunk for ChunkShutdownAck {
21 fn header(&self) -> ChunkHeader {
22 ChunkHeader {
23 typ: CT_SHUTDOWN_ACK,
24 flags: 0,
25 value_length: self.value_length() as u16,
26 }
27 }
28 
29 fn unmarshal(raw: &Bytes) -> Result<Self> {
30 let header = ChunkHeader::unmarshal(raw)?;
31 
32 if header.typ != CT_SHUTDOWN_ACK {
33 return Err(Error::ErrChunkTypeNotShutdownAck);
34 }
35 
36 Ok(ChunkShutdownAck {})
37 }
38 
39 fn marshal_to(&self, writer: &mut BytesMut) -> Result<usize> {
40 self.header().marshal_to(writer)?;
41 Ok(writer.len())
42 }
43 
44 fn check(&self) -> Result<()> {
45 Ok(())
46 }
47 
48 fn value_length(&self) -> usize {
49 0
50 }
51 
52 fn as_any(&self) -> &(dyn Any + Send + Sync) {
53 self
54 }
55}