Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / NetworkInformation / PingReply.cs / 1305376 / PingReply.cs
using System.Net.Sockets;
using System.Runtime.InteropServices;
namespace System.Net.NetworkInformation
{
public class PingReply
{
IPAddress address;
PingOptions options;
IPStatus ipStatus; // the status code returned by icmpsendecho, or the icmp status field on the raw socket
long rtt; // the round trip time.
byte[] buffer; //buffer of the data
internal PingReply(){
}
internal PingReply (IPStatus ipStatus) {
this.ipStatus = ipStatus;
buffer = new byte[0];
}
// The downlevel constructor.
internal PingReply (byte[] data, int dataLength, IPAddress address, int time) {
this.address = address;
rtt = time;
ipStatus = GetIPStatus ((IcmpV4Type)data[20],(IcmpV4Code) data[21]);
if (ipStatus == IPStatus.Success) {
buffer = new byte[dataLength - 28];
Array.Copy (data, 28, buffer, 0, dataLength - 28);
}
else
buffer = new byte[0];
}
// the main constructor for the icmpsendecho apis
internal PingReply (IcmpEchoReply reply) {
address = new IPAddress (reply.address);
ipStatus = (IPStatus)reply.status; //the icmpsendecho ip status codes
//only copy the data if we succeed w/ the ping operation
if (ipStatus == IPStatus.Success) {
rtt = (long)reply.roundTripTime;
buffer = new byte[reply.dataSize];
Marshal.Copy (reply.data, buffer, 0, reply.dataSize);
options = new PingOptions (reply.options);
}
else
buffer = new byte[0];
}
// the main constructor for the icmpsendecho apis
internal PingReply (Icmp6EchoReply reply, IntPtr dataPtr, int sendSize) {
address = new IPAddress(reply.Address.Address,reply.Address.ScopeID);
ipStatus = (IPStatus)reply.Status; //the icmpsendecho ip status codes
//only copy the data if we succeed w/ the ping operation
if (ipStatus == IPStatus.Success) {
rtt = (long)reply.RoundTripTime;
buffer = new byte[sendSize];
Marshal.Copy (IntPtrHelper.Add(dataPtr, 36), buffer, 0, sendSize);
//options = new PingOptions (reply.options);
}
else
buffer = new byte[0];
}
//translates the relevant icmpsendecho codes to a ipstatus code
private IPStatus GetIPStatus (IcmpV4Type type, IcmpV4Code code) {
switch (type) {
case IcmpV4Type.ICMP4_ECHO_REPLY:
return IPStatus.Success;
case IcmpV4Type.ICMP4_SOURCE_QUENCH:
return IPStatus.SourceQuench;
case IcmpV4Type.ICMP4_PARAM_PROB:
return IPStatus.ParameterProblem;
case IcmpV4Type.ICMP4_TIME_EXCEEDED:
return IPStatus.TtlExpired;
case IcmpV4Type.ICMP4_DST_UNREACH:
{
switch (code) {
case IcmpV4Code.ICMP4_UNREACH_NET:
return IPStatus.DestinationNetworkUnreachable;
case IcmpV4Code.ICMP4_UNREACH_HOST:
return IPStatus.DestinationHostUnreachable;
case IcmpV4Code.ICMP4_UNREACH_PROTOCOL:
return IPStatus.DestinationProtocolUnreachable;
case IcmpV4Code.ICMP4_UNREACH_PORT:
return IPStatus.DestinationPortUnreachable;
case IcmpV4Code.ICMP4_UNREACH_FRAG_NEEDED:
return IPStatus.PacketTooBig;
default:
return IPStatus.DestinationUnreachable;
}
}
}
return IPStatus.Unknown;
}
//the basic properties
public IPStatus Status { get { return ipStatus; } }
public IPAddress Address { get { return address; } }
public long RoundtripTime { get { return rtt; } }
public PingOptions Options {
get {
if (!ComNetOS.IsWin2K) {
throw new PlatformNotSupportedException(SR.GetString(SR.Win2000Required));
}
return options;
}
}
public byte[] Buffer { get { return buffer; } }
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System.Net.Sockets;
using System.Runtime.InteropServices;
namespace System.Net.NetworkInformation
{
public class PingReply
{
IPAddress address;
PingOptions options;
IPStatus ipStatus; // the status code returned by icmpsendecho, or the icmp status field on the raw socket
long rtt; // the round trip time.
byte[] buffer; //buffer of the data
internal PingReply(){
}
internal PingReply (IPStatus ipStatus) {
this.ipStatus = ipStatus;
buffer = new byte[0];
}
// The downlevel constructor.
internal PingReply (byte[] data, int dataLength, IPAddress address, int time) {
this.address = address;
rtt = time;
ipStatus = GetIPStatus ((IcmpV4Type)data[20],(IcmpV4Code) data[21]);
if (ipStatus == IPStatus.Success) {
buffer = new byte[dataLength - 28];
Array.Copy (data, 28, buffer, 0, dataLength - 28);
}
else
buffer = new byte[0];
}
// the main constructor for the icmpsendecho apis
internal PingReply (IcmpEchoReply reply) {
address = new IPAddress (reply.address);
ipStatus = (IPStatus)reply.status; //the icmpsendecho ip status codes
//only copy the data if we succeed w/ the ping operation
if (ipStatus == IPStatus.Success) {
rtt = (long)reply.roundTripTime;
buffer = new byte[reply.dataSize];
Marshal.Copy (reply.data, buffer, 0, reply.dataSize);
options = new PingOptions (reply.options);
}
else
buffer = new byte[0];
}
// the main constructor for the icmpsendecho apis
internal PingReply (Icmp6EchoReply reply, IntPtr dataPtr, int sendSize) {
address = new IPAddress(reply.Address.Address,reply.Address.ScopeID);
ipStatus = (IPStatus)reply.Status; //the icmpsendecho ip status codes
//only copy the data if we succeed w/ the ping operation
if (ipStatus == IPStatus.Success) {
rtt = (long)reply.RoundTripTime;
buffer = new byte[sendSize];
Marshal.Copy (IntPtrHelper.Add(dataPtr, 36), buffer, 0, sendSize);
//options = new PingOptions (reply.options);
}
else
buffer = new byte[0];
}
//translates the relevant icmpsendecho codes to a ipstatus code
private IPStatus GetIPStatus (IcmpV4Type type, IcmpV4Code code) {
switch (type) {
case IcmpV4Type.ICMP4_ECHO_REPLY:
return IPStatus.Success;
case IcmpV4Type.ICMP4_SOURCE_QUENCH:
return IPStatus.SourceQuench;
case IcmpV4Type.ICMP4_PARAM_PROB:
return IPStatus.ParameterProblem;
case IcmpV4Type.ICMP4_TIME_EXCEEDED:
return IPStatus.TtlExpired;
case IcmpV4Type.ICMP4_DST_UNREACH:
{
switch (code) {
case IcmpV4Code.ICMP4_UNREACH_NET:
return IPStatus.DestinationNetworkUnreachable;
case IcmpV4Code.ICMP4_UNREACH_HOST:
return IPStatus.DestinationHostUnreachable;
case IcmpV4Code.ICMP4_UNREACH_PROTOCOL:
return IPStatus.DestinationProtocolUnreachable;
case IcmpV4Code.ICMP4_UNREACH_PORT:
return IPStatus.DestinationPortUnreachable;
case IcmpV4Code.ICMP4_UNREACH_FRAG_NEEDED:
return IPStatus.PacketTooBig;
default:
return IPStatus.DestinationUnreachable;
}
}
}
return IPStatus.Unknown;
}
//the basic properties
public IPStatus Status { get { return ipStatus; } }
public IPAddress Address { get { return address; } }
public long RoundtripTime { get { return rtt; } }
public PingOptions Options {
get {
if (!ComNetOS.IsWin2K) {
throw new PlatformNotSupportedException(SR.GetString(SR.Win2000Required));
}
return options;
}
}
public byte[] Buffer { get { return buffer; } }
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StaticTextPointer.cs
- BlurEffect.cs
- ResourceKey.cs
- ProxyWebPartConnectionCollection.cs
- ConfigurationProperty.cs
- ObjectListField.cs
- DataGridViewCellCollection.cs
- KnownTypesHelper.cs
- SerializationInfo.cs
- Light.cs
- AsyncResult.cs
- OracleDataAdapter.cs
- CreateParams.cs
- WSSecurityTokenSerializer.cs
- SqlClientWrapperSmiStreamChars.cs
- BoolExpr.cs
- TextDecorationCollection.cs
- GlyphRunDrawing.cs
- CapabilitiesAssignment.cs
- PopOutPanel.cs
- DataControlFieldTypeEditor.cs
- Native.cs
- InlinedAggregationOperatorEnumerator.cs
- TextTreeRootNode.cs
- Overlapped.cs
- TraceInternal.cs
- grammarelement.cs
- OutArgument.cs
- FrameDimension.cs
- ResourcePool.cs
- EntityContainerRelationshipSet.cs
- DataGridViewRowStateChangedEventArgs.cs
- StringSource.cs
- AccessibleObject.cs
- SurrogateSelector.cs
- HitTestDrawingContextWalker.cs
- AttachedPropertyInfo.cs
- EmptyStringExpandableObjectConverter.cs
- SQLBinary.cs
- CompressEmulationStream.cs
- UIElement.cs
- MenuItemCollection.cs
- CultureTable.cs
- COM2PropertyBuilderUITypeEditor.cs
- ReverseInheritProperty.cs
- ContentWrapperAttribute.cs
- milrender.cs
- CodeSnippetTypeMember.cs
- FixedStringLookup.cs
- WindowCollection.cs
- MessageContractAttribute.cs
- GeometryHitTestResult.cs
- AQNBuilder.cs
- FocusChangedEventArgs.cs
- ObjectAnimationBase.cs
- RadialGradientBrush.cs
- FormParameter.cs
- ToolStripItemCollection.cs
- XPathDescendantIterator.cs
- WebMessageEncodingBindingElement.cs
- CacheModeConverter.cs
- unsafeIndexingFilterStream.cs
- GroupQuery.cs
- ListViewItem.cs
- DelegateBodyWriter.cs
- While.cs
- CustomWebEventKey.cs
- WebScriptMetadataInstanceContextProvider.cs
- LinkButton.cs
- ResizingMessageFilter.cs
- DbSourceCommand.cs
- Root.cs
- ApplicationServiceHelper.cs
- unsafenativemethodstextservices.cs
- AggregateNode.cs
- HuffmanTree.cs
- sqlpipe.cs
- PhysicalAddress.cs
- DataServiceException.cs
- PeerNameResolver.cs
- SimpleApplicationHost.cs
- XmlRawWriter.cs
- MemberDomainMap.cs
- DataSourceCacheDurationConverter.cs
- RegistrySecurity.cs
- InkCollectionBehavior.cs
- ADMembershipUser.cs
- SqlPersonalizationProvider.cs
- CollectionView.cs
- ApplicationServiceHelper.cs
- Rfc4050KeyFormatter.cs
- SQLSingle.cs
- UncommonField.cs
- SqlDataAdapter.cs
- UnsettableComboBox.cs
- PersonalizationProvider.cs
- ExceptionUtil.cs
- UnitControl.cs
- IISUnsafeMethods.cs
- BackStopAuthenticationModule.cs