Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / NetworkInformation / PingReply.cs / 1 / 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; } }
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeStatementCollection.cs
- ContentElementAutomationPeer.cs
- dataprotectionpermissionattribute.cs
- DbCommandDefinition.cs
- DiagnosticStrings.cs
- XslCompiledTransform.cs
- Rectangle.cs
- FontConverter.cs
- OutputCacheSettingsSection.cs
- WebConfigurationHostFileChange.cs
- SkipQueryOptionExpression.cs
- UInt32Storage.cs
- FrameworkElementAutomationPeer.cs
- SymbolMethod.cs
- DataBoundControlHelper.cs
- FormViewUpdateEventArgs.cs
- ProfilePropertySettingsCollection.cs
- OracleCommandBuilder.cs
- CodeParameterDeclarationExpression.cs
- CursorInteropHelper.cs
- ControlPager.cs
- Validator.cs
- Stackframe.cs
- FileDataSourceCache.cs
- EnumBuilder.cs
- WebResponse.cs
- DataGridViewDataConnection.cs
- UrlAuthFailedErrorFormatter.cs
- MultiBinding.cs
- DataGridViewTopRowAccessibleObject.cs
- WaveHeader.cs
- ObjectCloneHelper.cs
- PnrpPermission.cs
- WindowsBrush.cs
- WebPartCloseVerb.cs
- CheckBox.cs
- DrawingGroup.cs
- DetailsViewDeletedEventArgs.cs
- PeerName.cs
- ActivityDesigner.cs
- DeadLetterQueue.cs
- CopyOnWriteList.cs
- TextSerializer.cs
- SafeCryptoHandles.cs
- ExceptionCollection.cs
- SizeConverter.cs
- GenericsInstances.cs
- X509PeerCertificateAuthentication.cs
- ByteStreamMessageEncodingElement.cs
- SrgsRuleRef.cs
- recordstate.cs
- DaylightTime.cs
- XPathParser.cs
- FatalException.cs
- ErrorTolerantObjectWriter.cs
- ScriptServiceAttribute.cs
- RegularExpressionValidator.cs
- DataGridViewRowPrePaintEventArgs.cs
- TraceShell.cs
- CheckBoxAutomationPeer.cs
- WebPartEditorOkVerb.cs
- SignatureDescription.cs
- RbTree.cs
- WorkflowClientDeliverMessageWrapper.cs
- CryptoConfig.cs
- DodSequenceMerge.cs
- safex509handles.cs
- PagesChangedEventArgs.cs
- FormClosingEvent.cs
- WebServiceErrorEvent.cs
- ContentPresenter.cs
- X509Certificate2Collection.cs
- XamlSerializerUtil.cs
- IItemProperties.cs
- EntityCollection.cs
- HttpRequestCacheValidator.cs
- OdbcPermission.cs
- Wildcard.cs
- BooleanStorage.cs
- ChameleonKey.cs
- elementinformation.cs
- RIPEMD160.cs
- CompilerInfo.cs
- SystemGatewayIPAddressInformation.cs
- TypeUnloadedException.cs
- FixedSOMFixedBlock.cs
- SafeNativeMethods.cs
- Columns.cs
- ColorMap.cs
- ExtendedPropertyDescriptor.cs
- AvTraceDetails.cs
- RotateTransform.cs
- Stackframe.cs
- PreviewKeyDownEventArgs.cs
- InternalCache.cs
- MemoryMappedFileSecurity.cs
- Clipboard.cs
- UnsafeNativeMethodsTablet.cs
- WebScriptMetadataMessageEncoderFactory.cs
- StorageFunctionMapping.cs