Commit 569da289 authored by Brickner_cp's avatar Brickner_cp

Wireshark 1.12.1

parent 19ed36b6
......@@ -140,7 +140,6 @@
<Compile Include="MarshalingServicesTests.cs" />
<Compile Include="NetworkInterfaceExtensionsTests.cs" />
<Compile Include="PacketTimestampTests.cs" />
<Compile Include="TcpOptionExtensions.cs" />
<Compile Include="WiresharkDatagramComparer.cs" />
<Compile Include="WiresharkDatagramComparerArp.cs" />
<Compile Include="WiresharkDatagramComparerDns.cs" />
......
using System;
using System.Collections.Generic;
using System.Linq;
using PcapDotNet.Base;
using PcapDotNet.Packets.Transport;
namespace PcapDotNet.Core.Test
{
internal static class TcpOptionExtensions
{
public static string GetWiresharkString(this TcpOption option)
{
switch (option.OptionType)
{
case TcpOptionType.EndOfOptionList:
return "End of Option List (EOL)";
case TcpOptionType.NoOperation:
return "No-Operation (NOP)";
case TcpOptionType.WindowScale:
byte scaleFactorLog = ((TcpOptionWindowScale)option).ScaleFactorLog;
return string.Format("Window scale: {0} (multiply by {1})", scaleFactorLog, (1L << (scaleFactorLog % 32)));
case TcpOptionType.SelectiveAcknowledgmentPermitted:
return "SACK permitted";
case TcpOptionType.SelectiveAcknowledgment:
IEnumerable<TcpOptionSelectiveAcknowledgmentBlock> blocks = ((TcpOptionSelectiveAcknowledgment)option).Blocks;
return "SACK:" + (blocks.Count() == 0
? string.Empty
: ((TcpOptionSelectiveAcknowledgment)option).Blocks.SequenceToString(" ", " "));
case TcpOptionType.Echo:
return "Echo: " + ((TcpOptionEcho)option).Info;
case TcpOptionType.EchoReply:
return "Echo reply: " + ((TcpOptionEchoReply)option).Info;
case TcpOptionType.Timestamp:
TcpOptionTimestamp timestampOption = (TcpOptionTimestamp)option;
return "Timestamps: TSval " + timestampOption.TimestampValue + ", TSecr " + timestampOption.TimestampEchoReply;
case TcpOptionType.ConnectionCount:
return "CC: " + ((TcpOptionConnectionCount)option).ConnectionCount;
case TcpOptionType.ConnectionCountNew:
return "CC.NEW: " + ((TcpOptionConnectionCountNew)option).ConnectionCount;
case TcpOptionType.ConnectionCountEcho:
return "CC.ECHO: " + ((TcpOptionConnectionCountEcho)option).ConnectionCount;
case TcpOptionType.Md5Signature:
return "TCP MD5 signature";
case (TcpOptionType)20:
return "SCPS capabilities" + (option.Length >= 4
? string.Empty
: " (with option length = " + option.Length + " bytes; should be >= 4)");
case (TcpOptionType)21:
return "Selective Negative Acknowledgement" + (option.Length == 6
? string.Empty
: " (with option length = " + option.Length + " bytes; should be 6)");
case (TcpOptionType)22:
return "SCPS record boundary" + (option.Length == 2
? string.Empty
: " (with option length = " + option.Length + " bytes; should be 2)");
case (TcpOptionType)23:
return "SCPS corruption experienced" + (option.Length == 2
? string.Empty
: " (with option length = " + option.Length + " bytes; should be 2)");
case TcpOptionType.PartialOrderConnectionPermitted: // 9.
case TcpOptionType.PartialOrderServiceProfile: // 10.
case TcpOptionType.AlternateChecksumRequest: // 14.
case TcpOptionType.AlternateChecksumData: // 15.
case TcpOptionType.Mood: // 25.
return string.Format("Unknown (0x{0}) ({1} bytes)", ((byte)option.OptionType).ToString("x2"), option.Length);
default:
if (typeof(TcpOptionType).GetEnumValues<TcpOptionType>().Contains(option.OptionType))
throw new InvalidOperationException("Invalid option type " + option.OptionType);
return string.Format("Unknown (0x{0}) ({1} bytes)", ((byte)option.OptionType).ToString("x2"), option.Length);
}
}
}
}
\ No newline at end of file
......@@ -220,14 +220,12 @@ namespace PcapDotNet.Core.Test
break;
case "ipv6.shim6":
// TODO: Fix according to https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9995
// TODO: Implement Shim6.
IpV4Protocol nextHeader = _currentExtensionHeaderIndex > 0
? ipV6Datagram.ExtensionHeaders[_currentExtensionHeaderIndex - 1].NextHeader.Value
: ipV6Datagram.NextHeader;
Assert.IsTrue(nextHeader == IpV4Protocol.AnyHostInternal ||
nextHeader == IpV4Protocol.Shim6);
return false;
Assert.IsTrue(nextHeader == IpV4Protocol.Shim6);
break;
case "ipv6.unknown_hdr":
Assert.AreEqual(ipV6Datagram.ExtensionHeaders.Count(), _currentExtensionHeaderIndex);
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using PcapDotNet.Base;
using PcapDotNet.Packets;
using PcapDotNet.Packets.Ip;
using PcapDotNet.Packets.IpV4;
......@@ -281,25 +283,12 @@ namespace PcapDotNet.Core.Test
switch (field.Name())
{
case "":
switch (option.OptionType)
{
case TcpOptionType.SelectiveNegativeAcknowledgements: // TODO: Support Selective Negative Acknowledgements.
Assert.IsTrue(field.Show().StartsWith(option.GetWiresharkString()));
field.AssertNoFields();
break;
case (TcpOptionType)78: // TODO: Support Riverbed.
break;
default:
field.AssertShow(option.GetWiresharkString());
break;
}
switch (option.OptionType)
{
case TcpOptionType.WindowScale:
TcpOptionWindowScale windowScale = (TcpOptionWindowScale)option;
byte scaleFactorLog = windowScale.ScaleFactorLog;
field.AssertShow(string.Format("Window scale: {0} (multiply by {1})", scaleFactorLog, (1L << (scaleFactorLog % 32))));
foreach (var subField in field.Fields())
{
if (HandleOptionCommonFields(subField, option))
......@@ -322,6 +311,10 @@ namespace PcapDotNet.Core.Test
case TcpOptionType.SelectiveAcknowledgment:
var selectiveAcknowledgmentOption = (TcpOptionSelectiveAcknowledgment)option;
IEnumerable<TcpOptionSelectiveAcknowledgmentBlock> blocks = selectiveAcknowledgmentOption.Blocks;
field.AssertShow("SACK:" + (blocks.Count() == 0
? string.Empty
: ((TcpOptionSelectiveAcknowledgment)option).Blocks.SequenceToString(" ", " ")));
int blockIndex = 0;
foreach (var subField in field.Fields())
{
......@@ -355,6 +348,7 @@ namespace PcapDotNet.Core.Test
case TcpOptionType.Timestamp:
var timestampOption = (TcpOptionTimestamp)option;
field.AssertShow("Timestamps: TSval " + timestampOption.TimestampValue + ", TSecr " + timestampOption.TimestampEchoReply);
foreach (var subField in field.Fields())
{
if (HandleOptionCommonFields(subField, option))
......@@ -490,6 +484,23 @@ namespace PcapDotNet.Core.Test
}
break;
case TcpOptionType.SelectiveAcknowledgmentPermitted:
field.AssertShow("SACK permitted");
field.AssertNoFields();
break;
case TcpOptionType.SelectiveNegativeAcknowledgements: // TODO: Support Selective Negative Acknowledgements.
Assert.IsTrue(field.Show().StartsWith("SACK permitted"));
field.AssertNoFields();
break;
case (TcpOptionType)20:
// TODO: Support 20.
field.AssertShow("SCPS capabilities" + (option.Length >= 4
? string.Empty
: " (with option length = " + option.Length + " bytes; should be >= 4)"));
break;
case (TcpOptionType)22:
field.AssertShow("SCPS record boundary (with option length = " + option.Length + " bytes; should be 2)");
// TODO: Support 22.
......@@ -500,8 +511,28 @@ namespace PcapDotNet.Core.Test
// TODO: Support 23.
break;
case (TcpOptionType)30:
// TODO: Support 30.
Assert.IsTrue(field.Show().StartsWith("Multipath TCP: "));
break;
case (TcpOptionType)78:
field.AssertShow("Riverbed Transparency (with option length = " + option.Length + " bytes; should be 16)");
// TODO: Support 78 - Support Riverbed.
break;
case TcpOptionType.PartialOrderConnectionPermitted: // 9.
case TcpOptionType.PartialOrderServiceProfile: // 10.
case TcpOptionType.AlternateChecksumRequest: // 14.
case TcpOptionType.AlternateChecksumData: // 15.
case TcpOptionType.Mood: // 25.
field.AssertShow(string.Format("Unknown (0x{0}) ({1} bytes)", ((byte)option.OptionType).ToString("x2"), option.Length));
field.AssertNoFields();
break;
default:
field.AssertNoFields();
field.AssertShow("Unknown (0x" + ((byte)option.OptionType).ToString("x") + ") (" + option.Length + " bytes)");
break;
}
++currentOptionIndex;
......
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