Commit 8926ae19 authored by Brickner_cp's avatar Brickner_cp

--no commit message

--no commit message
parent a17e9ecf
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<TestRunConfiguration name="Local Test Run" id="be17286c-6d1c-43dd-b068-e83867abf9c5" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2006"> <TestRunConfiguration name="Local Test Run" id="be17286c-6d1c-43dd-b068-e83867abf9c5" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2006">
<Description>This is a default test run configuration for a local test run.</Description> <Description>This is a default test run configuration for a local test run.</Description>
<TestTypeSpecific /> <CodeCoverage enabled="true">
<Regular>
<CodeCoverageItem binaryFile="C:\Documents and Settings\Boaz\My Documents\TFS\tfs06.codeplex.com\PcapDotNet\PcapDotNet\bin\Debug\BPacket.dll" pdbFile="C:\Documents and Settings\Boaz\My Documents\TFS\tfs06.codeplex.com\PcapDotNet\PcapDotNet\bin\Debug\BPacket.pdb" instrumentInPlace="true" />
<CodeCoverageItem binaryFile="c:\Documents and Settings\Boaz\My Documents\TFS\tfs06.codeplex.com\PcapDotNet\PcapDotNet\bin\Debug\PcapDotNet.Core.dll" pdbFile="c:\Documents and Settings\Boaz\My Documents\TFS\tfs06.codeplex.com\PcapDotNet\PcapDotNet\bin\Debug\PcapDotNet.Core.pdb" instrumentInPlace="true" />
</Regular>
</CodeCoverage>
<TestTypeSpecific>
<WebTestRunConfiguration testTypeId="4e7599fa-5ecb-43e9-a887-cd63cf72d207">
<Browser name="Internet Explorer 7.0">
<Headers>
<Header name="User-Agent" value="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" />
<Header name="Accept" value="*/*" />
<Header name="Accept-Language" value="{{$IEAcceptLanguage}}" />
<Header name="Accept-Encoding" value="GZIP" />
</Headers>
</Browser>
<Network Name="LAN" BandwidthInKbps="0" />
</WebTestRunConfiguration>
</TestTypeSpecific>
</TestRunConfiguration> </TestRunConfiguration>
\ No newline at end of file
using System; using System;
using System.Collections.Generic;
using System.Threading; using System.Threading;
using BPacket; using BPacket;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
...@@ -61,37 +62,64 @@ namespace PcapDotNet.Core.Test ...@@ -61,37 +62,64 @@ namespace PcapDotNet.Core.Test
[TestMethod] [TestMethod]
public void SendAndReceievePacketTest() public void SendAndReceievePacketTest()
{ {
const string sourceMac = "11:22:33:44:55:66"; const string SourceMac = "11:22:33:44:55:66";
const string dstMac = "77:88:99:AA:BB:CC"; const string DestinationMac = "77:88:99:AA:BB:CC";
const int NumPacketsToSend = 10;
IPcapDevice device = PcapLiveDevice.AllLocalMachine[0]; using (PcapDeviceHandler deviceHandler = OpenLiveDevice())
using (PcapDeviceHandler deviceHandler = device.Open())
{ {
Assert.AreEqual(DataLinkKind.Ethernet, deviceHandler.DataLink.Kind); deviceHandler.SetFilter("ether src " + SourceMac + " and ether dst " + DestinationMac);
deviceHandler.SetFilter("ether src " + sourceMac + " and ether dst " + dstMac);
Packet sentPacket = PacketBuilder.Ethernet(DateTime.Now, Packet sentPacket = PacketBuilder.Ethernet(DateTime.Now,
new MacAddress(sourceMac), new MacAddress(SourceMac),
new MacAddress(dstMac), new MacAddress(DestinationMac),
EthernetType.IpV4, EthernetType.IpV4,
new Datagram(new byte[10], 0, 10)); new Datagram(new byte[10], 0, 10));
DateTime startSendingTime = DateTime.Now; DateTime startSendingTime = DateTime.Now;
for (int i = 0; i != 10; ++i) for (int i = 0; i != NumPacketsToSend; ++i)
deviceHandler.SendPacket(sentPacket); deviceHandler.SendPacket(sentPacket);
DateTime endSendingTime = DateTime.Now; DateTime endSendingTime = DateTime.Now;
Thread.Sleep(TimeSpan.FromSeconds(5));
Packet packet; Packet packet;
DeviceHandlerResult result = deviceHandler.GetPacket(out packet); DeviceHandlerResult result = deviceHandler.GetPacket(out packet);
Assert.AreEqual(DeviceHandlerResult.Ok, result); Assert.AreEqual(DeviceHandlerResult.Ok, result);
Assert.AreEqual<uint>(NumPacketsToSend, deviceHandler.TotalStatistics.PacketsCaptured);
Assert.AreEqual(sentPacket.Length, packet.Length); Assert.AreEqual(sentPacket.Length, packet.Length);
MoreAssert.IsInRange(startSendingTime, endSendingTime + TimeSpan.FromSeconds(2), packet.Timestamp); MoreAssert.IsInRange(startSendingTime - TimeSpan.FromSeconds(1), endSendingTime + TimeSpan.FromSeconds(30), packet.Timestamp);
}
}
private static PcapDeviceHandler OpenLiveDevice()
{
IList<PcapLiveDevice> devices = PcapLiveDevice.AllLocalMachine;
MoreAssert.IsBiggerOrEqual(1, devices.Count);
PcapLiveDevice device = devices[0];
Assert.AreEqual("Network adapter 'Atheros AR8121/AR8113 PCI-E Ethernet Controller (Microsoft's Packet Scheduler) ' on local host", device.Description);
Assert.AreEqual(DeviceFlags.None, device.Flags);
Assert.AreEqual(1, device.Addresses.Count);
PcapAddress address = device.Addresses[0];
Assert.AreEqual("Address: INET 10.0.0.2 Netmask: INET 255.0.0.0 Broadcast: INET 255.255.255.255", address.ToString());
PcapDeviceHandler deviceHandler = device.Open();
try
{
Assert.AreEqual(DataLinkKind.Ethernet, deviceHandler.DataLink.Kind);
Assert.AreEqual("EN10MB (Ethernet)", deviceHandler.DataLink.ToString());
Assert.AreEqual(deviceHandler.DataLink, new PcapDataLink(deviceHandler.DataLink.Name));
Assert.IsTrue(deviceHandler.IsFileSystemByteOrder);
Assert.AreEqual(DeviceHandlerMode.Capture, deviceHandler.Mode);
Assert.IsFalse(deviceHandler.NonBlocking);
Assert.AreEqual(PcapDevice.DefaultSnapshotLength, deviceHandler.SnapshotLength);
Assert.AreEqual(new PcapTotalStatistics(0, 0, 0, 0), deviceHandler.TotalStatistics);
return deviceHandler;
}
catch (Exception)
{
deviceHandler.Dispose();
throw;
} }
} }
} }
......
...@@ -77,35 +77,23 @@ String^ PcapAddress::ToString() ...@@ -77,35 +77,23 @@ String^ PcapAddress::ToString()
{ {
StringBuilder^ result = gcnew StringBuilder(); StringBuilder^ result = gcnew StringBuilder();
if (Address != nullptr) AppendSocketAddressString(result, Address, "Address");
{ AppendSocketAddressString(result, Netmask, "Netmask");
result->Append("Address: "); AppendSocketAddressString(result, Broadcast, "Broadcast");
result->Append(Address->ToString()); AppendSocketAddressString(result, Destination, "Destination");
}
if (Netmask != nullptr)
{
if (result->Length != 0)
result->Append(" ");
result->Append("Netmask: ");
result->Append(Netmask->ToString());
}
if (Broadcast != nullptr) return result->ToString();
{ }
if (result->Length != 0)
result->Append(" ");
result->Append("Broadcast: ");
result->Append(Broadcast->ToString());
}
if (Destination != nullptr) // static
void PcapAddress::AppendSocketAddressString(StringBuilder^ stringBuilder, SocketAddress^ socketAddress, String^ title)
{
if (socketAddress != nullptr)
{ {
if (result->Length != 0) if (stringBuilder->Length != 0)
result->Append(" "); stringBuilder->Append(" ");
result->Append("Destination: "); stringBuilder->Append(title);
result->Append(Destination->ToString()); stringBuilder->Append(": ");
stringBuilder->Append(socketAddress);
} }
return result->ToString();
} }
\ No newline at end of file
...@@ -32,6 +32,9 @@ namespace PcapDotNet { namespace Core ...@@ -32,6 +32,9 @@ namespace PcapDotNet { namespace Core
virtual System::String^ ToString() override; virtual System::String^ ToString() override;
private:
static void AppendSocketAddressString(System::Text::StringBuilder^ stringBuilder, SocketAddress^ socketAddress, System::String^ title);
private: private:
SocketAddress^ _address; SocketAddress^ _address;
SocketAddress^ _netmask; SocketAddress^ _netmask;
......
...@@ -218,6 +218,12 @@ void PcapDeviceHandler::SendPacket(Packet^ packet) ...@@ -218,6 +218,12 @@ void PcapDeviceHandler::SendPacket(Packet^ packet)
throw BuildInvalidOperation("Failed writing to device"); throw BuildInvalidOperation("Failed writing to device");
} }
void PcapDeviceHandler::Transmit(PcapSendQueue^ sendQueue, bool isSync)
{
sendQueue->Transmit(_pcapDescriptor, isSync);
}
BpfFilter^ PcapDeviceHandler::CreateFilter(String^ filterString) BpfFilter^ PcapDeviceHandler::CreateFilter(String^ filterString)
{ {
return gcnew BpfFilter(_pcapDescriptor, filterString, _ipV4Netmask); return gcnew BpfFilter(_pcapDescriptor, filterString, _ipV4Netmask);
...@@ -251,11 +257,6 @@ PcapDeviceHandler::~PcapDeviceHandler() ...@@ -251,11 +257,6 @@ PcapDeviceHandler::~PcapDeviceHandler()
pcap_close(_pcapDescriptor); pcap_close(_pcapDescriptor);
} }
pcap_t* PcapDeviceHandler::Descriptor::get()
{
return _pcapDescriptor;
}
// static // static
Packet^ PcapDeviceHandler::CreatePacket(const pcap_pkthdr& packetHeader, const unsigned char* packetData, IDataLink^ dataLink) Packet^ PcapDeviceHandler::CreatePacket(const pcap_pkthdr& packetHeader, const unsigned char* packetData, IDataLink^ dataLink)
{ {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "PcapSampleStatistics.h" #include "PcapSampleStatistics.h"
#include "PcapTotalStatistics.h" #include "PcapTotalStatistics.h"
#include "PcapDataLink.h" #include "PcapDataLink.h"
#include "PcapSendQueue.h"
namespace PcapDotNet { namespace Core namespace PcapDotNet { namespace Core
{ {
...@@ -89,6 +90,7 @@ namespace PcapDotNet { namespace Core ...@@ -89,6 +90,7 @@ namespace PcapDotNet { namespace Core
DeviceHandlerResult GetNextStatistics([System::Runtime::InteropServices::Out] PcapSampleStatistics^% statistics); DeviceHandlerResult GetNextStatistics([System::Runtime::InteropServices::Out] PcapSampleStatistics^% statistics);
void SendPacket(BPacket::Packet^ packet); void SendPacket(BPacket::Packet^ packet);
void Transmit(PcapSendQueue^ sendQueue, bool isSync);
BpfFilter^ CreateFilter(System::String^ filterString); BpfFilter^ CreateFilter(System::String^ filterString);
void SetFilter(BpfFilter^ filter); void SetFilter(BpfFilter^ filter);
...@@ -98,12 +100,6 @@ namespace PcapDotNet { namespace Core ...@@ -98,12 +100,6 @@ namespace PcapDotNet { namespace Core
~PcapDeviceHandler(); ~PcapDeviceHandler();
internal:
property pcap_t* Descriptor
{
pcap_t* get();
}
private: private:
static BPacket::Packet^ CreatePacket(const pcap_pkthdr& packetHeader, const unsigned char* packetData, BPacket::IDataLink^ dataLink); static BPacket::Packet^ CreatePacket(const pcap_pkthdr& packetHeader, const unsigned char* packetData, BPacket::IDataLink^ dataLink);
static PcapSampleStatistics^ PcapDeviceHandler::CreateStatistics(const pcap_pkthdr& packetHeader, const unsigned char* packetData); static PcapSampleStatistics^ PcapDeviceHandler::CreateStatistics(const pcap_pkthdr& packetHeader, const unsigned char* packetData);
......
...@@ -21,14 +21,14 @@ void PcapSendQueue::Enqueue(Packet^ packet) ...@@ -21,14 +21,14 @@ void PcapSendQueue::Enqueue(Packet^ packet)
throw gcnew InvalidOperationException("Failed enqueueing to SendQueue"); throw gcnew InvalidOperationException("Failed enqueueing to SendQueue");
} }
void PcapSendQueue::Transmit(PcapDeviceHandler^ deviceHandler, bool isSync) PcapSendQueue::~PcapSendQueue()
{ {
unsigned int numBytesTransmitted = pcap_sendqueue_transmit(deviceHandler->Descriptor, _pcapSendQueue, isSync); pcap_sendqueue_destroy(_pcapSendQueue);
if (numBytesTransmitted < _pcapSendQueue->len)
throw PcapError::BuildInvalidOperation("Failed transmiting packets from queue", deviceHandler->Descriptor);
} }
PcapSendQueue::~PcapSendQueue() void PcapSendQueue::Transmit(pcap_t* pcapDescriptor, bool isSync)
{ {
pcap_sendqueue_destroy(_pcapSendQueue); unsigned int numBytesTransmitted = pcap_sendqueue_transmit(pcapDescriptor, _pcapSendQueue, isSync);
if (numBytesTransmitted < _pcapSendQueue->len)
throw PcapError::BuildInvalidOperation("Failed transmiting packets from queue", pcapDescriptor);
} }
#pragma once #pragma once
#include "PcapDeviceHandler.h"
#include "PcapDeclarations.h" #include "PcapDeclarations.h"
namespace PcapDotNet { namespace Core namespace PcapDotNet { namespace Core
...@@ -12,10 +11,11 @@ namespace PcapDotNet { namespace Core ...@@ -12,10 +11,11 @@ namespace PcapDotNet { namespace Core
void Enqueue(BPacket::Packet^ packet); void Enqueue(BPacket::Packet^ packet);
void Transmit(PcapDeviceHandler^ deviceHandler, bool isSync);
~PcapSendQueue(); ~PcapSendQueue();
internal:
void Transmit(pcap_t* pcapDescriptor, bool isSync);
private: private:
pcap_send_queue *_pcapSendQueue; pcap_send_queue *_pcapSendQueue;
}; };
......
...@@ -29,3 +29,19 @@ unsigned int PcapTotalStatistics::PacketsCaptured::get() ...@@ -29,3 +29,19 @@ unsigned int PcapTotalStatistics::PacketsCaptured::get()
{ {
return _packetsCaptured; return _packetsCaptured;
} }
bool PcapTotalStatistics::Equals(PcapTotalStatistics^ other)
{
if (other == nullptr)
return false;
return (PacketsReceived == other->PacketsReceived &&
PacketsDroppedByDriver == other->PacketsDroppedByDriver &&
PacketsDroppedByInterface == other->PacketsDroppedByInterface &&
PacketsCaptured == other->PacketsCaptured);
}
bool PcapTotalStatistics::Equals(Object^ other)
{
return Equals(dynamic_cast<PcapTotalStatistics^>(other));
}
...@@ -26,6 +26,9 @@ namespace PcapDotNet { namespace Core ...@@ -26,6 +26,9 @@ namespace PcapDotNet { namespace Core
{ {
unsigned int get(); unsigned int get();
} }
bool Equals(PcapTotalStatistics^ other);
virtual bool Equals(System::Object^ other) override;
private: private:
unsigned int _packetsReceived; unsigned int _packetsReceived;
......
...@@ -71,6 +71,7 @@ ...@@ -71,6 +71,7 @@
GenerateDebugInformation="true" GenerateDebugInformation="true"
AssemblyDebug="1" AssemblyDebug="1"
TargetMachine="1" TargetMachine="1"
Profile="true"
/> />
<Tool <Tool
Name="VCALinkTool" Name="VCALinkTool"
......
...@@ -59,12 +59,10 @@ Global ...@@ -59,12 +59,10 @@ Global
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Win32.ActiveCfg = Debug|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Debug|Win32.ActiveCfg = Debug|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Any CPU.Build.0 = Release|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Any CPU.Build.0 = Release|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Win32.ActiveCfg = Release|Any CPU {5B4E80EB-DED5-4F20-871A-D9567F3F79DD}.Release|Win32.ActiveCfg = Release|Any CPU
{89C63BE1-AF9A-472E-B256-A4F56B1655A7}.Debug|Any CPU.ActiveCfg = Debug|Win32 {89C63BE1-AF9A-472E-B256-A4F56B1655A7}.Debug|Any CPU.ActiveCfg = Debug|Win32
{89C63BE1-AF9A-472E-B256-A4F56B1655A7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 {89C63BE1-AF9A-472E-B256-A4F56B1655A7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
......
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