Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / NetworkInformation / SystemMulticastIPAddressInformation.cs / 1 / SystemMulticastIPAddressInformation.cs
///
/// Provides support for ip configuation information and statistics.
///
///
namespace System.Net.NetworkInformation {
using System.Net;
using System.Net.Sockets;
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.ComponentModel;
using System.Security.Permissions;
using Microsoft.Win32;
///
/// Specifies the Multicast addresses for an interface.
/// OS < XP
///
///
internal class SystemMulticastIPAddressInformation:MulticastIPAddressInformation {
private IpAdapterAddress adapterAddress;
private SystemIPAddressInformation innerInfo;
private SystemMulticastIPAddressInformation() {
}
/*
// Consider removing.
internal SystemMulticastIPAddressInformation(IpAdapterInfo ipAdapterInfo, IPAddress address){
innerInfo = new SystemIPAddressInformation(address);
DateTime tempdate = new DateTime(1970,1,1);
tempdate = tempdate.AddSeconds(ipAdapterInfo.leaseExpires);
dhcpLeaseLifetime = (long)((tempdate - DateTime.UtcNow).TotalSeconds);
}
*/
internal SystemMulticastIPAddressInformation(IpAdapterAddress adapterAddress, IPAddress ipAddress){
innerInfo = new SystemIPAddressInformation(adapterAddress,ipAddress);
this.adapterAddress = adapterAddress;
}
///
public override IPAddress Address{get {return innerInfo.Address;}}
///
/// The address is a cluster address and shouldn't be used by most applications.
public override bool IsTransient{
get {
return (innerInfo.IsTransient);
}
}
///
/// This address can be used for DNS.
public override bool IsDnsEligible{
get {
return (innerInfo.IsDnsEligible);
}
}
///
public override PrefixOrigin PrefixOrigin{
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return PrefixOrigin.Other;
}
}
///
public override SuffixOrigin SuffixOrigin{
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return SuffixOrigin.Other;
}
}
///
/// IPv6 only. Specifies the duplicate address detection state. Only supported
/// for IPv6. If called on an IPv4 address, will throw a "not supported" exception.
public override DuplicateAddressDetectionState DuplicateAddressDetectionState{
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return DuplicateAddressDetectionState.Invalid;
}
}
///
/// Specifies the valid lifetime of the address in seconds.
public override long AddressValidLifetime{
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return 0;
}
}
///
/// Specifies the prefered lifetime of the address in seconds.
public override long AddressPreferredLifetime{
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return 0;
}
}
///
///
/// Specifies the prefered lifetime of the address in seconds.
public override long DhcpLeaseLifetime{
get {
return 0;
}
}
//helper method that marshals the addressinformation into the classes
internal static MulticastIPAddressInformationCollection ToAddressInformationCollection(IntPtr ptr) {
//we don't know the number of addresses up front, so we create an arraylist
//to temporarily store them.
MulticastIPAddressInformationCollection addressList = new MulticastIPAddressInformationCollection();
//if there is no address, just return;
if (ptr == IntPtr.Zero)
return addressList;
//get the first address
IpAdapterAddress addr = (IpAdapterAddress)Marshal.PtrToStructure(ptr,typeof(IpAdapterAddress));
//determine the address family used to create the IPAddress
AddressFamily family = (addr.address.addressLength > 16)?AddressFamily.InterNetworkV6:AddressFamily.InterNetwork;
SocketAddress sockAddress = new SocketAddress(family,(int)addr.address.addressLength);
Marshal.Copy(addr.address.address,sockAddress.m_Buffer,0,addr.address.addressLength);
//unfortunately, the only way to currently create an ipaddress is through IPEndPoint
IPEndPoint ep;
if (family == AddressFamily.InterNetwork )
ep = (IPEndPoint)IPEndPoint.Any.Create(sockAddress);
else
ep = (IPEndPoint)IPEndPoint.IPv6Any.Create(sockAddress);
//add the ipaddress to the arraylist
addressList.InternalAdd(new SystemMulticastIPAddressInformation(addr,ep.Address));
//repeat for all of the addresses
while ( addr.next != IntPtr.Zero ) {
addr = (IpAdapterAddress)Marshal.PtrToStructure(addr.next,typeof(IpAdapterAddress));
//determine the address family used to create the IPAddress
family = (addr.address.addressLength > 16)?AddressFamily.InterNetworkV6:AddressFamily.InterNetwork;
sockAddress = new SocketAddress(family,(int)addr.address.addressLength);
Marshal.Copy(addr.address.address,sockAddress.m_Buffer,0,addr.address.addressLength);
//use the endpoint to create the ipaddress
if (family == AddressFamily.InterNetwork )
ep = (IPEndPoint)IPEndPoint.Any.Create(sockAddress);
else
ep = (IPEndPoint)IPEndPoint.IPv6Any.Create(sockAddress);
addressList.InternalAdd(new SystemMulticastIPAddressInformation(addr,ep.Address));
}
return addressList;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EndpointDiscoveryBehavior.cs
- ActivationArguments.cs
- Stroke.cs
- MaterializeFromAtom.cs
- ITreeGenerator.cs
- ObjectStateManager.cs
- HttpServerProtocol.cs
- Int64.cs
- PrePostDescendentsWalker.cs
- Axis.cs
- StringUtil.cs
- DSASignatureDeformatter.cs
- _NegoStream.cs
- ManagementDateTime.cs
- OdbcConnectionOpen.cs
- XmlBaseWriter.cs
- QilReplaceVisitor.cs
- GridView.cs
- MessageTransmitTraceRecord.cs
- ReflectionPermission.cs
- RealizationDrawingContextWalker.cs
- WebBrowserEvent.cs
- TypeConvertions.cs
- AstTree.cs
- RadialGradientBrush.cs
- MailSettingsSection.cs
- RouteItem.cs
- HitTestParameters.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- StylusOverProperty.cs
- SqlDeflator.cs
- ScriptDescriptor.cs
- AccessText.cs
- Selection.cs
- NativeMethods.cs
- ReliableSession.cs
- RegisteredArrayDeclaration.cs
- XPathItem.cs
- CompiledQuery.cs
- SimpleTypeResolver.cs
- ReadOnlyMetadataCollection.cs
- WsatRegistrationHeader.cs
- Closure.cs
- PathFigureCollection.cs
- ArithmeticException.cs
- CounterSample.cs
- ParserStreamGeometryContext.cs
- OracleSqlParser.cs
- BitmapMetadataEnumerator.cs
- DataGridPageChangedEventArgs.cs
- PlatformNotSupportedException.cs
- UrlAuthFailedErrorFormatter.cs
- DrawToolTipEventArgs.cs
- HtmlSelectionListAdapter.cs
- TextDecorationCollection.cs
- mactripleDES.cs
- __TransparentProxy.cs
- CssTextWriter.cs
- EditingMode.cs
- RuleValidation.cs
- FloaterBaseParaClient.cs
- UnsafePeerToPeerMethods.cs
- UnsignedPublishLicense.cs
- XamlVector3DCollectionSerializer.cs
- SystemIPGlobalStatistics.cs
- AtomServiceDocumentSerializer.cs
- MetadataReference.cs
- XMLSyntaxException.cs
- CompoundFileIOPermission.cs
- AutomationElementCollection.cs
- DataControlField.cs
- EncryptedXml.cs
- EditorZoneBase.cs
- JumpItem.cs
- DataGridViewRowEventArgs.cs
- HttpProfileBase.cs
- ChangeDirector.cs
- ExclusiveTcpListener.cs
- remotingproxy.cs
- ExtentJoinTreeNode.cs
- InvalidOleVariantTypeException.cs
- ConfigurationValidatorAttribute.cs
- RijndaelManagedTransform.cs
- ClientFormsAuthenticationCredentials.cs
- TickBar.cs
- MenuItemAutomationPeer.cs
- DPCustomTypeDescriptor.cs
- DispatchChannelSink.cs
- ClientConvert.cs
- SoapClientMessage.cs
- CounterSample.cs
- RelationshipType.cs
- XmlNamespaceDeclarationsAttribute.cs
- ExpressionBinding.cs
- ValuePattern.cs
- UnmanagedMemoryStream.cs
- HMACMD5.cs
- StringUtil.cs
- Marshal.cs
- WebScriptEnablingElement.cs