From 8f671165281024d5bfd311c5a2ea8690a3acea83 Mon Sep 17 00:00:00 2001 From: hhrsscc <52614963+hhrsscc@users.noreply.github.com> Date: Thu, 1 Jun 2023 20:30:50 +0800 Subject: [PATCH 1/4] fix: ignore ForwardTsnSupp when it is the last param --- sctp/src/chunk/chunk_init.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sctp/src/chunk/chunk_init.rs b/sctp/src/chunk/chunk_init.rs index 1a7084d67..e79f71079 100644 --- a/sctp/src/chunk/chunk_init.rs +++ b/sctp/src/chunk/chunk_init.rs @@ -169,7 +169,7 @@ impl Chunk for ChunkInit { let mut params = vec![]; let mut offset = CHUNK_HEADER_SIZE + INIT_CHUNK_MIN_LENGTH; let mut remaining = raw.len() as isize - offset as isize; - while remaining > INIT_OPTIONAL_VAR_HEADER_LENGTH as isize { + while remaining >= INIT_OPTIONAL_VAR_HEADER_LENGTH as isize { let p = build_param(&raw.slice(offset..CHUNK_HEADER_SIZE + header.value_length()))?; let p_len = PARAM_HEADER_LENGTH + p.value_length(); let len_plus_padding = p_len + get_padding_size(p_len); From 791e54f55632441721c19c0736f13a8f96b84d74 Mon Sep 17 00:00:00 2001 From: hhrsscc <52614963+hhrsscc@users.noreply.github.com> Date: Thu, 1 Jun 2023 20:36:55 +0800 Subject: [PATCH 2/4] fix: use forward tsn if matches ParamForwardTsnSupported --- sctp/src/association/association_internal.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sctp/src/association/association_internal.rs b/sctp/src/association/association_internal.rs index 9f8b38fea..fdf520b41 100644 --- a/sctp/src/association/association_internal.rs +++ b/sctp/src/association/association_internal.rs @@ -3,6 +3,7 @@ mod association_internal_test; use super::*; +use crate::param::param_forward_tsn_supported::ParamForwardTsnSupported; use crate::param::param_type::ParamType; use crate::param::param_unrecognized::ParamUnrecognized; use async_trait::async_trait; @@ -769,6 +770,8 @@ impl AssociationInternal { self.use_forward_tsn = true; } } + } else if let Some(_) = param.as_any().downcast_ref::() { + self.use_forward_tsn = true; } } if !self.use_forward_tsn { From a2011d28467115bb25e3fda19867a96b9a940d2a Mon Sep 17 00:00:00 2001 From: yngrtc <105481434+yngrtc@users.noreply.github.com> Date: Sun, 4 Jun 2023 09:51:39 -0700 Subject: [PATCH 3/4] Update association_internal.rs --- sctp/src/association/association_internal.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sctp/src/association/association_internal.rs b/sctp/src/association/association_internal.rs index fdf520b41..00b62f239 100644 --- a/sctp/src/association/association_internal.rs +++ b/sctp/src/association/association_internal.rs @@ -770,7 +770,7 @@ impl AssociationInternal { self.use_forward_tsn = true; } } - } else if let Some(_) = param.as_any().downcast_ref::() { + } else if param.as_any().downcast_ref::().is_some() { self.use_forward_tsn = true; } } From 4e6ffc6cf43e30aa37ff5995424432a0d987f2e9 Mon Sep 17 00:00:00 2001 From: yngrtc <105481434+yngrtc@users.noreply.github.com> Date: Sun, 4 Jun 2023 10:00:51 -0700 Subject: [PATCH 4/4] Update association_internal.rs --- sctp/src/association/association_internal.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sctp/src/association/association_internal.rs b/sctp/src/association/association_internal.rs index 00b62f239..8d7261f54 100644 --- a/sctp/src/association/association_internal.rs +++ b/sctp/src/association/association_internal.rs @@ -770,7 +770,11 @@ impl AssociationInternal { self.use_forward_tsn = true; } } - } else if param.as_any().downcast_ref::().is_some() { + } else if param + .as_any() + .downcast_ref::() + .is_some() + { self.use_forward_tsn = true; } }