private Interop.WiFi.SafeWiFiAPHandle _handle;
private AddressFamily _family;
+ private const string DefaultIPv4 = "0.0.0.0";
+ private const string DefaultIPv6 = "::";
+
internal WiFiAddressInformation(Interop.WiFi.SafeWiFiAPHandle handle, AddressFamily family)
{
_handle = handle;
{
IntPtr addrPtr;
int ret = Interop.WiFi.AP.GetDnsAddress(_handle, 1, (int)_family, out addrPtr);
- if (ret != (int)WiFiError.None)
- {
- Log.Error(Globals.LogTag, "Failed to get first dns address, Error - " + (WiFiError)ret);
- return System.Net.IPAddress.Parse("0.0.0.0");
- }
- string addrStr = Marshal.PtrToStringAnsi(addrPtr);
- Interop.Libc.Free(addrPtr);
- if (addrStr == null)
- return System.Net.IPAddress.Parse("0.0.0.0");
- return System.Net.IPAddress.Parse(addrStr);
+ return ParseIPAddress(ret, addrPtr);
}
set
{
{
IntPtr addrPtr;
int ret = Interop.WiFi.AP.GetDnsAddress(_handle, 2, (int)_family, out addrPtr);
- if (ret != (int)WiFiError.None)
- {
- Log.Error(Globals.LogTag, "Failed to get second dns address, Error - " + (WiFiError)ret);
- return System.Net.IPAddress.Parse("0.0.0.0");
- }
- string addrStr = Marshal.PtrToStringAnsi(addrPtr);
- Interop.Libc.Free(addrPtr);
- if (addrStr == null)
- return System.Net.IPAddress.Parse("0.0.0.0");
- return System.Net.IPAddress.Parse(addrStr);
- }
+ return ParseIPAddress(ret, addrPtr);
+ }
set
{
int ret = Interop.WiFi.AP.SetDnsAddress(_handle, 2, (int)_family, value.ToString());
{
IntPtr addrPtr;
int ret = Interop.WiFi.AP.GetGatewayAddress(_handle, (int)_family, out addrPtr);
- if (ret != (int)WiFiError.None)
- {
- Log.Error(Globals.LogTag, "Failed to get gateway address, Error - " + (WiFiError)ret);
- return System.Net.IPAddress.Parse("0.0.0.0");
- }
- string addrStr = Marshal.PtrToStringAnsi(addrPtr);
- Interop.Libc.Free(addrPtr);
- if (addrStr == null)
- return System.Net.IPAddress.Parse("0.0.0.0");
- return System.Net.IPAddress.Parse(addrStr);
+ return ParseIPAddress(ret, addrPtr);
}
set
{
{
IntPtr addrPtr;
int ret = Interop.WiFi.AP.GetSubnetMask(_handle, (int)_family, out addrPtr);
- if (ret != (int)WiFiError.None)
- {
- Log.Error(Globals.LogTag, "Failed to get subnet mask, Error - " + (WiFiError)ret);
- return System.Net.IPAddress.Parse("0.0.0.0");
- }
- string addrStr = Marshal.PtrToStringAnsi(addrPtr);
- Interop.Libc.Free(addrPtr);
- if (addrStr == null)
- return System.Net.IPAddress.Parse("0.0.0.0");
- return System.Net.IPAddress.Parse(addrStr);
+ return ParseIPAddress(ret, addrPtr);
}
set
{
{
IntPtr addrPtr;
int ret = Interop.WiFi.AP.GetIPAddress(_handle, (int)_family, out addrPtr);
- if (ret != (int)WiFiError.None)
- {
- Log.Error(Globals.LogTag, "Failed to get ip address, Error - " + (WiFiError)ret);
- return System.Net.IPAddress.Parse("0.0.0.0");
- }
- string addrStr = Marshal.PtrToStringAnsi(addrPtr);
- Interop.Libc.Free(addrPtr);
- if (addrStr == null)
- return System.Net.IPAddress.Parse("0.0.0.0");
- return System.Net.IPAddress.Parse(addrStr);
+ return ParseIPAddress(ret, addrPtr);
}
set
{
get
{
string dhcpServer;
- int ret = Interop.WiFi.AP.GetDhcpServerAddress(_handle, AddressFamily.IPv4, out dhcpServer);
- if (ret != (int)WiFiError.None)
+ int ret = Interop.WiFi.AP.GetDhcpServerAddress(_handle, _family, out dhcpServer);
+ if (ret != (int)WiFiError.None || dhcpServer == null || dhcpServer.Length == 0)
{
Log.Error(Globals.LogTag, "Failed to get DHCP server address, Error - " + (WiFiError)ret);
+ return DefaultIPAddress();
}
- if (dhcpServer == null)
+ return IPAddress.Parse(dhcpServer);
+ }
+ }
+
+ /// <summary>
+ /// DHCP lease duration. It is only supported for IPv4 address family.
+ /// </summary>
+ /// <value>Represents DHCP lease duration.</value>
+ public int DhcpLeaseDuration
+ {
+ get
+ {
+ int leaseDuration;
+ int ret = Interop.WiFi.AP.GetDhcpLeaseDuration(_handle, AddressFamily.IPv4, out leaseDuration);
+ if (ret != (int)WiFiError.None)
{
- return IPAddress.Parse("0.0.0.0");
+ Log.Error(Globals.LogTag, "Failed to get DHCP lease duration, Error - " + (WiFiError)ret);
+ return 0;
}
- return IPAddress.Parse(dhcpServer);
+ return leaseDuration;
}
}
+ private System.Net.IPAddress ParseIPAddress(int ret, IntPtr addrPtr)
+ {
+ if (ret != (int)WiFiError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to get address, Error - " + (WiFiError)ret);
+ return DefaultIPAddress();
+ }
+
+ string addr = Marshal.PtrToStringAnsi(addrPtr);
+ if (addr == null || addr.Length == 0)
+ return DefaultIPAddress();
+ Interop.Glib.Free(addrPtr);
+ return System.Net.IPAddress.Parse(addr);
+ }
+
+ private System.Net.IPAddress DefaultIPAddress()
+ {
+ if (_family == AddressFamily.IPv4)
+ return System.Net.IPAddress.Parse(DefaultIPv4);
+ else
+ return System.Net.IPAddress.Parse(DefaultIPv6);
+ }
}
}