Commit 75720163 authored by Brickner_cp's avatar Brickner_cp

Warnings, Code Analysis and Documentation. 525 warnings left.

parent e8a62a93
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
<Word>gmtp</Word> <Word>gmtp</Word>
<Word>gost</Word> <Word>gost</Word>
<Word>gss</Word> <Word>gss</Word>
<Word>gwid</Word>
<Word>hiparp</Word> <Word>hiparp</Word>
<Word>iclfxbm</Word> <Word>iclfxbm</Word>
<Word>icmp</Word> <Word>icmp</Word>
...@@ -104,6 +105,7 @@ ...@@ -104,6 +105,7 @@
<Acronym>Ms</Acronym> <Acronym>Ms</Acronym>
<Acronym>Nd</Acronym> <Acronym>Nd</Acronym>
<Acronym>Ns</Acronym> <Acronym>Ns</Acronym>
<Acronym>Os</Acronym>
<Acronym>Sm</Acronym> <Acronym>Sm</Acronym>
</CasingExceptions> </CasingExceptions>
</Acronyms> </Acronyms>
......
...@@ -26,7 +26,7 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -26,7 +26,7 @@ namespace PcapDotNet.Packets.TestUtils
dnsLayer.IsRecursionAvailable = random.NextBool(); dnsLayer.IsRecursionAvailable = random.NextBool();
dnsLayer.FutureUse = random.NextBool(); dnsLayer.FutureUse = random.NextBool();
dnsLayer.ResponseCode = random.NextEnum(DnsResponseCode.BadVersionOrBadSignature, DnsResponseCode.BadKey, DnsResponseCode.BadTime, DnsResponseCode.BadMode, dnsLayer.ResponseCode = random.NextEnum(DnsResponseCode.BadVersionOrBadSignature, DnsResponseCode.BadKey, DnsResponseCode.BadTime, DnsResponseCode.BadMode,
DnsResponseCode.BadName, DnsResponseCode.BadAlgorithm, DnsResponseCode.BadTruncaction); DnsResponseCode.BadName, DnsResponseCode.BadAlgorithm, DnsResponseCode.BadTruncation);
dnsLayer.DomainNameCompressionMode = random.NextEnum<DnsDomainNameCompressionMode>(); dnsLayer.DomainNameCompressionMode = random.NextEnum<DnsDomainNameCompressionMode>();
int numQueries = random.Next(MaxRecordsPerSection + 1); int numQueries = random.Next(MaxRecordsPerSection + 1);
List<DnsQueryResourceRecord> queries = new List<DnsQueryResourceRecord>(); List<DnsQueryResourceRecord> queries = new List<DnsQueryResourceRecord>();
...@@ -121,10 +121,10 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -121,10 +121,10 @@ namespace PcapDotNet.Packets.TestUtils
case DnsType.Ns: case DnsType.Ns:
case DnsType.Md: case DnsType.Md:
case DnsType.Mf: case DnsType.MailForwarder:
case DnsType.CName: case DnsType.CName:
case DnsType.Mb: case DnsType.Mailbox:
case DnsType.Mg: case DnsType.MailGroup:
case DnsType.MailRename: case DnsType.MailRename:
case DnsType.Ptr: case DnsType.Ptr:
case DnsType.NetworkServiceAccessPointPointer: case DnsType.NetworkServiceAccessPointPointer:
...@@ -155,7 +155,7 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -155,7 +155,7 @@ namespace PcapDotNet.Packets.TestUtils
case DnsType.Spf: case DnsType.Spf:
return new DnsResourceDataText(((Func<DataSegment>)(() => random.NextDataSegment(random.Next(10)))).GenerateArray(10).AsReadOnly()); return new DnsResourceDataText(((Func<DataSegment>)(() => random.NextDataSegment(random.Next(10)))).GenerateArray(10).AsReadOnly());
case DnsType.Rp: case DnsType.ResponsiblePerson:
return new DnsResourceDataResponsiblePerson(random.NextDnsDomainName(), random.NextDnsDomainName()); return new DnsResourceDataResponsiblePerson(random.NextDnsDomainName(), random.NextDnsDomainName());
case DnsType.AfsDatabase: case DnsType.AfsDatabase:
...@@ -176,7 +176,7 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -176,7 +176,7 @@ namespace PcapDotNet.Packets.TestUtils
return new DnsResourceDataNetworkServiceAccessPoint(random.NextDataSegment(1 + random.Next(10)), random.NextUInt48(), random.NextByte()); return new DnsResourceDataNetworkServiceAccessPoint(random.NextDataSegment(1 + random.Next(10)), random.NextUInt48(), random.NextByte());
case DnsType.Signature: case DnsType.Signature:
case DnsType.RrSignature: case DnsType.ResourceRecordSignature:
return new DnsResourceDataSignature(random.NextEnum<DnsType>(), random.NextEnum<DnsAlgorithm>(), random.NextByte(), random.NextUInt(), return new DnsResourceDataSignature(random.NextEnum<DnsType>(), random.NextEnum<DnsAlgorithm>(), random.NextByte(), random.NextUInt(),
random.NextUInt(), random.NextUInt(), random.NextUShort(), random.NextDnsDomainName(), random.NextUInt(), random.NextUInt(), random.NextUShort(), random.NextDnsDomainName(),
random.NextDataSegment(random.Next(100))); random.NextDataSegment(random.Next(100)));
...@@ -205,7 +205,7 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -205,7 +205,7 @@ namespace PcapDotNet.Packets.TestUtils
(ulong)(random.NextInt(0, 10) * Math.Pow(10, random.NextInt(0, 10))), (ulong)(random.NextInt(0, 10) * Math.Pow(10, random.NextInt(0, 10))),
random.NextUInt(), random.NextUInt(), random.NextUInt()); random.NextUInt(), random.NextUInt(), random.NextUInt());
case DnsType.Nxt: case DnsType.NextDomain:
byte[] typeBitmap = random.NextBytes(random.Next(DnsResourceDataNextDomain.MaxTypeBitmapLength + 1)); byte[] typeBitmap = random.NextBytes(random.Next(DnsResourceDataNextDomain.MaxTypeBitmapLength + 1));
if (typeBitmap.Length > 0 && typeBitmap[typeBitmap.Length - 1] == 0) if (typeBitmap.Length > 0 && typeBitmap[typeBitmap.Length - 1] == 0)
typeBitmap[typeBitmap.Length - 1] = random.NextByte(1, 256); typeBitmap[typeBitmap.Length - 1] = random.NextByte(1, 256);
...@@ -262,8 +262,8 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -262,8 +262,8 @@ namespace PcapDotNet.Packets.TestUtils
case DnsType.DelegationSigner: case DnsType.DelegationSigner:
case DnsType.Cds: case DnsType.Cds:
case DnsType.Ta: case DnsType.TrustAnchor:
case DnsType.DnsSecLookasideValidation: case DnsType.DnsSecLookAsideValidation:
return new DnsResourceDataDelegationSigner(random.NextUShort(), random.NextEnum<DnsAlgorithm>(), random.NextEnum<DnsDigestType>(), return new DnsResourceDataDelegationSigner(random.NextUShort(), random.NextEnum<DnsAlgorithm>(), random.NextEnum<DnsDigestType>(),
random.NextDataSegment(random.Next(50))); random.NextDataSegment(random.Next(50)));
...@@ -302,7 +302,7 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -302,7 +302,7 @@ namespace PcapDotNet.Packets.TestUtils
case DnsType.RKey: case DnsType.RKey:
return new DnsResourceDataRKey(random.NextUShort(), random.NextByte(), random.NextEnum<DnsAlgorithm>(), random.NextDataSegment(random.NextInt(0, 100))); return new DnsResourceDataRKey(random.NextUShort(), random.NextByte(), random.NextEnum<DnsAlgorithm>(), random.NextDataSegment(random.NextInt(0, 100)));
case DnsType.TaLink: case DnsType.TrustAnchorLink:
return new DnsResourceDataTrustAnchorLink(random.NextDnsDomainName(), random.NextDnsDomainName()); return new DnsResourceDataTrustAnchorLink(random.NextDnsDomainName(), random.NextDnsDomainName());
case DnsType.TKey: case DnsType.TKey:
......
...@@ -147,7 +147,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -147,7 +147,7 @@ namespace PcapDotNet.Packets.Dns
/// If RD is set, it directs the name server to pursue the query recursively. /// If RD is set, it directs the name server to pursue the query recursively.
/// Recursive query support is optional. /// Recursive query support is optional.
/// </summary> /// </summary>
public bool IsRecusionDesired public bool IsRecursionDesired
{ {
get { return ReadBool(Offset.IsRecusionDesired, Mask.IsRecusionDesired); } get { return ReadBool(Offset.IsRecusionDesired, Mask.IsRecusionDesired); }
} }
...@@ -322,7 +322,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -322,7 +322,7 @@ namespace PcapDotNet.Packets.Dns
OpCode = OpCode, OpCode = OpCode,
IsAuthoritativeAnswer = IsAuthoritativeAnswer, IsAuthoritativeAnswer = IsAuthoritativeAnswer,
IsTruncated = IsTruncated, IsTruncated = IsTruncated,
IsRecursionDesired = IsRecusionDesired, IsRecursionDesired = IsRecursionDesired,
IsRecursionAvailable = IsRecursionAvailable, IsRecursionAvailable = IsRecursionAvailable,
FutureUse = FutureUse, FutureUse = FutureUse,
IsAuthenticData = IsAuthenticData, IsAuthenticData = IsAuthenticData,
......
...@@ -52,15 +52,15 @@ ...@@ -52,15 +52,15 @@
/// <summary> /// <summary>
/// RFC 2136. /// RFC 2136.
/// RR Set Exists when it should not. /// YXRRSET - RR Set Exists when it should not.
/// </summary> /// </summary>
YxRrSet = 7, YxResourceRecordSet = 7,
/// <summary> /// <summary>
/// RFC 2136. /// RFC 2136.
/// RR Set that should exist does not (NX). /// NXRRSET - RR Set that should exist does not (NX).
/// </summary> /// </summary>
NotExistRrSet = 8, NotExistResourceRecordSet = 8,
/// <summary> /// <summary>
/// RFC 2136. /// RFC 2136.
...@@ -114,6 +114,6 @@ ...@@ -114,6 +114,6 @@
/// RFC 4635. /// RFC 4635.
/// BADTRUNC - Bad Truncation. /// BADTRUNC - Bad Truncation.
/// </summary> /// </summary>
BadTruncaction = 22, BadTruncation = 22,
} }
} }
\ No newline at end of file
...@@ -34,10 +34,10 @@ ...@@ -34,10 +34,10 @@
/// <summary> /// <summary>
/// RFC 1035. /// RFC 1035.
/// A mail forwarder (Obsolete - use MX). /// MF - A mail forwarder (Obsolete - use MX).
/// Payload type: DnsResourceDataDomainName. /// Payload type: DnsResourceDataDomainName.
/// </summary> /// </summary>
Mf = 4, MailForwarder = 4,
/// <summary> /// <summary>
/// RFC 1035. /// RFC 1035.
...@@ -55,17 +55,17 @@ ...@@ -55,17 +55,17 @@
/// <summary> /// <summary>
/// RFC 1035. /// RFC 1035.
/// A mailbox domain name (EXPERIMENTAL). /// MB - A mailbox domain name (EXPERIMENTAL).
/// Payload type: DnsResourceDataDomainName. /// Payload type: DnsResourceDataDomainName.
/// </summary> /// </summary>
Mb = 7, Mailbox = 7,
/// <summary> /// <summary>
/// RFC 1035. /// RFC 1035.
/// A mail group member (EXPERIMENTAL). /// MG - A mail group member (EXPERIMENTAL).
/// Payload type: DnsResourceDataDomainName. /// Payload type: DnsResourceDataDomainName.
/// </summary> /// </summary>
Mg = 8, MailGroup = 8,
/// <summary> /// <summary>
/// RFC 1035. /// RFC 1035.
...@@ -125,10 +125,10 @@ ...@@ -125,10 +125,10 @@
/// <summary> /// <summary>
/// RFC 1183. /// RFC 1183.
/// For Responsible Person. /// RP - For Responsible Person.
/// Payload type: DnsResourceDataResponsiblePerson. /// Payload type: DnsResourceDataResponsiblePerson.
/// </summary> /// </summary>
Rp = 17, ResponsiblePerson = 17,
/// <summary> /// <summary>
/// RFCs 1183, 5864. /// RFCs 1183, 5864.
...@@ -217,10 +217,10 @@ ...@@ -217,10 +217,10 @@
/// <summary> /// <summary>
/// RFC 2535, 3755. /// RFC 2535, 3755.
/// Next Domain - OBSOLETE. /// NXT - Next Domain - OBSOLETE.
/// Payload type: DnsResourceDataNextDomain. /// Payload type: DnsResourceDataNextDomain.
/// </summary> /// </summary>
Nxt = 30, NextDomain = 30,
/// <summary> /// <summary>
/// Patton. /// Patton.
...@@ -333,7 +333,7 @@ ...@@ -333,7 +333,7 @@
/// RRSIG. /// RRSIG.
/// Payload type: DnsResourceDataSignature. /// Payload type: DnsResourceDataSignature.
/// </summary> /// </summary>
RrSignature = 46, ResourceRecordSignature = 46,
/// <summary> /// <summary>
/// RFCs 3755, 4034. /// RFCs 3755, 4034.
...@@ -396,10 +396,10 @@ ...@@ -396,10 +396,10 @@
/// <summary> /// <summary>
/// Wijngaards. /// Wijngaards.
/// DNSSEC Trust Anchor LINK. /// TALINK - DNSSEC Trust Anchor LINK.
/// Payload type: DnsResourceDataTrustAnchorLink. /// Payload type: DnsResourceDataTrustAnchorLink.
/// </summary> /// </summary>
TaLink = 58, TrustAnchorLink = 58,
/// <summary> /// <summary>
/// Barwood. /// Barwood.
...@@ -435,9 +435,9 @@ ...@@ -435,9 +435,9 @@
/// <summary> /// <summary>
/// IANA-Reserved. /// IANA-Reserved.
/// Not documented. /// UNSPEC - Not documented.
/// </summary> /// </summary>
UnSpec = 103, Unspecified = 103,
/// <summary> /// <summary>
/// RFC 2930. /// RFC 2930.
...@@ -504,16 +504,16 @@ ...@@ -504,16 +504,16 @@
/// <summary> /// <summary>
/// Weiler. 2005-12-13. /// Weiler. 2005-12-13.
/// DNSSEC Trust Authorities or Trust Anchor. /// TA - DNSSEC Trust Authorities or Trust Anchor.
/// Payload type: DnsResourceDataDelegationSigner. /// Payload type: DnsResourceDataDelegationSigner.
/// </summary> /// </summary>
Ta = 32768, TrustAnchor = 32768,
/// <summary> /// <summary>
/// RFC 4431. /// RFC 4431.
/// DLV - DNSSEC Lookaside Validation. /// DLV - DNSSEC Lookaside Validation.
/// Payload type: DnsResourceDataDelegationSigner. /// Payload type: DnsResourceDataDelegationSigner.
/// </summary> /// </summary>
DnsSecLookasideValidation = 32769, DnsSecLookAsideValidation = 32769,
} }
} }
\ No newline at end of file
...@@ -19,8 +19,8 @@ namespace PcapDotNet.Packets.Dns ...@@ -19,8 +19,8 @@ namespace PcapDotNet.Packets.Dns
/// </summary> /// </summary>
[DnsTypeRegistration(Type = DnsType.DelegationSigner)] [DnsTypeRegistration(Type = DnsType.DelegationSigner)]
[DnsTypeRegistration(Type = DnsType.Cds)] [DnsTypeRegistration(Type = DnsType.Cds)]
[DnsTypeRegistration(Type = DnsType.Ta)] [DnsTypeRegistration(Type = DnsType.TrustAnchor)]
[DnsTypeRegistration(Type = DnsType.DnsSecLookasideValidation)] [DnsTypeRegistration(Type = DnsType.DnsSecLookAsideValidation)]
public sealed class DnsResourceDataDelegationSigner : DnsResourceDataSimple, IEquatable<DnsResourceDataDelegationSigner> public sealed class DnsResourceDataDelegationSigner : DnsResourceDataSimple, IEquatable<DnsResourceDataDelegationSigner>
{ {
private static class Offset private static class Offset
......
...@@ -12,10 +12,10 @@ namespace PcapDotNet.Packets.Dns ...@@ -12,10 +12,10 @@ namespace PcapDotNet.Packets.Dns
/// </summary> /// </summary>
[DnsTypeRegistration(Type = DnsType.Ns)] [DnsTypeRegistration(Type = DnsType.Ns)]
[DnsTypeRegistration(Type = DnsType.Md)] [DnsTypeRegistration(Type = DnsType.Md)]
[DnsTypeRegistration(Type = DnsType.Mf)] [DnsTypeRegistration(Type = DnsType.MailForwarder)]
[DnsTypeRegistration(Type = DnsType.CName)] [DnsTypeRegistration(Type = DnsType.CName)]
[DnsTypeRegistration(Type = DnsType.Mb)] [DnsTypeRegistration(Type = DnsType.Mailbox)]
[DnsTypeRegistration(Type = DnsType.Mg)] [DnsTypeRegistration(Type = DnsType.MailGroup)]
[DnsTypeRegistration(Type = DnsType.MailRename)] [DnsTypeRegistration(Type = DnsType.MailRename)]
[DnsTypeRegistration(Type = DnsType.Ptr)] [DnsTypeRegistration(Type = DnsType.Ptr)]
[DnsTypeRegistration(Type = DnsType.NetworkServiceAccessPointPointer)] [DnsTypeRegistration(Type = DnsType.NetworkServiceAccessPointPointer)]
......
...@@ -18,7 +18,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -18,7 +18,7 @@ namespace PcapDotNet.Packets.Dns
/// +------------------+ /// +------------------+
/// </pre> /// </pre>
/// </summary> /// </summary>
[DnsTypeRegistration(Type = DnsType.Nxt)] [DnsTypeRegistration(Type = DnsType.NextDomain)]
public sealed class DnsResourceDataNextDomain : DnsResourceData, IEquatable<DnsResourceDataNextDomain> public sealed class DnsResourceDataNextDomain : DnsResourceData, IEquatable<DnsResourceDataNextDomain>
{ {
public const int MaxTypeBitmapLength = 16; public const int MaxTypeBitmapLength = 16;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
/// +------------+ /// +------------+
/// </pre> /// </pre>
/// </summary> /// </summary>
[DnsTypeRegistration(Type = DnsType.Rp)] [DnsTypeRegistration(Type = DnsType.ResponsiblePerson)]
public sealed class DnsResourceDataResponsiblePerson : DnsResourceData2DomainNames public sealed class DnsResourceDataResponsiblePerson : DnsResourceData2DomainNames
{ {
public DnsResourceDataResponsiblePerson(DnsDomainName mailbox, DnsDomainName textDomain) public DnsResourceDataResponsiblePerson(DnsDomainName mailbox, DnsDomainName textDomain)
......
...@@ -27,7 +27,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -27,7 +27,7 @@ namespace PcapDotNet.Packets.Dns
/// </pre> /// </pre>
/// </summary> /// </summary>
[DnsTypeRegistration(Type = DnsType.Signature)] [DnsTypeRegistration(Type = DnsType.Signature)]
[DnsTypeRegistration(Type = DnsType.RrSignature)] [DnsTypeRegistration(Type = DnsType.ResourceRecordSignature)]
public sealed class DnsResourceDataSignature : DnsResourceData, IEquatable<DnsResourceDataSignature> public sealed class DnsResourceDataSignature : DnsResourceData, IEquatable<DnsResourceDataSignature>
{ {
private static class Offset private static class Offset
......
...@@ -33,10 +33,10 @@ namespace PcapDotNet.Packets.Dns ...@@ -33,10 +33,10 @@ namespace PcapDotNet.Packets.Dns
{ {
} }
public DnsResourceDataSink(DnsSinkCoding coding, byte subcoding, DataSegment data) public DnsResourceDataSink(DnsSinkCoding coding, byte subCoding, DataSegment data)
{ {
Coding = coding; Coding = coding;
Subcoding = subcoding; SubCoding = subCoding;
Data = data; Data = data;
} }
...@@ -48,7 +48,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -48,7 +48,7 @@ namespace PcapDotNet.Packets.Dns
/// <summary> /// <summary>
/// Provides additional information depending on the value of the coding. /// Provides additional information depending on the value of the coding.
/// </summary> /// </summary>
public byte Subcoding { get; private set; } public byte SubCoding { get; private set; }
/// <summary> /// <summary>
/// Returns a combination of coding and subcoding. /// Returns a combination of coding and subcoding.
...@@ -58,7 +58,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -58,7 +58,7 @@ namespace PcapDotNet.Packets.Dns
{ {
get get
{ {
ushort codingSubcoding = BitSequence.Merge((byte)Coding, Subcoding); ushort codingSubcoding = BitSequence.Merge((byte)Coding, SubCoding);
return (DnsSinkCodingSubCoding)codingSubcoding; return (DnsSinkCodingSubCoding)codingSubcoding;
} }
} }
...@@ -72,7 +72,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -72,7 +72,7 @@ namespace PcapDotNet.Packets.Dns
{ {
return other != null && return other != null &&
Coding.Equals(other.Coding) && Coding.Equals(other.Coding) &&
Subcoding.Equals(other.Subcoding) && SubCoding.Equals(other.SubCoding) &&
Data.Equals(other.Data); Data.Equals(other.Data);
} }
...@@ -99,7 +99,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -99,7 +99,7 @@ namespace PcapDotNet.Packets.Dns
internal override void WriteDataSimple(byte[] buffer, int offset) internal override void WriteDataSimple(byte[] buffer, int offset)
{ {
buffer.Write(offset + Offset.Coding, (byte)Coding); buffer.Write(offset + Offset.Coding, (byte)Coding);
buffer.Write(offset + Offset.Subcoding, Subcoding); buffer.Write(offset + Offset.Subcoding, SubCoding);
Data.Write(buffer, offset + Offset.Data); Data.Write(buffer, offset + Offset.Data);
} }
......
...@@ -10,9 +10,9 @@ namespace PcapDotNet.Packets.Dns ...@@ -10,9 +10,9 @@ namespace PcapDotNet.Packets.Dns
[DnsTypeRegistration(Type = DnsType.X25)] [DnsTypeRegistration(Type = DnsType.X25)]
public sealed class DnsResourceDataString : DnsResourceDataSimple, IEquatable<DnsResourceDataString> public sealed class DnsResourceDataString : DnsResourceDataSimple, IEquatable<DnsResourceDataString>
{ {
public DnsResourceDataString(DataSegment str) public DnsResourceDataString(DataSegment value)
{ {
String = str; String = value;
} }
public DataSegment String { get; private set; } public DataSegment String { get; private set; }
......
...@@ -13,7 +13,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -13,7 +13,7 @@ namespace PcapDotNet.Packets.Dns
/// +----------------------+ /// +----------------------+
/// </pre> /// </pre>
/// </summary> /// </summary>
[DnsTypeRegistration(Type = DnsType.TaLink)] [DnsTypeRegistration(Type = DnsType.TrustAnchorLink)]
public sealed class DnsResourceDataTrustAnchorLink : DnsResourceDataNoCompression, IEquatable<DnsResourceDataTrustAnchorLink> public sealed class DnsResourceDataTrustAnchorLink : DnsResourceDataNoCompression, IEquatable<DnsResourceDataTrustAnchorLink>
{ {
private const int MinimumLength = 2 * DnsDomainName.RootLength; private const int MinimumLength = 2 * DnsDomainName.RootLength;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment