Skip to content

Commit 09fa941

Browse files
committed
Refactor SIP code for clarity and consistency (#1653)
Replaced manual string comparisons with StringComparison.OrdinalIgnoreCase and placed constants first in comparisons. Refactored switch statements to use switch expressions with spans. Updated header concatenation to use string interpolation. Used string.IsNullOrWhiteSpace for null/whitespace checks. Changed method overrides to use override instead of new where appropriate.
1 parent 82301cd commit 09fa941

13 files changed

Lines changed: 49 additions & 55 deletions

src/SIPSorcery/core/SIP/SIPParameterlessURI.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public static SIPParameterlessURI ParseSIPParamterlessURI(string uri)
8181
return new SIPParameterlessURI(sipURI);
8282
}
8383

84-
public new string ToString()
84+
public override string ToString()
8585
{
8686
try
8787
{

src/SIPSorcery/core/SIPEvents/SIPEventPackages.cs

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,11 @@ public static bool IsValid(string value)
6666
{
6767
return false;
6868
}
69-
else {
69+
else
70+
{
7071
value = value.Trim();
7172

72-
return
73+
return
7374
string.Equals(value, DIALOG_EVENT_VALUE, StringComparison.OrdinalIgnoreCase) ||
7475
string.Equals(value, MESSAGE_SUMMARY_EVENT_VALUE, StringComparison.OrdinalIgnoreCase) ||
7576
string.Equals(value, PRESENCE_EVENT_VALUE, StringComparison.OrdinalIgnoreCase) ||
@@ -85,26 +86,22 @@ public static SIPEventPackagesEnum Parse(string value)
8586
}
8687
else
8788
{
88-
value = value.Trim().ToLower();
89-
switch (value)
89+
var valueSpan = value.AsSpan().Trim();
90+
91+
return valueSpan switch
9092
{
91-
case DIALOG_EVENT_VALUE:
92-
return SIPEventPackagesEnum.Dialog;
93-
case MESSAGE_SUMMARY_EVENT_VALUE:
94-
return SIPEventPackagesEnum.MessageSummary;
95-
case PRESENCE_EVENT_VALUE:
96-
return SIPEventPackagesEnum.Presence;
97-
case REFER_EVENT_VALUE:
98-
return SIPEventPackagesEnum.Refer;
99-
default:
100-
return SIPEventPackagesEnum.None;
101-
}
93+
_ when DIALOG_EVENT_VALUE.Equals(valueSpan, StringComparison.OrdinalIgnoreCase) => SIPEventPackagesEnum.Dialog,
94+
_ when MESSAGE_SUMMARY_EVENT_VALUE.Equals(valueSpan, StringComparison.OrdinalIgnoreCase) => SIPEventPackagesEnum.MessageSummary,
95+
_ when PRESENCE_EVENT_VALUE.Equals(valueSpan, StringComparison.OrdinalIgnoreCase) => SIPEventPackagesEnum.Presence,
96+
_ when REFER_EVENT_VALUE.Equals(valueSpan, StringComparison.OrdinalIgnoreCase) => SIPEventPackagesEnum.Refer,
97+
_ => SIPEventPackagesEnum.None,
98+
};
10299
}
103100
}
104101

105102
public static string GetEventHeader(SIPEventPackagesEnum eventPackage)
106103
{
107-
switch(eventPackage)
104+
switch (eventPackage)
108105
{
109106
case SIPEventPackagesEnum.Dialog:
110107
return DIALOG_EVENT_VALUE;
@@ -163,9 +160,13 @@ public static bool IsValid(string value)
163160
{
164161
return false;
165162
}
166-
else if (value.ToLower() == "cancelled" || value.ToLower() == "error" || value.ToLower() == "local-bye" ||
167-
value.ToLower() == "rejected" || value.ToLower() == "replaced" || value.ToLower() == "remote-bye" ||
168-
value.ToLower() == "timeout")
163+
else if ("cancelled".Equals(value, StringComparison.OrdinalIgnoreCase) ||
164+
"error".Equals(value, StringComparison.OrdinalIgnoreCase) ||
165+
"local-bye".Equals(value, StringComparison.OrdinalIgnoreCase) ||
166+
"rejected".Equals(value, StringComparison.OrdinalIgnoreCase) ||
167+
"replaced".Equals(value, StringComparison.OrdinalIgnoreCase) ||
168+
"remote-bye".Equals(value, StringComparison.OrdinalIgnoreCase) ||
169+
"timeout".Equals(value, StringComparison.OrdinalIgnoreCase))
169170
{
170171
return true;
171172
}
@@ -183,26 +184,18 @@ public static SIPEventDialogStateEvent Parse(string value)
183184
}
184185
else
185186
{
186-
string trimmedValue = value.Trim().ToLower();
187-
switch (trimmedValue)
187+
var trimmedValue = value.AsSpan().Trim();
188+
return trimmedValue switch
188189
{
189-
case "cancelled":
190-
return SIPEventDialogStateEvent.Cancelled;
191-
case "error":
192-
return SIPEventDialogStateEvent.Error;
193-
case "local-bye":
194-
return SIPEventDialogStateEvent.LocalBye;
195-
case "rejected":
196-
return SIPEventDialogStateEvent.Rejected;
197-
case "replaced":
198-
return SIPEventDialogStateEvent.Replaced;
199-
case "remote-bye":
200-
return SIPEventDialogStateEvent.RemoteBye;
201-
case "timeout":
202-
return SIPEventDialogStateEvent.Timeout;
203-
default:
204-
throw new ArgumentException("The value is not valid for a SIPEventDialogStateEvent.");
205-
}
190+
_ when "cancelled".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.Cancelled,
191+
_ when "error".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.Error,
192+
_ when "local-bye".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.LocalBye,
193+
_ when "rejected".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.Rejected,
194+
_ when "replaced".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.Replaced,
195+
_ when "remote-bye".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.RemoteBye,
196+
_ when "timeout".Equals(trimmedValue, StringComparison.OrdinalIgnoreCase) => SIPEventDialogStateEvent.Timeout,
197+
_ => throw new ArgumentException("The value is not valid for a SIPEventDialogStateEvent."),
198+
};
206199
}
207200
}
208201

