webrtc/net/dcsctp
Victor Boivie b847a43488 dcsctp: Reset synchronously with incoming request
When a sender has requested a stream to be reset, and the last sender
assigned TSN hasn't been received yet, the receiver will enter deferred
reset mode, where it will store any data chunks received after that
given TSN, and replay those later, when the stream has been reset.

Before this CL, leaving deferred mode was done as soon as the sender's
last assigned TSN was received. That's actually not how the RFC
describes the process[1], but was done that way to properly handle some
sequences of RE-CONFIG and FORWARD-TSN. But after having read the RFCs
again, and realizing that whenever RFC6525 mention "any data arriving",
this also applies to any FORWARD-TSN[2] - it's better to reset streams
synchronously with the incoming requests, and defer not just DATA past
the sender last assigned TSN, but also any FORWARD-TSN after that TSN.

This mostly simplifies the code and is mostly a refactoring, but most
importantly aligns it with how the resetting procedure is explained in
the RFC. It also fixes two bugs:

 * It defers FORWARD-TSN *as well as* DATA chunks with a TSN later
   than the sender's last assigned TSN - see test case. The old
   implementation tried to handle that by exiting the deferred reset
   processing as soon as it reached the sender's last assigned TSN, but
   it didn't manage to do that in all cases.
 * It only defers DATA chunks for streams that are to be reset, not
   all DATA chunks with a TSN > sender's last assigned TSN. This was
   missed in the old implementation, but as it's now implemented
   strictly according to the RFC, this was now done.

[1] https://datatracker.ietf.org/doc/html/rfc6525#section-5.2.2
[2] RFC6525 cover stream resetting, and RFC3758 cover FORWARD-TSN, and
    the combination of these is not covered in the RFCs.

Bug: webrtc:14600
Change-Id: Ief878b755291b9c923aa6fb4317b0f5c00231df4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/322623
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40889}
2023-10-09 09:47:57 +00:00
..
common dcsctp: Abandon correct message on stream reset 2023-10-06 10:48:33 +00:00
fuzzers dcsctp: Generate lifecycle events 2022-07-06 08:04:15 +00:00
packet dcsctp: Rename message_id to mid 2023-10-05 18:48:21 +00:00
public dcsctp: Exit deferred stream reset on FORWARD-TSN 2023-09-26 07:30:24 +00:00
rx dcsctp: Reset synchronously with incoming request 2023-10-09 09:47:57 +00:00
socket dcsctp: Reset synchronously with incoming request 2023-10-09 09:47:57 +00:00
testing dcsctp: Rename message_id to mid 2023-10-05 18:48:21 +00:00
timer dcsctp: Exit deferred stream reset on FORWARD-TSN 2023-09-26 07:30:24 +00:00
tx dcsctp: Abandon correct message on stream reset 2023-10-06 10:48:33 +00:00
BUILD.gn dcsctp: Add socket fuzzer helper 2021-05-12 15:06:17 +00:00
OWNERS dcsctp: Add OWNERS file 2021-04-20 10:42:58 +00:00