Code:
/ DotNET / DotNET / 8.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
- InternalTypeHelper.cs
- ModuleBuilderData.cs
- CacheDependency.cs
- WebServiceReceive.cs
- TemplatedMailWebEventProvider.cs
- TriggerCollection.cs
- IItemProperties.cs
- ObjectSet.cs
- AutomationEvent.cs
- ColumnResult.cs
- WmlObjectListAdapter.cs
- AudioException.cs
- util.cs
- UserControlDocumentDesigner.cs
- CollectionContainer.cs
- RichTextBoxConstants.cs
- InputProcessorProfiles.cs
- Utils.cs
- Choices.cs
- MessageQueue.cs
- VirtualPathUtility.cs
- ExpandSegment.cs
- XmlSchemaAppInfo.cs
- ToolStripHighContrastRenderer.cs
- NumericUpDownAcceleration.cs
- DrawListViewColumnHeaderEventArgs.cs
- SingleAnimation.cs
- TreeViewImageKeyConverter.cs
- PersonalizationState.cs
- TypeBrowserDialog.cs
- DataServiceQueryOfT.cs
- ContentWrapperAttribute.cs
- SHA256Cng.cs
- ErrorWebPart.cs
- AddInContractAttribute.cs
- UserControlParser.cs
- SqlProvider.cs
- RegexInterpreter.cs
- TemplatedWizardStep.cs
- X509SecurityTokenProvider.cs
- RotationValidation.cs
- Accessors.cs
- Expressions.cs
- RuntimeTrackingProfile.cs
- PixelShader.cs
- DataRowCollection.cs
- SudsParser.cs
- Pair.cs
- MethodBuilderInstantiation.cs
- basevalidator.cs
- TreeViewItem.cs
- TileModeValidation.cs
- ToolStripPanel.cs
- EntityDataSourceColumn.cs
- SBCSCodePageEncoding.cs
- MenuScrollingVisibilityConverter.cs
- TypeUsage.cs
- IssuanceLicense.cs
- ConfigurationManagerHelperFactory.cs
- AutomationElementIdentifiers.cs
- MSAANativeProvider.cs
- StringComparer.cs
- Workspace.cs
- MetadataCollection.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- ExpandSegmentCollection.cs
- HwndHostAutomationPeer.cs
- HostUtils.cs
- QuaternionAnimation.cs
- TransactionScope.cs
- webbrowsersite.cs
- TextTreeNode.cs
- CanonicalXml.cs
- CoreSwitches.cs
- FilterableAttribute.cs
- IndicCharClassifier.cs
- WebPartDeleteVerb.cs
- NamedObject.cs
- ISFTagAndGuidCache.cs
- RankException.cs
- MemberInfoSerializationHolder.cs
- XsltInput.cs
- LifetimeServices.cs
- CryptoHelper.cs
- SAPIEngineTypes.cs
- OledbConnectionStringbuilder.cs
- DefaultDiscoveryServiceExtension.cs
- XmlIgnoreAttribute.cs
- JavaScriptString.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- HttpCachePolicyElement.cs
- PnrpPermission.cs
- ManipulationDelta.cs
- XmlSchemaFacet.cs
- TemplateField.cs
- XsltException.cs
- ResourceAssociationSet.cs
- COM2EnumConverter.cs
- MaterialGroup.cs
- OdbcException.cs