src/SIPSorcery/core/SIPTransactions/SIPTransaction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ protected virtual Task<SocketError> SendProvisionalResponse(SIPResponse sipRespo
411411
}
412412

413413
sipResponse.Header.RSeq = RSeq;
414-
sipResponse.Header.Require += SIPExtensionHeaders.REPLACES + ", " + SIPExtensionHeaders.NO_REFER_SUB + ", " + SIPExtensionHeaders.PRACK;
414+
sipResponse.Header.Require += $"{SIPExtensionHeaders.REPLACES}, {SIPExtensionHeaders.NO_REFER_SUB}, {SIPExtensionHeaders.PRACK}";
415415

416416
// If reliable provisional responses are supported then need to send this response reliably.
417417
if (ReliableProvisionalResponse != null)

src/SIPSorcery/core/SIPTransactions/SIPTransactionEngine.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public bool Exists(SIPResponse sipResponse)
141141
public SIPTransaction GetTransaction(SIPRequest sipRequest)
142142
{
143143
// The branch is mandatory but it doesn't stop some UA's not setting it.
144-
if (sipRequest.Header.Vias.TopViaHeader.Branch == null || sipRequest.Header.Vias.TopViaHeader.Branch.Trim().Length == 0)
144+
if (string.IsNullOrWhiteSpace(sipRequest.Header.Vias.TopViaHeader.Branch))
145145
{
146146
return null;
147147
}
@@ -231,7 +231,7 @@ public SIPTransaction GetTransaction(SIPRequest sipRequest)
231231

232232
public SIPTransaction GetTransaction(SIPResponse sipResponse)
233233
{
234-
if (sipResponse.Header.Vias.TopViaHeader.Branch == null || sipResponse.Header.Vias.TopViaHeader.Branch.Trim().Length == 0)
234+
if (string.IsNullOrWhiteSpace(sipResponse.Header.Vias.TopViaHeader.Branch))
235235
{
236236
return null;
237237
}

src/SIPSorcery/core/SIPTransactions/UASInviteTransaction.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,9 @@ public SIPResponse GetOkResponse(string contentType, string messageBody)
155155
okResponse.Header.Server = SIPConstants.SipUserAgentVersionString;
156156
okResponse.Header.MaxForwards = Int32.MinValue;
157157
okResponse.Header.RecordRoutes = requestHeader.RecordRoutes;
158-
okResponse.Header.Supported = SIPExtensionHeaders.REPLACES + ", " + SIPExtensionHeaders.NO_REFER_SUB
159-
+ ((PrackSupported == true) ? ", " + SIPExtensionHeaders.PRACK : "");
158+
okResponse.Header.Supported = PrackSupported == true
159+
? $"{SIPExtensionHeaders.REPLACES}, {SIPExtensionHeaders.NO_REFER_SUB}, {SIPExtensionHeaders.PRACK}"
160+
: $"{SIPExtensionHeaders.REPLACES}, {SIPExtensionHeaders.NO_REFER_SUB}";
160161

161162
okResponse.Body = messageBody;
162163
okResponse.Header.ContentType = contentType;

src/SIPSorcery/net/STUN/STUNAppState.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static string PrintBuffer(byte[] buffer)
4040

4141
if (byteStr.Length == 1)
4242
{
43-
bufferStr += "0" + byteStr;
43+
bufferStr += $"0{byteStr}";
4444
}
4545
else
4646
{

src/SIPSorcery/net/STUN/STUNAttributes/STUNAddressAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public override int ToByteBuffer(byte[] buffer, int startIndex)
9595

9696
public override string ToString()
9797
{
98-
string attrDescrStr = "STUN Attribute: " + base.AttributeType + ", address=" + Address.ToString() + ", port=" + Port + ".";
98+
string attrDescrStr = $"STUN Attribute: {base.AttributeType}, address={Address.ToString()}, port={Port}.";
9999

100100
return attrDescrStr;
101101
}

src/SIPSorcery/net/STUN/STUNAttributes/STUNAttribute.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public static List<STUNAttribute> ParseMessageAttributes(byte[] buffer, int star
220220

221221
attributes.Add(attribute);
222222

223-
// Attributes start on 32 bit word boundaries so where an attribute length is not a multiple of 4 it gets padded.
223+
// Attributes start on 32 bit word boundaries so where an attribute length is not a multiple of 4 it gets padded.
224224
int padding = (stunAttributeLength % 4 != 0) ? 4 - (stunAttributeLength % 4) : 0;
225225

226226
startAttIndex = startAttIndex + 4 + stunAttributeLength + padding;
@@ -258,7 +258,7 @@ public virtual int ToByteBuffer(byte[] buffer, int startIndex)
258258

259259
public new virtual string ToString()
260260
{
261-
string attrDescrString = "STUN Attribute: " + AttributeType.ToString() + ", length=" + PaddedLength + ".";
261+
string attrDescrString = $"STUN Attribute: {AttributeType.ToString()}, length={PaddedLength}.";
262262

263263
return attrDescrString;
264264
}

src/SIPSorcery/net/STUN/STUNAttributes/STUNChangeRequestAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public STUNChangeRequestAttribute(byte[] attributeValue)
5353

5454
public override string ToString()
5555
{
56-
string attrDescrStr = "STUN Attribute: " + STUNAttributeTypesEnum.ChangeRequest.ToString() + ", key byte=" + m_changeRequestByte.ToString("X") + ", change address=" + ChangeAddress + ", change port=" + ChangePort + ".";
56+
string attrDescrStr = $"STUN Attribute: {STUNAttributeTypesEnum.ChangeRequest.ToString()}, key byte={m_changeRequestByte.ToString("X")}, change address={ChangeAddress}, change port={ChangePort}.";
5757

5858
return attrDescrStr;
5959
}

src/SIPSorcery/net/STUN/STUNAttributes/STUNConnectionIdAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public STUNConnectionIdAttribute(uint connectionId)
4444

4545
public override string ToString()
4646
{
47-
string attrDescrStr = "STUN CONNECTION_ID Attribute: value=" + ConnectionId + ".";
47+
string attrDescrStr = $"STUN CONNECTION_ID Attribute: value={ConnectionId}.";
4848

4949
return attrDescrStr;
5050
}

0 commit comments

Comments
 (0)