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
- Transform.cs
- IODescriptionAttribute.cs
- SoapTypeAttribute.cs
- BufferedWebEventProvider.cs
- WriteableBitmap.cs
- ReadOnlyAttribute.cs
- UnsafeNativeMethods.cs
- VersionUtil.cs
- InlineCollection.cs
- SmtpCommands.cs
- DBSqlParserTable.cs
- CustomPopupPlacement.cs
- RectAnimationClockResource.cs
- IndicCharClassifier.cs
- Thread.cs
- SourceCollection.cs
- InputElement.cs
- Lasso.cs
- PropertyEmitter.cs
- DataPointer.cs
- UriTemplatePathSegment.cs
- IIS7UserPrincipal.cs
- MasterPage.cs
- ComponentCommands.cs
- httpapplicationstate.cs
- DataObjectAttribute.cs
- DataGridViewIntLinkedList.cs
- latinshape.cs
- FillBehavior.cs
- Content.cs
- CircleHotSpot.cs
- DecoderReplacementFallback.cs
- XmlCharType.cs
- WebConfigurationFileMap.cs
- ErrorLog.cs
- IconConverter.cs
- StateMachineHelpers.cs
- DataRow.cs
- IntPtr.cs
- XamlStyleSerializer.cs
- AutomationIdentifier.cs
- activationcontext.cs
- FileVersion.cs
- HMACSHA1.cs
- ObjectConverter.cs
- RoleExceptions.cs
- ChtmlTextWriter.cs
- AssemblyAttributesGoHere.cs
- FontStretches.cs
- XhtmlMobileTextWriter.cs
- MouseGesture.cs
- QilChoice.cs
- XsdBuilder.cs
- XPathNavigator.cs
- ThaiBuddhistCalendar.cs
- ObjectItemConventionAssemblyLoader.cs
- MarkupObject.cs
- AssemblyName.cs
- RenderDataDrawingContext.cs
- DBSqlParserTable.cs
- TailCallAnalyzer.cs
- HostProtectionPermission.cs
- RadioButtonList.cs
- ReaderWriterLockWrapper.cs
- WebPartTransformerCollection.cs
- PlatformNotSupportedException.cs
- WorkflowInstanceSuspendedRecord.cs
- EntityReference.cs
- TreeBuilder.cs
- Part.cs
- PenCursorManager.cs
- SizeF.cs
- COM2ComponentEditor.cs
- LinearQuaternionKeyFrame.cs
- CompilationUtil.cs
- PrintDocument.cs
- Link.cs
- LessThanOrEqual.cs
- ObjectStateManager.cs
- HMACSHA1.cs
- StreamMarshaler.cs
- Transform3DCollection.cs
- WebPartEditorCancelVerb.cs
- XmlNodeComparer.cs
- TextProviderWrapper.cs
- XmlCustomFormatter.cs
- _IPv4Address.cs
- RawAppCommandInputReport.cs
- QuaternionValueSerializer.cs
- UnsafeNativeMethodsMilCoreApi.cs
- CAGDesigner.cs
- CalculatedColumn.cs
- ToolStripInSituService.cs
- EntityExpressionVisitor.cs
- QilGeneratorEnv.cs
- ScriptComponentDescriptor.cs
- XmlDataCollection.cs
- CellTreeNode.cs
- Imaging.cs
- SapiRecoContext.cs