From 6dd9a4e89e9ec446901cec2063e4d4735b260f6a Mon Sep 17 00:00:00 2001 From: Paulo Morgado <470455+paulomorgado@users.noreply.github.com> Date: Mon, 1 Jun 2026 15:19:35 +0100 Subject: [PATCH 1/3] Refactor switch cases and improve string formatting Refactored switch-case statements in RTCPFeedback.cs to use the Header property directly for pattern matching, enhancing clarity. Updated exception message in RTCPHeader.cs to use string interpolation. Simplified ToString() in RTCPTWCCFeedback.cs to use a single interpolated string for better readability. --- src/SIPSorcery/net/RTCP/RTCPFeedback.cs | 16 ++++++++-------- src/SIPSorcery/net/RTCP/RTCPHeader.cs | 2 +- src/SIPSorcery/net/RTCP/RTCPTWCCFeedback.cs | 4 +--- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/SIPSorcery/net/RTCP/RTCPFeedback.cs b/src/SIPSorcery/net/RTCP/RTCPFeedback.cs index ba598d29f2..8f6542705f 100644 --- a/src/SIPSorcery/net/RTCP/RTCPFeedback.cs +++ b/src/SIPSorcery/net/RTCP/RTCPFeedback.cs @@ -172,23 +172,23 @@ public RTCPFeedback(byte[] packet) switch (Header) { - case var x when x.PacketType == RTCPReportTypesEnum.RTPFB && x.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: + case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB && Header.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: SENDER_PAYLOAD_SIZE = 8; // PLI feedback reports do no have any additional parameters. break; - case var x when x.PacketType == RTCPReportTypesEnum.RTPFB: + case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB: SENDER_PAYLOAD_SIZE = 12; PID = BinaryPrimitives.ReadUInt16BigEndian(packet.AsSpan(payloadIndex + 8)); BLP = BinaryPrimitives.ReadUInt16BigEndian(packet.AsSpan(payloadIndex + 10)); break; - case var x when x.PacketType == RTCPReportTypesEnum.PSFB && x.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: + case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: SENDER_PAYLOAD_SIZE = 8; break; // We have a lot of different kind of extension messages // In case below we will handle the specific REMB Message https://datatracker.ietf.org/doc/html/draft-alvestrand-rmcat-remb-03#page-3 - case var x when x.PacketType == RTCPReportTypesEnum.PSFB && x.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: + case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: // 0 1 2 3 // 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 @@ -267,17 +267,17 @@ public byte[] GetBytes() switch (Header) { - case var x when x.PacketType == RTCPReportTypesEnum.RTPFB && x.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: + case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB && Header.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: // PLI feedback reports do no have any additional parameters. break; - case var x when x.PacketType == RTCPReportTypesEnum.RTPFB: + case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB: BinaryPrimitives.WriteUInt16BigEndian(buffer.AsSpan(payloadIndex + 8), PID); BinaryPrimitives.WriteUInt16BigEndian(buffer.AsSpan(payloadIndex + 10), BLP); break; - case var x when x.PacketType == RTCPReportTypesEnum.PSFB && x.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: + case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: break; - case var x when x.PacketType == RTCPReportTypesEnum.PSFB && x.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: + case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: // There's have a lot of different kind of extension messages // In case below we will handle the specific REMB Message https://datatracker.ietf.org/doc/html/draft-alvestrand-rmcat-remb-03#page-3 diff --git a/src/SIPSorcery/net/RTCP/RTCPHeader.cs b/src/SIPSorcery/net/RTCP/RTCPHeader.cs index ec59cfa53c..9ea82cbef9 100644 --- a/src/SIPSorcery/net/RTCP/RTCPHeader.cs +++ b/src/SIPSorcery/net/RTCP/RTCPHeader.cs @@ -177,7 +177,7 @@ public byte[] GetHeader(int receptionReportCount, UInt16 length) { if (receptionReportCount > MAX_RECEPTIONREPORT_COUNT) { - throw new ApplicationException("The Reception Report Count value cannot be larger than " + MAX_RECEPTIONREPORT_COUNT + "."); + throw new ApplicationException($"The Reception Report Count value cannot be larger than {MAX_RECEPTIONREPORT_COUNT}."); } ReceptionReportCount = receptionReportCount; diff --git a/src/SIPSorcery/net/RTCP/RTCPTWCCFeedback.cs b/src/SIPSorcery/net/RTCP/RTCPTWCCFeedback.cs index 319f8e1449..26be2150bd 100644 --- a/src/SIPSorcery/net/RTCP/RTCPTWCCFeedback.cs +++ b/src/SIPSorcery/net/RTCP/RTCPTWCCFeedback.cs @@ -524,9 +524,7 @@ public override string ToString() var packetStatusInfo = string.Join(", ", PacketStatuses.Select(ps => $"Seq:{ps.SequenceNumber}({ps.Status}{(ps.Delta.HasValue ? $",Δ:{ps.Delta.Value}" : "")})")); - return $"TWCC Feedback: SenderSSRC={SenderSSRC}, MediaSSRC={MediaSSRC}, BaseSeq={BaseSequenceNumber}, " + - $"StatusCount={PacketStatusCount}, RefTime={ReferenceTime} (1/64 sec), " + - $"FbkPktCount={FeedbackPacketCount}, PacketStatuses=[{packetStatusInfo}]"; + return $"TWCC Feedback: SenderSSRC={SenderSSRC}, MediaSSRC={MediaSSRC}, BaseSeq={BaseSequenceNumber}, StatusCount={PacketStatusCount}, RefTime={ReferenceTime} (1/64 sec), FbkPktCount={FeedbackPacketCount}, PacketStatuses=[{packetStatusInfo}]"; } #region Helper Methods From cea31a0160ed32c2981c7e7f4ce7f1a402293eab Mon Sep 17 00:00:00 2001 From: Paulo Morgado <470455+paulomorgado@users.noreply.github.com> Date: Mon, 1 Jun 2026 16:27:11 +0100 Subject: [PATCH 2/3] Refactor switch pattern variable in RTCPFeedback.cs Renamed the pattern variable in switch cases from '_' to 'h' to improve readability and allow direct access to the matched object. No logic changes were made. --- src/SIPSorcery/net/RTCP/RTCPFeedback.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/SIPSorcery/net/RTCP/RTCPFeedback.cs b/src/SIPSorcery/net/RTCP/RTCPFeedback.cs index 8f6542705f..0af7b8f03b 100644 --- a/src/SIPSorcery/net/RTCP/RTCPFeedback.cs +++ b/src/SIPSorcery/net/RTCP/RTCPFeedback.cs @@ -172,23 +172,23 @@ public RTCPFeedback(byte[] packet) switch (Header) { - case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB && Header.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: + case var h when h.PacketType == RTCPReportTypesEnum.RTPFB && h.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: SENDER_PAYLOAD_SIZE = 8; // PLI feedback reports do no have any additional parameters. break; - case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB: + case var h when h.PacketType == RTCPReportTypesEnum.RTPFB: SENDER_PAYLOAD_SIZE = 12; PID = BinaryPrimitives.ReadUInt16BigEndian(packet.AsSpan(payloadIndex + 8)); BLP = BinaryPrimitives.ReadUInt16BigEndian(packet.AsSpan(payloadIndex + 10)); break; - case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: + case var h when h.PacketType == RTCPReportTypesEnum.PSFB && h.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: SENDER_PAYLOAD_SIZE = 8; break; // We have a lot of different kind of extension messages // In case below we will handle the specific REMB Message https://datatracker.ietf.org/doc/html/draft-alvestrand-rmcat-remb-03#page-3 - case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: + case var h when h.PacketType == RTCPReportTypesEnum.PSFB && h.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: // 0 1 2 3 // 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 @@ -267,7 +267,7 @@ public byte[] GetBytes() switch (Header) { - case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB && Header.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: + case var h when h.PacketType == RTCPReportTypesEnum.RTPFB && h.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: // PLI feedback reports do no have any additional parameters. break; case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB: @@ -275,9 +275,9 @@ public byte[] GetBytes() BinaryPrimitives.WriteUInt16BigEndian(buffer.AsSpan(payloadIndex + 10), BLP); break; - case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: + case var h when h.PacketType == RTCPReportTypesEnum.PSFB && h.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.PLI: break; - case var _ when Header.PacketType == RTCPReportTypesEnum.PSFB && Header.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: + case var h when h.PacketType == RTCPReportTypesEnum.PSFB && h.PayloadFeedbackMessageType == PSFBFeedbackTypesEnum.AFB: // There's have a lot of different kind of extension messages // In case below we will handle the specific REMB Message https://datatracker.ietf.org/doc/html/draft-alvestrand-rmcat-remb-03#page-3 From fb2274c6db9c574efba9e3ef978b2060989328c6 Mon Sep 17 00:00:00 2001 From: Paulo Morgado <470455+paulomorgado@users.noreply.github.com> Date: Mon, 1 Jun 2026 18:31:44 +0100 Subject: [PATCH 3/3] Refactor switch case to use pattern matching for RTPFB Updated the switch statement to use pattern matching (case var h when h.PacketType == RTCPReportTypesEnum.RTPFB), enabling access to the matched variable within the case block for improved clarity and maintainability. --- src/SIPSorcery/net/RTCP/RTCPFeedback.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SIPSorcery/net/RTCP/RTCPFeedback.cs b/src/SIPSorcery/net/RTCP/RTCPFeedback.cs index 0af7b8f03b..bb1eaef8b4 100644 --- a/src/SIPSorcery/net/RTCP/RTCPFeedback.cs +++ b/src/SIPSorcery/net/RTCP/RTCPFeedback.cs @@ -270,7 +270,7 @@ public byte[] GetBytes() case var h when h.PacketType == RTCPReportTypesEnum.RTPFB && h.FeedbackMessageType == RTCPFeedbackTypesEnum.RTCP_SR_REQ: // PLI feedback reports do no have any additional parameters. break; - case var _ when Header.PacketType == RTCPReportTypesEnum.RTPFB: + case var h when h.PacketType == RTCPReportTypesEnum.RTPFB: BinaryPrimitives.WriteUInt16BigEndian(buffer.AsSpan(payloadIndex + 8), PID); BinaryPrimitives.WriteUInt16BigEndian(buffer.AsSpan(payloadIndex + 10), BLP); break;