Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / NetworkInformation / SystemIPGlobalProperties.cs / 1 / SystemIPGlobalProperties.cs
namespace System.Net.NetworkInformation {
using System.Net;
using System.Net.Sockets;
using System.Security.Permissions;
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.ComponentModel;
using System.Threading;
internal class SystemIPGlobalProperties:IPGlobalProperties {
private FixedInfo fixedInfo;
private bool fixedInfoInitialized = false;
//changing these require a reboot, so we'll cache them instead.
private static string hostName = null;
private static string domainName = null;
static object syncObject = new object();
internal SystemIPGlobalProperties() {
}
internal static FixedInfo GetFixedInfo(){
uint size = 0;
SafeLocalFree buffer = null;
FixedInfo fixedInfo = new FixedInfo();
//first we need to get the size of the buffer
uint result = UnsafeNetInfoNativeMethods.GetNetworkParams(SafeLocalFree.Zero,ref size);
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
//now we allocate the buffer and read the network parameters.
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetNetworkParams(buffer,ref size);
if ( result == IpHelperErrors.Success ) {
fixedInfo = new FixedInfo( (FIXED_INFO)Marshal.PtrToStructure(buffer.DangerousGetHandle(),typeof(FIXED_INFO)));
}
}
finally {
if(buffer != null){
buffer.Close();
}
}
}
//if the result include there being no information, we'll still throw
if (result != IpHelperErrors.Success) {
throw new NetworkInformationException((int)result);
}
return fixedInfo;
}
internal FixedInfo FixedInfo {
get {
if (!fixedInfoInitialized) {
lock(this){
if (!fixedInfoInitialized) {
fixedInfo = GetFixedInfo();
fixedInfoInitialized = true;
}
}
}
return fixedInfo;
}
}
/// Specifies the host name for the local computer.
public override string HostName{
get {
if(hostName == null){
lock(syncObject){
if(hostName == null){
hostName = FixedInfo.HostName;
domainName = FixedInfo.DomainName;
}
}
}
return hostName;
}
}
/// Specifies the domain in which the local computer is registered.
public override string DomainName{
get {
if(domainName == null){
lock(syncObject){
if(domainName == null){
hostName = FixedInfo.HostName;
domainName = FixedInfo.DomainName;
}
}
}
return domainName;
}
}
///
/// The type of node.
///
///
/// The exact mechanism by which NetBIOS names are resolved to IP addresses
/// depends on the node's configured NetBIOS Node Type. Broadcast - uses broadcast
/// NetBIOS Name Queries for name registration and resolution.
/// PeerToPeer - uses a NetBIOS name server (NBNS), such as Windows Internet
/// Name Service (WINS), to resolve NetBIOS names.
/// Mixed - uses Broadcast then PeerToPeer.
/// Hybrid - uses PeerToPeer then Broadcast.
///
public override NetBiosNodeType NodeType{get {
return (NetBiosNodeType)FixedInfo.NodeType;}
}
/// Specifies the DHCP scope name.
public override string DhcpScopeName{get {
return FixedInfo.ScopeId;}
}
/// Specifies whether the local computer is acting as an WINS proxy.
public override bool IsWinsProxy{get {
return (FixedInfo.EnableProxy);}
}
public override TcpConnectionInformation[] GetActiveTcpConnections(){
ArrayList list = new ArrayList();
TcpConnectionInformation[] connections = GetAllTcpConnections();
foreach(TcpConnectionInformation connection in connections){
if(connection.State != TcpState.Listen){
list.Add(connection);
}
}
connections = new TcpConnectionInformation[list.Count];
for (int i=0; i< list.Count;i++) {
connections[i]=(TcpConnectionInformation)list[i];
}
return connections;
}
public override IPEndPoint[] GetActiveTcpListeners (){
ArrayList list = new ArrayList();
TcpConnectionInformation[] connections = GetAllTcpConnections();
foreach(TcpConnectionInformation connection in connections){
if(connection.State == TcpState.Listen){
list.Add(connection.LocalEndPoint);
}
}
IPEndPoint[] endPoints = new IPEndPoint[list.Count];
for (int i=0; i< list.Count;i++) {
endPoints[i]=(IPEndPoint)list[i];
}
return endPoints;
}
///
/// Gets the active tcp connections. Uses the native GetTcpTable api.
private TcpConnectionInformation[] GetAllTcpConnections(){
uint size = 0;
SafeLocalFree buffer = null;
SystemTcpConnectionInformation[] tcpConnections = null;
//get the size of buffer needed
uint result = UnsafeNetInfoNativeMethods.GetTcpTable(SafeLocalFree.Zero,ref size,true);
while (result == IpHelperErrors.ErrorInsufficientBuffer) {
try {
//allocate the buffer and get the tcptable
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetTcpTable(buffer,ref size,true);
if ( result == IpHelperErrors.Success ) {
//the table info just gives us the number of rows.
IntPtr newPtr = buffer.DangerousGetHandle();
MibTcpTable tcpTableInfo = (MibTcpTable)Marshal.PtrToStructure(newPtr,typeof(MibTcpTable));
if (tcpTableInfo.numberOfEntries > 0) {
tcpConnections = new SystemTcpConnectionInformation[tcpTableInfo.numberOfEntries];
//we need to skip over the tableinfo to get the inline rows
newPtr = (IntPtr)((long)newPtr + Marshal.SizeOf(tcpTableInfo.numberOfEntries));
for (int i=0;iGets the active udp listeners. Uses the native GetUdpTable api.
public override IPEndPoint[] GetActiveUdpListeners(){
uint size = 0;
SafeLocalFree buffer = null;
IPEndPoint[] udpListeners = null;
//get the size of buffer needed
uint result = UnsafeNetInfoNativeMethods.GetUdpTable(SafeLocalFree.Zero,ref size,true);
while (result == IpHelperErrors.ErrorInsufficientBuffer) {
try {
//allocate the buffer and get the udptable
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetUdpTable(buffer,ref size,true);
if ( result == IpHelperErrors.Success) {
//the table info just gives us the number of rows.
IntPtr newPtr = buffer.DangerousGetHandle();
MibUdpTable udpTableInfo = (MibUdpTable)Marshal.PtrToStructure(newPtr,typeof(MibUdpTable));
if (udpTableInfo.numberOfEntries > 0) {
udpListeners = new IPEndPoint[udpTableInfo.numberOfEntries];
//we need to skip over the tableinfo to get the inline rows
newPtr = (IntPtr)((long)newPtr + Marshal.SizeOf(udpTableInfo.numberOfEntries));
for (int i=0;i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Typography.cs
- WebPartActionVerb.cs
- ToggleProviderWrapper.cs
- BitmapImage.cs
- Ipv6Element.cs
- DependencyPropertyHelper.cs
- AuthorizationContext.cs
- ServerIdentity.cs
- HtmlLink.cs
- Pair.cs
- GlobalEventManager.cs
- SqlStatistics.cs
- Common.cs
- IsolatedStorageFilePermission.cs
- ProfileSection.cs
- ObjectQueryExecutionPlan.cs
- Semaphore.cs
- GridViewColumnHeaderAutomationPeer.cs
- InputProcessorProfiles.cs
- BindingSource.cs
- Binding.cs
- Misc.cs
- Debugger.cs
- UntypedNullExpression.cs
- ListViewSelectEventArgs.cs
- bidPrivateBase.cs
- TransactionManager.cs
- RawMouseInputReport.cs
- PropertyGridView.cs
- NamedObject.cs
- HierarchicalDataTemplate.cs
- NumberFormatInfo.cs
- _StreamFramer.cs
- DataComponentMethodGenerator.cs
- HttpsChannelListener.cs
- DataGridRelationshipRow.cs
- TextEndOfLine.cs
- MeshGeometry3D.cs
- CodeEventReferenceExpression.cs
- DragEventArgs.cs
- TextElementEnumerator.cs
- CalendarAutomationPeer.cs
- CollectionViewGroup.cs
- RegistryPermission.cs
- SQLString.cs
- ListCollectionView.cs
- DataRowView.cs
- HMACSHA256.cs
- MemberBinding.cs
- SequentialOutput.cs
- ResourceKey.cs
- TextElementEnumerator.cs
- ExceptionUtil.cs
- PropertyExpression.cs
- PenCursorManager.cs
- TemplateParser.cs
- CodeDOMProvider.cs
- OleDbRowUpdatingEvent.cs
- RegisteredDisposeScript.cs
- EncryptedPackage.cs
- DataKey.cs
- Metadata.cs
- CounterCreationData.cs
- LocalValueEnumerator.cs
- SerializationHelper.cs
- SystemIPInterfaceProperties.cs
- PassportIdentity.cs
- FormParameter.cs
- TileModeValidation.cs
- AutoResizedEvent.cs
- FormsIdentity.cs
- AbsoluteQuery.cs
- IntSecurity.cs
- BinaryUtilClasses.cs
- UrlMappingsSection.cs
- TypeElementCollection.cs
- SwitchLevelAttribute.cs
- ConnectionManagementElementCollection.cs
- ConnectionPointCookie.cs
- IncrementalHitTester.cs
- SHA256Managed.cs
- DialogWindow.cs
- AdRotator.cs
- NativeMethods.cs
- Message.cs
- ApplicationProxyInternal.cs
- XmlMembersMapping.cs
- LoadedOrUnloadedOperation.cs
- HwndSubclass.cs
- CodeSubDirectory.cs
- UTF8Encoding.cs
- AmbientLight.cs
- Header.cs
- FileDialogCustomPlace.cs
- XmlSerializerImportOptions.cs
- LingerOption.cs
- IgnoreSectionHandler.cs
- LinearGradientBrush.cs
- ListItemsCollectionEditor.cs
- X509Certificate2Collection.cs