[WiFi][TCSACR-116] Add a new API WiFiAP.Update
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.WiFi / Tizen.Network.WiFi / WiFiNetwork.cs
index 94c6b05..d77be57 100755 (executable)
@@ -23,20 +23,21 @@ using Tizen.Network.Connection;
 namespace Tizen.Network.WiFi
 {
     /// <summary>
-    /// A class for managing the Wi-Fi information. It allows applications to manager network information.
-    /// This class is not intended to create instance directly from applications.
+    /// A class for managing the Wi-Fi network information.
     /// </summary>
-    public class WiFiNetwork : IDisposable
+    /// <since_tizen> 3 </since_tizen>
+    public class WiFiNetwork
     {
-        private IntPtr _apHandle = IntPtr.Zero;
+        private Interop.WiFi.SafeWiFiAPHandle _apHandle;
         private IAddressInformation _ipv4;
         private IAddressInformation _ipv6;
-        private bool disposed = false;
         private string _essid;
 
         /// <summary>
-        /// The Extended Service Set Identifier(ESSID).
+        /// The Extended Service Set Identifier (ESSID).
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>ESSID of the Wi-Fi.</value>
         public string Essid
         {
             get
@@ -58,9 +59,12 @@ namespace Tizen.Network.WiFi
                 return _essid;
             }
         }
+
         /// <summary>
-        /// The Basic Service Set Identifier(BSSID).
+        /// The Basic Service Set Identifier (BSSID).
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>BSSID of the Wi-Fi.</value>
         public string Bssid
         {
             get
@@ -75,9 +79,12 @@ namespace Tizen.Network.WiFi
                 return Marshal.PtrToStringAnsi(strPtr);
             }
         }
+
         /// <summary>
-        /// The address informaiton for IPv4.
+        /// The address information for IPv4.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>IP address information for IPv4 type.</value>
         public IAddressInformation IPv4Setting
         {
             get
@@ -85,9 +92,12 @@ namespace Tizen.Network.WiFi
                 return _ipv4;
             }
         }
+
         /// <summary>
-        /// The address ainformation for IPv6.
+        /// The address information for IPv6.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>IP address information for IPv6 type.</value>
         public IAddressInformation IPv6Setting
         {
             get
@@ -95,9 +105,15 @@ namespace Tizen.Network.WiFi
                 return _ipv6;
             }
         }
+
         /// <summary>
         /// The proxy address.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Represents the proxy address of the Wi-Fi.</value>
+        /// <exception cref="NotSupportedException">Thrown while setting this property when Wi-Fi is not supported.</exception>
+        /// <exception cref="ArgumentException">Thrown while setting this property due to an invalid parameter.</exception>
+        /// <exception cref="InvalidOperationException">Thrown while setting this value due to an invalid operation.</exception>
         public string ProxyAddress
         {
             get
@@ -117,12 +133,19 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set proxy address, Error - " + (WiFiError)ret);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
                 }
             }
         }
+
         /// <summary>
-        /// The proxy type(IPv6).
+        /// The proxy type (IPv6).
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Represents the proxy type of the Wi-Fi.</value>
+        /// <exception cref="NotSupportedException">Thrown while setting this property when Wi-Fi is not supported.</exception>
+        /// <exception cref="ArgumentException">Thrown while setting this property due to an invalid parameter.</exception>
+        /// <exception cref="InvalidOperationException">Thrown while setting this value due to an invalid operation.</exception>
         public WiFiProxyType ProxyType
         {
             get
@@ -141,12 +164,16 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set proxy type, Error - " + (WiFiError)ret);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
                 }
             }
         }
+
         /// <summary>
-        /// The frequency band(MHz).
+        /// The frequency band (MHz).
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Represents the frequency band value.</value>
         public int Frequency
         {
             get
@@ -160,9 +187,12 @@ namespace Tizen.Network.WiFi
                 return freq;
             }
         }
+
         /// <summary>
-        /// The Received signal strength indication(RSSI).
+        /// The received signal strength indicator (RSSI).
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Represents RSSI of Wi-Fi (dbm).</value>
         public int Rssi
         {
             get
@@ -176,9 +206,33 @@ namespace Tizen.Network.WiFi
                 return rssi;
             }
         }
