From 22f300b375bbf4703536a5a22c279b7e8709d4b3 Mon Sep 17 00:00:00 2001 From: Paulo Morgado <470455+paulomorgado@users.noreply.github.com> Date: Mon, 1 Jun 2026 15:21:17 +0100 Subject: [PATCH] Refactor RTP string comparisons to use string.Equals Replaced ToLower() with string.Equals and StringComparison.OrdinalIgnoreCase for all case-insensitive string comparisons, improving performance and code clarity. Updated TransportWideCCExtension, RTPSession, and AudioStream accordingly. Also improved string concatenation and logging practices. --- .../TransportWideCCExtension.cs | 11 ++---- src/SIPSorcery/net/RTP/RTPSession.cs | 34 ++++++++++--------- src/SIPSorcery/net/RTP/Streams/AudioStream.cs | 6 ++-- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/SIPSorcery/net/RTP/RTPHeaderExtensions/TransportWideCCExtension.cs b/src/SIPSorcery/net/RTP/RTPHeaderExtensions/TransportWideCCExtension.cs index cd6138f00..91a333340 100644 --- a/src/SIPSorcery/net/RTP/RTPHeaderExtensions/TransportWideCCExtension.cs +++ b/src/SIPSorcery/net/RTP/RTPHeaderExtensions/TransportWideCCExtension.cs @@ -37,14 +37,9 @@ public class TransportWideCCExtension : RTPHeaderExtension public override bool MatchesExtension(string uri) { - switch (uri.ToLower()) - { - case RTP_HEADER_EXTENSION_URI: - case "urn:ietf:params:rtp-hdrext:transport-wide-cc": //official urn registered with IANA - case "http://www.webrtc.org/experiments/rtp-hdrext/transport-wide-cc-02": - return true; - } - return false; + return string.Equals(uri, RTP_HEADER_EXTENSION_URI, StringComparison.OrdinalIgnoreCase) || + string.Equals(uri, "urn:ietf:params:rtp-hdrext:transport-wide-cc", StringComparison.OrdinalIgnoreCase) || + string.Equals(uri, "http://www.webrtc.org/experiments/rtp-hdrext/transport-wide-cc-02", StringComparison.OrdinalIgnoreCase); } diff --git a/src/SIPSorcery/net/RTP/RTPSession.cs b/src/SIPSorcery/net/RTP/RTPSession.cs index 398d1d48c..0eeb8797b 100644 --- a/src/SIPSorcery/net/RTP/RTPSession.cs +++ b/src/SIPSorcery/net/RTP/RTPSession.cs @@ -24,6 +24,7 @@ using System.Collections.Generic; using System.Linq; using System.Net; +using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -666,35 +667,36 @@ protected void AddRemoteSDPSsrcAttributes(SDPMediaTypesEnum mediaType, List x.Name().ToLower() == SDP.TELEPHONE_EVENT_ATTRIBUTE)) + if (currentLocalTrackCapabilities.Any(x => string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase))) { - localRTPEventCapabilities = currentLocalTrackCapabilities.First(x => x.Name().ToLower() == SDP.TELEPHONE_EVENT_ATTRIBUTE); + localRTPEventCapabilities = currentLocalTrackCapabilities.First(x => string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase)); } else { localRTPEventCapabilities = MediaStream.DefaultRTPEventFormat; } - currentMediaStream.LocalTrack.Capabilities = capabilities.Where(x => x.Name().ToLower() != SDP.TELEPHONE_EVENT_ATTRIBUTE).ToList(); + currentMediaStream.LocalTrack.Capabilities = capabilities.Where(x => !string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase)).ToList(); if (localRTPEventCapabilities != null) { currentMediaStream.LocalTrack.Capabilities.Add(localRTPEventCapabilities.Value); @@ -1251,7 +1253,7 @@ public virtual SetDescriptionResultEnum SetRemoteDescription(SdpType sdpType, SD if (!commonEventFormat.IsEmpty()) { currentMediaStream.NegotiatedRtpEventPayloadID = commonEventFormat.ID; - currentMediaStream.LocalTrack.Capabilities.RemoveAll(x => x.Name().ToLower() == SDP.TELEPHONE_EVENT_ATTRIBUTE); + currentMediaStream.LocalTrack.Capabilities.RemoveAll(x => string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase)); currentMediaStream.LocalTrack.Capabilities.Add(commonEventFormat); } } @@ -1295,7 +1297,7 @@ public virtual SetDescriptionResultEnum SetRemoteDescription(SdpType sdpType, SD if (currentMediaStream.MediaType == SDPMediaTypesEnum.audio) { - if (capabilities?.Where(x => x.Name().ToLower() != SDP.TELEPHONE_EVENT_ATTRIBUTE).Count() == 0) + if (capabilities?.Where(x => !string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase)).Count() == 0) { return SetDescriptionResultEnum.AudioIncompatible; } diff --git a/src/SIPSorcery/net/RTP/Streams/AudioStream.cs b/src/SIPSorcery/net/RTP/Streams/AudioStream.cs index 7aa4702b9..7b40b6561 100644 --- a/src/SIPSorcery/net/RTP/Streams/AudioStream.cs +++ b/src/SIPSorcery/net/RTP/Streams/AudioStream.cs @@ -201,7 +201,7 @@ public async Task SendDtmfEvent(RTPEvent rtpEvent, CancellationToken cancellatio { if (rtpEventInProgress) { - logger.LogWarning(nameof(SendDtmfEvent) + " an RTPEvent is already in progress."); + logger.LogWarning("{Method} an RTPEvent is already in progress.", nameof(SendDtmfEvent)); return; } @@ -285,12 +285,12 @@ public virtual Task SendDtmf(byte key, CancellationToken ct) public void CheckAudioFormatsNegotiation() { if (LocalTrack != null && - LocalTrack.Capabilities.Where(x => x.Name().ToLower() != SDP.TELEPHONE_EVENT_ATTRIBUTE).Count() > 0) + LocalTrack.Capabilities.Where(x => !string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase)).Count() > 0) { OnAudioFormatsNegotiatedByIndex?.Invoke( Index, LocalTrack.Capabilities - .Where(x => x.Name().ToLower() != SDP.TELEPHONE_EVENT_ATTRIBUTE) + .Where(x => !string.Equals(x.Name(), SDP.TELEPHONE_EVENT_ATTRIBUTE, StringComparison.OrdinalIgnoreCase)) .Select(x => x.ToAudioFormat()).ToList()); } }