Commit 5d729d8f authored by Brickner_cp's avatar Brickner_cp

Sort methods.

parent efd61207
......@@ -169,70 +169,6 @@ namespace PcapDotNet.Packets.IpV6
get { return HeaderLength + PayloadLength; }
}
// TODO: Sort method by visibility.
protected override ushort CalculateTransportChecksum()
{
return CalculateTransportChecksum(Buffer, StartOffset, HeaderLength + ExtensionHeaders.BytesLength, (uint)Transport.Length, Transport.ChecksumOffset,
Transport.IsChecksumOptional, CurrentDestination);
}
private static ushort CalculateTransportChecksum(byte[] buffer, int offset, int fullHeaderLength, uint transportLength, int transportChecksumOffset, bool isChecksumOptional, IpV6Address destination)
{
int offsetAfterChecksum = offset + fullHeaderLength + transportChecksumOffset + sizeof(ushort);
uint sum = Sum16Bits(buffer, offset + Offset.SourceAddress, IpV6Address.SizeOf) +
Sum16Bits(destination) +
Sum16Bits(transportLength) + buffer[offset + Offset.NextHeader] +
Sum16Bits(buffer, offset + fullHeaderLength, transportChecksumOffset) +
Sum16Bits(buffer, offsetAfterChecksum, (int)(transportLength - transportChecksumOffset - sizeof(ushort)));
ushort checksumResult = Sum16BitsToChecksum(sum);
if (checksumResult == 0 && isChecksumOptional)
return 0xFFFF;
return checksumResult;
}
internal override IpV4Protocol PayloadProtocol
{
get
{
IpV4Protocol? extensionHeadersNextHeader = ExtensionHeaders.NextHeader;
if (extensionHeadersNextHeader != null)
return extensionHeadersNextHeader.Value;
return NextHeader;
}
}
internal override DataSegment GetPayload()
{
if (Length < HeaderLength)
return null;
return Subsegment(HeaderLength + ExtensionHeaders.BytesLength, Length - HeaderLength - ExtensionHeaders.BytesLength);
}
private void ParseExtensionHeaders()
{
if (_extensionHeaders != null)
return;
if (Length < HeaderLength)
{
_isValid = false;
_extensionHeaders = IpV6ExtensionHeaders.Empty;
return;
}
_extensionHeaders = new IpV6ExtensionHeaders(Subsegment(HeaderLength, RealPayloadLength), NextHeader);
_isValid = _isValid && _extensionHeaders.IsValid;
}
internal static void WriteTransportChecksum(byte[] buffer, int offset, int headerLength, uint transportLength, int transportChecksumOffset,
bool isChecksumOptional, ushort? checksum, IpV6Address destination)
{
ushort checksumValue =
checksum ?? CalculateTransportChecksum(buffer, offset, headerLength, transportLength, transportChecksumOffset, isChecksumOptional, destination);
buffer.Write(offset + headerLength + transportChecksumOffset, checksumValue, Endianity.Big);
}
/// <summary>
/// Creates a Layer that represents the datagram to be used with PacketBuilder.
/// </summary>
......@@ -259,11 +195,28 @@ namespace PcapDotNet.Packets.IpV6
return _isValid;
}
protected override ushort CalculateTransportChecksum()
{
return CalculateTransportChecksum(Buffer, StartOffset, HeaderLength + ExtensionHeaders.BytesLength, (uint)Transport.Length, Transport.ChecksumOffset,
Transport.IsChecksumOptional, CurrentDestination);
}
internal IpV6Datagram(byte[] buffer, int offset, int length)
: base(buffer, offset, length)
{
}
internal override IpV4Protocol PayloadProtocol
{
get
{
IpV4Protocol? extensionHeadersNextHeader = ExtensionHeaders.NextHeader;
if (extensionHeadersNextHeader != null)
return extensionHeadersNextHeader.Value;
return NextHeader;
}
}
internal static int GetTotalLength(Datagram payload)
{
if (payload.Length <= HeaderLength)
......@@ -272,6 +225,13 @@ namespace PcapDotNet.Packets.IpV6
return Math.Min(payload.Length, HeaderLength + payload.ReadUShort(Offset.PayloadLength, Endianity.Big));
}
internal override DataSegment GetPayload()
{
if (Length < HeaderLength)
return null;
return Subsegment(HeaderLength + ExtensionHeaders.BytesLength, Length - HeaderLength - ExtensionHeaders.BytesLength);
}
internal static void WriteHeader(byte[] buffer, int offset,
byte trafficClass, int flowLabel, ushort payloadLength, IpV4Protocol? nextHeader, IpV4Protocol? nextLayerProtocol,
byte hopLimit, IpV6Address source, IpV6Address currentDestination, IpV6ExtensionHeaders extensionHeaders)
......@@ -294,6 +254,44 @@ namespace PcapDotNet.Packets.IpV6
extensionHeaders.Write(buffer, offset + HeaderLength, nextLayerProtocol);
}
internal static void WriteTransportChecksum(byte[] buffer, int offset, int headerLength, uint transportLength, int transportChecksumOffset,
bool isChecksumOptional, ushort? checksum, IpV6Address destination)
{
ushort checksumValue =
checksum ?? CalculateTransportChecksum(buffer, offset, headerLength, transportLength, transportChecksumOffset, isChecksumOptional, destination);
buffer.Write(offset + headerLength + transportChecksumOffset, checksumValue, Endianity.Big);
}
private void ParseExtensionHeaders()
{
if (_extensionHeaders != null)
return;
if (Length < HeaderLength)
{
_isValid = false;
_extensionHeaders = IpV6ExtensionHeaders.Empty;
return;
}
_extensionHeaders = new IpV6ExtensionHeaders(Subsegment(HeaderLength, RealPayloadLength), NextHeader);
_isValid = _isValid && _extensionHeaders.IsValid;
}
private static ushort CalculateTransportChecksum(byte[] buffer, int offset, int fullHeaderLength, uint transportLength, int transportChecksumOffset, bool isChecksumOptional, IpV6Address destination)
{
int offsetAfterChecksum = offset + fullHeaderLength + transportChecksumOffset + sizeof(ushort);
uint sum = Sum16Bits(buffer, offset + Offset.SourceAddress, IpV6Address.SizeOf) +
Sum16Bits(destination) +
Sum16Bits(transportLength) + buffer[offset + Offset.NextHeader] +
Sum16Bits(buffer, offset + fullHeaderLength, transportChecksumOffset) +
Sum16Bits(buffer, offsetAfterChecksum, (int)(transportLength - transportChecksumOffset - sizeof(ushort)));
ushort checksumResult = Sum16BitsToChecksum(sum);
if (checksumResult == 0 && isChecksumOptional)
return 0xFFFF;
return checksumResult;
}
private IpV6ExtensionHeaders _extensionHeaders;
private bool _isValid = true;
}
......
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