Skip to content

Commit

Permalink
fix for mono issues with missing IPAddress API
Browse files Browse the repository at this point in the history
  • Loading branch information
Horusiath committed Jan 14, 2017
1 parent b83366c commit 711ef36
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 24 deletions.
1 change: 0 additions & 1 deletion src/core/Akka.Remote/Akka.Remote.csproj
Expand Up @@ -110,7 +110,6 @@
<Compile Include="Transport\AkkaIO\AddressConverters.cs" />
<Compile Include="Transport\AkkaIO\AkkaIOTransport.cs" />
<Compile Include="Transport\AkkaIO\ConnectionAssociation.cs" />
<Compile Include="IPExtensions.cs" />
<Compile Include="Transport\AkkaIO\TransportListener.cs" />
<Compile Include="Transport\AkkaIO\TransportManager.cs" />
<Compile Include="Transport\AkkaPduCodec.cs" />
Expand Down
5 changes: 3 additions & 2 deletions src/core/Akka.Remote/Transport/AkkaIO/AddressConverters.cs
Expand Up @@ -10,6 +10,7 @@
using System.Net.Sockets;
using Akka.Remote;
using Akka.Actor;
using static Akka.IO.IpExtensions;

namespace Akka.Remote.Transport.AkkaIO
{
Expand All @@ -32,7 +33,7 @@ public static Address ToAddress(this EndPoint endpoint, ActorSystem system)
return new Address(AkkaIOTransport.Protocal, system.Name, dns.Host, dns.Port);
var ip = endpoint as IPEndPoint;
if (ip != null)
return new Address(AkkaIOTransport.Protocal, system.Name, IpExtensions.MapToIPv4(ip.Address).ToString(), ip.Port);
return new Address(AkkaIOTransport.Protocal, system.Name, MapToIPv4(ip.Address).ToString(), ip.Port);
throw new ArgumentException("endpoint");
}

Expand All @@ -45,7 +46,7 @@ public static Address ToAddress(this EndPoint endpoint, ActorSystem system)
public static EndPoint ToEndpoint(this Address address)
{
if (address == null || address.Host == null || !address.Port.HasValue)
throw new ArgumentException("Invalid address", "address");
throw new ArgumentException("Invalid address", nameof(address));
return new DnsEndPoint(address.Host, address.Port.Value, AddressFamily.InterNetwork);
}
}
Expand Down
8 changes: 3 additions & 5 deletions src/core/Akka.Tests/IO/TestUtils.cs
@@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using static Akka.IO.IpExtensions;

namespace Akka.Tests.IO
{
Expand All @@ -30,7 +28,7 @@ public static bool Is(this EndPoint ep1, EndPoint ep2)
{
var ip1 = ep1 as IPEndPoint;
var ip2 = ep2 as IPEndPoint;
return ip1 != null && ip2 != null && ip1.Port == ip2.Port && ip1.Address.MapToIPv4().Equals(ip2.Address.MapToIPv4());
return ip1 != null && ip2 != null && ip1.Port == ip2.Port && MapToIPv4(ip1.Address).Equals(ip2.Address.MapToIPv4());
}
}
}
1 change: 1 addition & 0 deletions src/core/Akka/Akka.csproj
Expand Up @@ -234,6 +234,7 @@
<Compile Include="Event\LogMessage.cs" />
<Compile Include="Event\StandardOutLogger.cs" />
<Compile Include="Helios.Concurrency.DedicatedThreadPool.cs" />
<Compile Include="IO\IPExtensions.cs" />
<Compile Include="IO\Udp.cs" />
<Compile Include="IO\UdpConnected.cs" />
<Compile Include="IO\UdpConnectedManager.cs" />
Expand Down
@@ -1,16 +1,19 @@
//-----------------------------------------------------------------------
// <copyright file="IPExtensions.cs" company="Akka.NET Project">
// Copyright (C) 2009-2016 Lightbend Inc. <http://www.lightbend.com>
// Copyright (C) 2013-2016 Akka.NET project <https://github.com/akkadotnet/akka.net>
// </copyright>
//-----------------------------------------------------------------------
#region copyright
// -----------------------------------------------------------------------
// <copyright file="IPExtensions.cs" company="Akka.NET project">
// Copyright (C) 2009-2016 Lightbend Inc. <http://www.lightbend.com>
// Copyright (C) 2013-2017 Akka.NET project <https://github.com/akkadotnet>
// </copyright>
// -----------------------------------------------------------------------
#endregion

using System;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Runtime.CompilerServices;

namespace Akka.Remote
namespace Akka.IO
{
/// <summary>
/// Used primarily for Mono support for IP type mapping
Expand All @@ -19,13 +22,21 @@ namespace Akka.Remote
/// </summary>
internal static class IpExtensions
{
/// <summary>
/// TBD
/// </summary>
/// <param name="type">TBD</param>
/// <param name="instance">TBD</param>
/// <param name="fieldName">TBD</param>
/// <returns>TBD</returns>
#if !MONO

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IPAddress MapToIPv4(IPAddress ipa) => ipa.MapToIPv4();

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IPAddress MapToIPv6(IPAddress ipa) => ipa.MapToIPv6();
#else
/// <summary>
/// TBD
/// </summary>
/// <param name="type">TBD</param>
/// <param name="instance">TBD</param>
/// <param name="fieldName">TBD</param>
/// <returns>TBD</returns>
internal static object GetInstanceField(Type type, object instance, string fieldName)
{
BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
Expand All @@ -39,7 +50,7 @@ internal static object GetInstanceField(Type type, object instance, string field
/// </summary>
/// <param name="ipa">TBD</param>
/// <returns>TBD</returns>
public static IPAddress MapToIPv4(this IPAddress ipa)
public static IPAddress MapToIPv4(IPAddress ipa)
{
ushort[] m_Numbers = GetInstanceField(typeof(IPAddress), ipa, "m_Numbers") as ushort[];

Expand All @@ -66,7 +77,7 @@ public static IPAddress MapToIPv4(this IPAddress ipa)
/// </summary>
/// <param name="ipa">TBD</param>
/// <returns>TBD</returns>
public static IPAddress MapToIPv6(this IPAddress ipa)
public static IPAddress MapToIPv6(IPAddress ipa)
{
if (ipa.AddressFamily == AddressFamily.InterNetworkV6)
return ipa;
Expand All @@ -80,6 +91,7 @@ public static IPAddress MapToIPv6(this IPAddress ipa)
};
return new IPAddress(ipv6Bytes);
}
#endif
}
}

0 comments on commit 711ef36

Please sign in to comment.