diff --git a/src/Microsoft.AspNet.Server.WebListener/NativeInterop/SocketAddress.cs b/src/Microsoft.AspNet.Server.WebListener/NativeInterop/SocketAddress.cs index 9dfdb69ac3..78b52c13c7 100644 --- a/src/Microsoft.AspNet.Server.WebListener/NativeInterop/SocketAddress.cs +++ b/src/Microsoft.AspNet.Server.WebListener/NativeInterop/SocketAddress.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Globalization; +using System.Net; using System.Text; namespace Microsoft.AspNet.Server.WebListener @@ -170,6 +171,36 @@ namespace Microsoft.AspNet.Server.WebListener return _hash; } + internal IPAddress GetIPAddress() + { + if (Family == AddressFamily.InterNetworkV6) + { + return GetIpv6Address(); + } + else if (Family == AddressFamily.InterNetwork) + { + return GetIPv4Address(); + } + else + { + return null; + } + } + + private IPAddress GetIpv6Address() + { + Contract.Assert(Size >= IPv6AddressSize); + byte[] bytes = new byte[NumberOfIPv6Labels * 2]; + Array.Copy(_buffer, 8, bytes, 0, NumberOfIPv6Labels * 2); + return new IPAddress(bytes); // TODO: Does scope id matter? + } + + private IPAddress GetIPv4Address() + { + Contract.Assert(Size >= IPv4AddressSize); + return new IPAddress(new byte[] { _buffer[4], _buffer[5], _buffer[6], _buffer[7] }); + } + public override string ToString() { StringBuilder bytes = new StringBuilder(); diff --git a/src/Microsoft.AspNet.Server.WebListener/RequestProcessing/Request.cs b/src/Microsoft.AspNet.Server.WebListener/RequestProcessing/Request.cs index dcf3100e30..5505e44ef0 100644 --- a/src/Microsoft.AspNet.Server.WebListener/RequestProcessing/Request.cs +++ b/src/Microsoft.AspNet.Server.WebListener/RequestProcessing/Request.cs @@ -356,7 +356,7 @@ namespace Microsoft.AspNet.Server.WebListener { if (!_isLocal.HasValue) { - _isLocal = LocalEndPoint.GetIPAddressString().Equals(RemoteEndPoint.GetIPAddressString()); + _isLocal = LocalEndPoint.GetIPAddress().Equals(RemoteEndPoint.GetIPAddress()); } return _isLocal.Value; } @@ -457,14 +457,14 @@ namespace Microsoft.AspNet.Server.WebListener return _localEndPoint; } } -#if NET45 + public IPAddress RemoteIpAddress { get { if (_remoteIpAddress == null) { - _remoteIpAddress = IPAddress.Parse(RemoteEndPoint.GetIPAddressString()); // TODO: Create directly from bytes + _remoteIpAddress = RemoteEndPoint.GetIPAddress(); } return _remoteIpAddress; } @@ -480,7 +480,7 @@ namespace Microsoft.AspNet.Server.WebListener { if (_localIpAddress == null) { - _localIpAddress = IPAddress.Parse(LocalEndPoint.GetIPAddressString()); // TODO: Create directly from bytes + _localIpAddress = LocalEndPoint.GetIPAddress(); } return _localIpAddress; } @@ -489,7 +489,7 @@ namespace Microsoft.AspNet.Server.WebListener _localIpAddress = value; } } -#endif + public int RemotePort { get