+
+        /// <summary>
+        /// The Received signal strength indication(RSSI).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <value>Represents Rssi level of WiFi.</value>
+        /// <feature>http://tizen.org/feature/network.wifi</feature>
+        /// <exception cref="NotSupportedException">Thrown while setting this property when WiFi is not supported.</exception>
+        public WiFiRssiLevel RssiLevel
+        {
+            get
+            {
+                int rssi;
+                int ret = Interop.WiFi.AP.GetRssiLevel(_apHandle, out rssi);
+                if (ret != (int)WiFiError.None)
+                {
+                    Log.Error(Globals.LogTag, "Failed to get rssi level, Error - " + (WiFiError)ret);
+                }
+                return (WiFiRssiLevel)rssi;
+            }
+        }
+
         /// <summary>
-        /// Rhe max speed (Mbps).
+        /// The max speed (Mbps).
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Represents the max speed value.</value>
         public int MaxSpeed
         {
             get
@@ -192,9 +246,12 @@ namespace Tizen.Network.WiFi
                 return maxSpeed;
             }
         }
+
         /// <summary>
-        /// A property to check whether the access point is favorite or not.
+        /// A property to check whether the access point is favorite or not.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Boolean value to check if the access point is a favorite or not.</value>
         public bool IsFavorite
         {
             get
@@ -208,9 +265,12 @@ namespace Tizen.Network.WiFi
                 return isFavorite;
             }
         }
+
         /// <summary>
-        /// A property to check whether the access point is passpoint or not.
+        /// A property to check whether the access point is passpoint or not.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Boolean value to check if the access point is a passpoint or not.</value>
         public bool IsPasspoint
         {
             get
@@ -225,9 +285,12 @@ namespace Tizen.Network.WiFi
                 return isPasspoint;
             }
         }
+
         /// <summary>
         /// The connection state.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <value>Represents the connection state of the Wi-Fi.</value>
         public WiFiConnectionState ConnectionState
         {
             get
@@ -242,7 +305,44 @@ namespace Tizen.Network.WiFi
             }
         }
 
-        internal WiFiNetwork(IntPtr apHandle)
+        /// <summary>
+        /// Gets all IPv6 addresses of the access point.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <returns>A list of IPv6 addresses of the access point.</returns>
+        /// <feature>http://tizen.org/feature/network.wifi</feature>
+        /// <exception cref="NotSupportedException">Thrown when the Wi-Fi is not supported.</exception>
+        /// <exception cref="ArgumentException">Thrown when the method failed due to an invalid parameter.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when the method failed due to an invalid operation.</exception>
+        public IEnumerable<System.Net.IPAddress> GetAllIPv6Addresses()
+        {
+            Log.Debug(Globals.LogTag, "GetAllIPv6Addresses");
+            List<System.Net.IPAddress> ipList = new List<System.Net.IPAddress>();
+            Interop.WiFi.HandleCallback callback = (IntPtr ipv6Address, IntPtr userData) =>
+            {
+                if (ipv6Address != IntPtr.Zero)
+                {
+                    string ipv6 = Marshal.PtrToStringAnsi(ipv6Address);
+                    if (ipv6.Length == 0)
+                        ipList.Add(System.Net.IPAddress.Parse("::"));
+                    else
+                        ipList.Add(System.Net.IPAddress.Parse(ipv6));
+                    return true;
+                }
+                return false;
+            };
+
+            int ret = Interop.WiFi.AP.GetAllIPv6Addresses(_apHandle, callback, IntPtr.Zero);
+            if (ret != (int)WiFiError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to get all IPv6 addresses, Error - " + (WiFiError)ret);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
+            }
+
+            return ipList;
+        }
+
+        internal WiFiNetwork(Interop.WiFi.SafeWiFiAPHandle apHandle)
         {
             _apHandle = apHandle;
             _ipv4 = new WiFiAddressInformation(apHandle, AddressFamily.IPv4);
@@ -256,31 +356,5 @@ namespace Tizen.Network.WiFi
             }
             _essid = Marshal.PtrToStringAnsi(strPtr);
         }
-
-        ~WiFiNetwork()
-        {
-            Dispose(false);
-        }
-
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                _ipv4.Dispose();
-                _ipv6.Dispose();
-            }
-            _apHandle = IntPtr.Zero;
-            disposed = true;
-        }
-
     } //WiFiNetworkInformation
 }