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
- SchemaNamespaceManager.cs
- CaseStatementSlot.cs
- TimeStampChecker.cs
- CodeGeneratorOptions.cs
- XmlCDATASection.cs
- XmlSecureResolver.cs
- MetadataItemEmitter.cs
- GridViewPageEventArgs.cs
- SvcMapFileSerializer.cs
- OdbcParameterCollection.cs
- LinkedResourceCollection.cs
- Graph.cs
- TypeSystem.cs
- UpDownEvent.cs
- RepeatBehavior.cs
- RtfNavigator.cs
- ImageMapEventArgs.cs
- SaveFileDialog.cs
- SiteOfOriginContainer.cs
- SimpleType.cs
- CreateUserWizard.cs
- WaitForChangedResult.cs
- PropertyTabAttribute.cs
- InsufficientExecutionStackException.cs
- TaiwanCalendar.cs
- DataBindingExpressionBuilder.cs
- DataGridViewCellFormattingEventArgs.cs
- DataSetUtil.cs
- errorpatternmatcher.cs
- ToolStripSplitStackLayout.cs
- FilterElement.cs
- EventLogRecord.cs
- DelimitedListTraceListener.cs
- UnsafeNativeMethods.cs
- WmpBitmapDecoder.cs
- DataGridViewCellCollection.cs
- DesignerDeviceConfig.cs
- InstanceDescriptor.cs
- OperationCanceledException.cs
- MailWebEventProvider.cs
- GroupBox.cs
- ObjectNotFoundException.cs
- AmbientProperties.cs
- HybridDictionary.cs
- ObjectTypeMapping.cs
- HttpCapabilitiesEvaluator.cs
- TypeLibConverter.cs
- SqlInternalConnectionSmi.cs
- MissingMethodException.cs
- TypeUnloadedException.cs
- Rfc2898DeriveBytes.cs
- DataServiceCollectionOfT.cs
- DataSourceCache.cs
- Message.cs
- StylusTip.cs
- WindowsListViewGroup.cs
- ClickablePoint.cs
- CodeFieldReferenceExpression.cs
- HandleRef.cs
- GridViewRow.cs
- WhitespaceRule.cs
- Decoder.cs
- RuntimeWrappedException.cs
- VariableReference.cs
- GeneralTransform3DTo2D.cs
- MsdtcClusterUtils.cs
- MouseEvent.cs
- ReachFixedPageSerializerAsync.cs
- HttpChannelHelper.cs
- NonPrimarySelectionGlyph.cs
- FaultPropagationRecord.cs
- HostedHttpTransportManager.cs
- PageThemeCodeDomTreeGenerator.cs
- TerminateSequence.cs
- ExplicitDiscriminatorMap.cs
- RunWorkerCompletedEventArgs.cs
- RuleRefElement.cs
- ThreadStartException.cs
- XmlSchemaGroupRef.cs
- DataObjectAttribute.cs
- OutputWindow.cs
- SecurityIdentifierElement.cs
- MruCache.cs
- LambdaCompiler.Logical.cs
- ListItem.cs
- DataGridTablesFactory.cs
- TextView.cs
- RefreshEventArgs.cs
- CodeMemberProperty.cs
- EntityDataSourceSelectedEventArgs.cs
- RadioButtonList.cs
- PolyLineSegmentFigureLogic.cs
- AuthenticationSchemesHelper.cs
- PermissionAttributes.cs
- ExclusiveTcpTransportManager.cs
- RetrieveVirtualItemEventArgs.cs
- XmlSchemaIdentityConstraint.cs
- ipaddressinformationcollection.cs
- ProgressChangedEventArgs.cs
- TrackBar.cs