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
- DataColumnChangeEvent.cs
- UriSection.cs
- UnmanagedBitmapWrapper.cs
- WebPartMenuStyle.cs
- ErrorWebPart.cs
- SHA256.cs
- ImageAutomationPeer.cs
- XmlQueryCardinality.cs
- PTUtility.cs
- RemoteWebConfigurationHostStream.cs
- TreeView.cs
- WebPartConnection.cs
- FormView.cs
- OpCopier.cs
- SplineKeyFrames.cs
- MeasurementDCInfo.cs
- ColorMatrix.cs
- TrackingStringDictionary.cs
- RegexStringValidatorAttribute.cs
- XmlQualifiedNameTest.cs
- _SpnDictionary.cs
- TileBrush.cs
- RoleGroupCollectionEditor.cs
- JournalEntryStack.cs
- CustomBindingElementCollection.cs
- EventEntry.cs
- ImageMap.cs
- SoapTypeAttribute.cs
- DelegateArgumentValue.cs
- UrlMapping.cs
- UInt16Storage.cs
- RewritingValidator.cs
- StringAnimationBase.cs
- SQLConvert.cs
- ThemeInfoAttribute.cs
- DataGridViewSortCompareEventArgs.cs
- MessageEncoder.cs
- ProtocolViolationException.cs
- DefaultHttpHandler.cs
- ScopelessEnumAttribute.cs
- ObjectDataSource.cs
- ContextMenu.cs
- TextBoxBaseDesigner.cs
- Brushes.cs
- __Filters.cs
- NameHandler.cs
- ParameterElement.cs
- LeftCellWrapper.cs
- SafeRightsManagementHandle.cs
- Popup.cs
- SemanticResolver.cs
- DivideByZeroException.cs
- MenuTracker.cs
- BitConverter.cs
- SettingsContext.cs
- ServiceHostingEnvironment.cs
- HttpProxyTransportBindingElement.cs
- XmlSerializerSection.cs
- SortQuery.cs
- RestHandlerFactory.cs
- ScriptComponentDescriptor.cs
- WebControl.cs
- ColumnBinding.cs
- DocumentApplication.cs
- _TimerThread.cs
- XmlFormatExtensionAttribute.cs
- CustomWebEventKey.cs
- CodeMemberField.cs
- CultureInfoConverter.cs
- DataServiceQueryException.cs
- PropertyInfoSet.cs
- CultureSpecificCharacterBufferRange.cs
- HttpClientCertificate.cs
- XmlSchemaSubstitutionGroup.cs
- compensatingcollection.cs
- ListBox.cs
- Transactions.cs
- DbReferenceCollection.cs
- SqlExpander.cs
- Exception.cs
- UInt64Storage.cs
- DWriteFactory.cs
- StringFreezingAttribute.cs
- DeviceContext2.cs
- SafeProcessHandle.cs
- UdpAnnouncementEndpoint.cs
- ConnectionPoint.cs
- ApplicationSettingsBase.cs
- AdRotatorDesigner.cs
- StringPropertyBuilder.cs
- _NestedMultipleAsyncResult.cs
- WorkflowServiceAttributesTypeConverter.cs
- XmlMemberMapping.cs
- TextServicesHost.cs
- MetafileHeader.cs
- RulePatternOps.cs
- MatrixConverter.cs
- BindingSource.cs
- XPathDescendantIterator.cs
- DataRowChangeEvent.cs