Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 10 additions & 39 deletions nanoFramework.System.Net/IPAddress.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

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

namespace System.Net
{
Expand Down Expand Up @@ -133,38 +134,7 @@ public byte[] GetAddressBytes()
/// </returns>
public static IPAddress Parse(string ipString)
{
if (ipString == null)
throw new ArgumentNullException();

ulong ipAddress = 0L;
int lastIndex = 0;
int shiftIndex = 0;
ulong mask = 0x00000000000000FF;
ulong octet = 0L;
int length = ipString.Length;

for (int i = 0; i < length; ++i)
{
// Parse to '.' or end of IP address
if (ipString[i] == '.' || i == length - 1)
// If the IP starts with a '.'
// or a segment is longer than 3 characters or shiftIndex > last bit position throw.
if (i == 0 || i - lastIndex > 3 || shiftIndex > 24)
{
throw new ArgumentException();
}
else
{
i = i == length - 1 ? ++i : i;
octet = ulong.Parse(ipString.Substring(lastIndex, i - lastIndex)) & 0x00000000000000FF;
ipAddress = ipAddress + ((octet << shiftIndex) & mask);
lastIndex = i + 1;
shiftIndex = shiftIndex + 8;
mask = (mask << 8);
}
}

return new IPAddress((long)ipAddress);
return new IPAddress(NetworkInterface.IPAddressFromString(ipString));
}

/// <summary>
Expand All @@ -179,13 +149,7 @@ public static IPAddress Parse(string ipString)
/// </remarks>
public override string ToString()
{
return ((byte)(Address)).ToString() +
"." +
((byte)(Address >> 8)).ToString() +
"." +
((byte)(Address >> 16)).ToString() +
"." +
((byte)(Address >> 24)).ToString();
return IPv4ToString((uint)Address);
}

/// <summary>
Expand Down Expand Up @@ -230,5 +194,12 @@ internal IPAddress Snapshot()

throw new NotSupportedException();
}

#region native methods

[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern string IPv4ToString(uint ipv4Address);

#endregion
}
}
39 changes: 13 additions & 26 deletions nanoFramework.System.Net/NetworkInformation/NetworkInterface.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,19 +96,6 @@ public static NetworkInterface[] GetAllNetworkInterfaces()
return ifaces;
}

private string IPv4AddressToString(uint ipv4Address)
{
return string.Concat(
((ipv4Address >> 0) & 0xFF).ToString(),
".",
((ipv4Address >> 8) & 0xFF).ToString(),
".",
((ipv4Address >> 16) & 0xFF).ToString(),
".",
((ipv4Address >> 24) & 0xFF).ToString()
);
}

private string IPv6AddressToString(uint[] ipv6Address)
{
throw new NotImplementedException();
Expand All @@ -134,9 +121,9 @@ public void EnableStaticIPv4(string ipv4Address, string ipv4SubnetMask, string i
{
try
{
_ipv4Address = IPAddressFromString(ipv4Address);
_ipv4NetMask = IPAddressFromString(ipv4SubnetMask);
_ipv4GatewayAddress = IPAddressFromString(ipv4GatewayAddress);
_ipv4Address = (uint)IPAddressFromString(ipv4Address);
_ipv4NetMask = (uint)IPAddressFromString(ipv4SubnetMask);
_ipv4GatewayAddress = (uint)IPAddressFromString(ipv4GatewayAddress);
_startupAddressMode = AddressMode.Static;

UpdateConfiguration((int)UpdateOperation.Dhcp);
Expand Down Expand Up @@ -190,9 +177,9 @@ public void EnableStaticIP(string ipv4Address, string ipv4subnetMask, string ipv
{
throw new NotImplementedException();

_ipv4Address = IPAddressFromString(ipv4Address);
_ipv4NetMask = IPAddressFromString(ipv4subnetMask);
_ipv4GatewayAddress = IPAddressFromString(ipv4gatewayAddress);
_ipv4Address = (uint)IPAddressFromString(ipv4Address);
_ipv4NetMask = (uint)IPAddressFromString(ipv4subnetMask);
_ipv4GatewayAddress = (uint)IPAddressFromString(ipv4gatewayAddress);

// FIXME
// need to test this
Expand Down Expand Up @@ -242,7 +229,7 @@ public void EnableStaticIPv4Dns(string[] dnsAddresses)
int iAddress = 0;
for (int i = 0; i < dnsAddresses.Length; i++)
{
uint address = IPAddressFromString(dnsAddresses[i]);
uint address = (uint)IPAddressFromString(dnsAddresses[i]);

addresses[iAddress] = address;

Expand Down Expand Up @@ -351,23 +338,23 @@ public bool IsAutomaticDnsEnabled
/// </summary>
public string IPv4Address
{
get { return IPv4AddressToString(_ipv4Address); }
get { return IPAddress.IPv4ToString(_ipv4Address); }
}

/// <summary>
/// Contains the gateway IPv4 address.
/// </summary>
public string IPv4GatewayAddress
{
get { return IPv4AddressToString(_ipv4GatewayAddress); }
get { return IPAddress.IPv4ToString(_ipv4GatewayAddress); }
}

/// <summary>
/// Retrieves the network interface's IPv4 subnet mask.
/// </summary>
public string IPv4SubnetMask
{
get { return IPv4AddressToString(_ipv4NetMask); }
get { return IPAddress.IPv4ToString(_ipv4NetMask); }
}

/// <summary>
Expand All @@ -390,12 +377,12 @@ public string[] IPv4DnsAddresses

if (_ipv4dnsAddress1 != 0)
{
list.Add(IPv4AddressToString(_ipv4dnsAddress1));
list.Add(IPAddress.IPv4ToString(_ipv4dnsAddress1));
}

if (_ipv4dnsAddress2 != 0)
{
list.Add(IPv4AddressToString(_ipv4dnsAddress2));
list.Add(IPAddress.IPv4ToString(_ipv4dnsAddress2));
}

return (string[])list.ToArray(typeof(string));
Expand Down Expand Up @@ -489,7 +476,7 @@ public NetworkInterfaceType NetworkInterfaceType
private extern void UpdateConfiguration(int updateType);

[MethodImpl(MethodImplOptions.InternalCall)]
private static extern uint IPAddressFromString(string ipAddress);
internal static extern long IPAddressFromString(string ipAddress);

#endregion
}
Expand Down
2 changes: 1 addition & 1 deletion nanoFramework.System.Net/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

////////////////////////////////////////////////////////////////
// update this whenever the native assembly signature changes //
[assembly: AssemblyNativeVersion("100.1.3.2")]
[assembly: AssemblyNativeVersion("100.1.3.3")]
////////////////////////////////////////////////////////////////

// Setting ComVisible to false makes the types in this assembly not visible
Expand Down