Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / IPEndPoint.cs / 1305376 / IPEndPoint.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net {
using System.Net.Sockets;
using System.Globalization;
///
///
/// Provides an IP address.
///
///
[Serializable]
public class IPEndPoint : EndPoint {
///
///
/// Specifies the minimum acceptable value for the
/// property.
///
///
public const int MinPort = 0x00000000;
///
///
/// Specifies the maximum acceptable value for the
/// property.
///
///
public const int MaxPort = 0x0000FFFF;
private IPAddress m_Address;
private int m_Port;
internal const int AnyPort = MinPort;
internal static IPEndPoint Any = new IPEndPoint(IPAddress.Any, AnyPort);
internal static IPEndPoint IPv6Any = new IPEndPoint(IPAddress.IPv6Any,AnyPort);
///
/// [To be supplied.]
///
public override AddressFamily AddressFamily {
get {
//
// IPv6 Changes: Always delegate this to the address we are
// wrapping.
//
return m_Address.AddressFamily;
}
}
///
/// Creates a new instance of the IPEndPoint class with the specified address and
/// port.
///
public IPEndPoint(long address, int port) {
if (!ValidationHelper.ValidateTcpPort(port)) {
throw new ArgumentOutOfRangeException("port");
}
m_Port = port;
m_Address = new IPAddress(address);
}
///
/// Creates a new instance of the IPEndPoint class with the specified address and port.
///
public IPEndPoint(IPAddress address, int port) {
if (address==null) {
throw new ArgumentNullException("address");
}
if (!ValidationHelper.ValidateTcpPort(port)) {
throw new ArgumentOutOfRangeException("port");
}
m_Port = port;
m_Address = address;
}
///
///
/// Gets or sets the IP address.
///
///
public IPAddress Address {
get {
return m_Address;
}
set {
m_Address = value;
}
}
///
///
/// Gets or sets the port.
///
///
public int Port {
get {
return m_Port;
}
set {
if (!ValidationHelper.ValidateTcpPort(value)) {
throw new ArgumentOutOfRangeException("value");
}
m_Port = value;
}
}
///
/// [To be supplied.]
///
public override string ToString() {
string format;
if (m_Address.AddressFamily == AddressFamily.InterNetworkV6)
format = "[{0}]:{1}";
else
format = "{0}:{1}";
return String.Format(format, m_Address.ToString(), Port.ToString(NumberFormatInfo.InvariantInfo));
}
///
/// [To be supplied.]
///
public override SocketAddress Serialize() {
if ( m_Address.AddressFamily == AddressFamily.InterNetworkV6 ) {
//
// IPv6 Changes: create a new SocketAddress that is large enough for an
// IPv6 address and then pack the address into it.
//
SocketAddress socketAddress = new SocketAddress(this.AddressFamily, SocketAddress.IPv6AddressSize);
//
// populate it
//
int port = this.Port;
socketAddress[2] = (byte)(port>> 8);
socketAddress[3] = (byte)port;
//
// Note: No handling for Flow Information
//
socketAddress[4] = (byte)0;
socketAddress[5] = (byte)0;
socketAddress[6] = (byte)0;
socketAddress[7] = (byte)0;
//
// Scope serialization
//
long scope = this.Address.ScopeId;
socketAddress[24] = (byte)scope;
socketAddress[25] = (byte)(scope >> 8);
socketAddress[26] = (byte)(scope >> 16);
socketAddress[27] = (byte)(scope >> 24);
//
// Address serialization
//
byte[] addressBytes = this.Address.GetAddressBytes();
for ( int i = 0; i < addressBytes.Length; i++ ) {
socketAddress[8 + i] = addressBytes[i];
}
GlobalLog.Print("IPEndPoint::Serialize(IPv6): " + this.ToString() );
//
// return it
//
return socketAddress;
}
else
{
//
// create a new SocketAddress
//
SocketAddress socketAddress = new SocketAddress(m_Address.AddressFamily, SocketAddress.IPv4AddressSize);
//
// populate it
//
socketAddress[2] = unchecked((byte)(this.Port>> 8));
socketAddress[3] = unchecked((byte)(this.Port ));
socketAddress[4] = unchecked((byte)(this.Address.m_Address ));
socketAddress[5] = unchecked((byte)(this.Address.m_Address>> 8));
socketAddress[6] = unchecked((byte)(this.Address.m_Address>>16));
socketAddress[7] = unchecked((byte)(this.Address.m_Address>>24));
GlobalLog.Print("IPEndPoint::Serialize: " + this.ToString() );
//
// return it
//
return socketAddress;
}
}
///
/// [To be supplied.]
///
public override EndPoint Create(SocketAddress socketAddress) {
//
// validate SocketAddress
//
if (socketAddress.Family != this.AddressFamily) {
throw new ArgumentException(SR.GetString(SR.net_InvalidAddressFamily, socketAddress.Family.ToString(), this.GetType().FullName, this.AddressFamily.ToString()), "socketAddress");
}
if (socketAddress.Size<8) {
throw new ArgumentException(SR.GetString(SR.net_InvalidSocketAddressSize, socketAddress.GetType().FullName, this.GetType().FullName), "socketAddress");
}
if ( this.AddressFamily == AddressFamily.InterNetworkV6 ) {
//
// IPv6 Changes: Extract the IPv6 Address information from the socket address
//
byte[] addr = new byte[IPAddress.IPv6AddressBytes];
for (int i = 0; i < addr.Length; i++)
{
addr[i] = socketAddress[i + 8];
}
//
// Port
//
int port = (int)((socketAddress[2]<<8 & 0xFF00) | (socketAddress[3]));
//
// Scope
//
long scope = (long)((socketAddress[27] << 24) +
(socketAddress[26] << 16) +
(socketAddress[25] << 8 ) +
(socketAddress[24]));
IPEndPoint created = new IPEndPoint(new IPAddress(addr,scope),port);
GlobalLog.Print("IPEndPoint::Create IPv6: " + this.ToString() + " -> " + created.ToString() );
return created;
}
else
{
//
// strip out of SocketAddress information on the EndPoint
//
int port = (int)(
(socketAddress[2]<<8 & 0xFF00) |
(socketAddress[3])
);
long address = (long)(
(socketAddress[4] & 0x000000FF) |
(socketAddress[5]<<8 & 0x0000FF00) |
(socketAddress[6]<<16 & 0x00FF0000) |
(socketAddress[7]<<24)
) & 0x00000000FFFFFFFF;
IPEndPoint created = new IPEndPoint(address, port);
GlobalLog.Print("IPEndPoint::Create: " + this.ToString() + " -> " + created.ToString() );
//
// return it
//
return created;
}
}
//UEUE
public override bool Equals(object comparand) {
if (!(comparand is IPEndPoint)) {
return false;
}
return ((IPEndPoint)comparand).m_Address.Equals(m_Address) && ((IPEndPoint)comparand).m_Port==m_Port;
}
//UEUE
public override int GetHashCode() {
return m_Address.GetHashCode() ^ m_Port;
}
// For security, we need to be able to take an IPEndPoint and make a copy that's immutable and not derived.
internal IPEndPoint Snapshot()
{
return new IPEndPoint(Address.Snapshot(), Port);
}
} // class IPEndPoint
} // namespace System.Net
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Vector3dCollection.cs
- InfoCardSymmetricCrypto.cs
- InvalidAsynchronousStateException.cs
- TypeSystem.cs
- TableLayoutStyleCollection.cs
- EditorZoneBase.cs
- PersistChildrenAttribute.cs
- DataViewManager.cs
- Int16Animation.cs
- OutputScopeManager.cs
- EngineSite.cs
- ColorMatrix.cs
- ThicknessKeyFrameCollection.cs
- WaitingCursor.cs
- MetadataPropertyAttribute.cs
- ProfessionalColors.cs
- ExportOptions.cs
- _NativeSSPI.cs
- MediaScriptCommandRoutedEventArgs.cs
- SiteOfOriginPart.cs
- IResourceProvider.cs
- QuadraticBezierSegment.cs
- ColumnResizeAdorner.cs
- SplitContainerDesigner.cs
- XmlReaderSettings.cs
- PropertyGridView.cs
- Point3DAnimation.cs
- ButtonBaseAutomationPeer.cs
- DesignColumn.cs
- CategoryNameCollection.cs
- RangeValuePatternIdentifiers.cs
- EventManager.cs
- GPRECT.cs
- DataGridRelationshipRow.cs
- ParamArrayAttribute.cs
- MessageSmuggler.cs
- XmlSchemaObject.cs
- SemaphoreSecurity.cs
- AttachedPropertyDescriptor.cs
- GatewayIPAddressInformationCollection.cs
- MultipartContentParser.cs
- InputDevice.cs
- DataGridViewColumnHeaderCell.cs
- Knowncolors.cs
- ToolStripDropDownClosedEventArgs.cs
- ThreadWorkerController.cs
- processwaithandle.cs
- ToolStripSystemRenderer.cs
- GridViewUpdateEventArgs.cs
- DateTimeConstantAttribute.cs
- LinqDataSourceDisposeEventArgs.cs
- DynamicDiscoveryDocument.cs
- Image.cs
- HttpApplicationFactory.cs
- SystemIPGlobalProperties.cs
- EditorZoneBase.cs
- HMACSHA1.cs
- XPathQilFactory.cs
- BitmapEffectInputData.cs
- DbInsertCommandTree.cs
- UIElementHelper.cs
- KnownTypeHelper.cs
- ExtendedProtectionPolicyElement.cs
- TraceListeners.cs
- TextEncodedRawTextWriter.cs
- ValidatingReaderNodeData.cs
- MediaElementAutomationPeer.cs
- FontCollection.cs
- CompressStream.cs
- OdbcFactory.cs
- DependentList.cs
- processwaithandle.cs
- EnumConverter.cs
- ServiceDeploymentInfo.cs
- TextEditorMouse.cs
- RegexCompilationInfo.cs
- ManualWorkflowSchedulerService.cs
- Win32MouseDevice.cs
- SkewTransform.cs
- ContainerFilterService.cs
- SettingsPropertyValue.cs
- JsonCollectionDataContract.cs
- TextElementEditingBehaviorAttribute.cs
- SynchronizedDispatch.cs
- metadatamappinghashervisitor.cs
- FragmentQueryKB.cs
- OutputCacheSettings.cs
- SqlDataReader.cs
- GlobalItem.cs
- KeyedPriorityQueue.cs
- Attributes.cs
- MenuItemStyleCollection.cs
- CopyAction.cs
- VersionedStreamOwner.cs
- ElapsedEventArgs.cs
- HtmlTernaryTree.cs
- IDictionary.cs
- ManipulationPivot.cs
- XmlSchemaImport.cs
- BasicKeyConstraint.cs