2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Collections.Generic;
20 using System.Runtime.InteropServices;
21 using Tizen.Network.Connection;
23 namespace Tizen.Network.WiFi
26 /// A class for managing the Wi-Fi network information.
28 /// <since_tizen> 3 </since_tizen>
29 public class WiFiNetwork
31 private Interop.WiFi.SafeWiFiAPHandle _apHandle;
32 private IAddressInformation _ipv4;
33 private IAddressInformation _ipv6;
34 private string _essid;
37 /// The Extended Service Set Identifier (ESSID).
39 /// <since_tizen> 3 </since_tizen>
40 /// <value>ESSID of the Wi-Fi.</value>
45 if (string.IsNullOrEmpty(_essid))
48 int ret = Interop.WiFi.AP.GetEssid(_apHandle, out strPtr);
49 if (ret != (int)WiFiError.None)
51 Log.Error(Globals.LogTag, "Failed to get essid, Error - " + (WiFiError)ret);
56 _essid = Marshal.PtrToStringAnsi(strPtr);
64 /// The Basic Service Set Identifier (BSSID).
66 /// <since_tizen> 3 </since_tizen>
67 /// <value>BSSID of the Wi-Fi.</value>
73 int ret = Interop.WiFi.AP.GetBssid(_apHandle, out strPtr);
74 if (ret != (int)WiFiError.None)
76 Log.Error(Globals.LogTag, "Failed to get bssid, Error - " + (WiFiError)ret);
79 return Marshal.PtrToStringAnsi(strPtr);
84 /// The address information for IPv4.
86 /// <since_tizen> 3 </since_tizen>
87 /// <value>IP address information for IPv4 type.</value>
88 public IAddressInformation IPv4Setting
97 /// The address information for IPv6.
99 /// <since_tizen> 3 </since_tizen>
100 /// <value>IP address information for IPv6 type.</value>
101 public IAddressInformation IPv6Setting
110 /// The proxy address.
112 /// <since_tizen> 3 </since_tizen>
113 /// <value>Represents the proxy address of the Wi-Fi.</value>
114 /// <exception cref="NotSupportedException">Thrown while setting this property when Wi-Fi is not supported.</exception>
115 /// <exception cref="ArgumentException">Thrown while setting this property due to an invalid parameter.</exception>
116 /// <exception cref="InvalidOperationException">Thrown while setting this value due to an invalid operation.</exception>
117 public string ProxyAddress
122 int ret = Interop.WiFi.AP.GetProxyAddress(_apHandle, (int)AddressFamily.IPv4, out strPtr);
123 if (ret != (int)WiFiError.None)
125 Log.Error(Globals.LogTag, "Failed to get proxy address, Error - " + (WiFiError)ret);
128 return Marshal.PtrToStringAnsi(strPtr);
132 int ret = Interop.WiFi.AP.SetProxyAddress(_apHandle, (int)AddressFamily.IPv4, value);
133 if (ret != (int)WiFiError.None)
135 Log.Error(Globals.LogTag, "Failed to set proxy address, Error - " + (WiFiError)ret);
136 WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
138 WiFiManagerImpl.Instance.UpdateAP(_apHandle);
143 /// The proxy type (IPv6).
145 /// <since_tizen> 3 </since_tizen>
146 /// <value>Represents the proxy type of the Wi-Fi.</value>
147 /// <exception cref="NotSupportedException">Thrown while setting this property when Wi-Fi is not supported.</exception>
148 /// <exception cref="ArgumentException">Thrown while setting this property due to an invalid parameter.</exception>
149 /// <exception cref="InvalidOperationException">Thrown while setting this value due to an invalid operation.</exception>
150 public WiFiProxyType ProxyType
155 int ret = Interop.WiFi.AP.GetProxyType(_apHandle, out type);
156 if (ret != (int)WiFiError.None)
158 Log.Error(Globals.LogTag, "Failed to get proxy type, Error - " + (WiFiError)ret);
160 return (WiFiProxyType)type;
164 int ret = Interop.WiFi.AP.SetProxyType(_apHandle, (int)value);
165 if (ret != (int)WiFiError.None)
167 Log.Error(Globals.LogTag, "Failed to set proxy type, Error - " + (WiFiError)ret);
168 WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
170 WiFiManagerImpl.Instance.UpdateAP(_apHandle);
175 /// The frequency band (MHz).
177 /// <since_tizen> 3 </since_tizen>
178 /// <value>Represents the frequency band value.</value>
184 int ret = Interop.WiFi.AP.GetFrequency(_apHandle, out freq);
185 if (ret != (int)WiFiError.None)
187 Log.Error(Globals.LogTag, "Failed to get frequency, Error - " + (WiFiError)ret);
194 /// The received signal strength indicator (RSSI).
196 /// <since_tizen> 3 </since_tizen>
197 /// <value>Represents RSSI of Wi-Fi (dbm).</value>
203 int ret = Interop.WiFi.AP.GetRssi(_apHandle, out rssi);
204 if (ret != (int)WiFiError.None)
206 Log.Error(Globals.LogTag, "Failed to get rssi, Error - " + (WiFiError)ret);
213 /// The Received signal strength indication(RSSI).
215 /// <since_tizen> 4 </since_tizen>
216 /// <value>Represents Rssi level of WiFi.</value>
217 /// <feature>http://tizen.org/feature/network.wifi</feature>
218 /// <exception cref="NotSupportedException">Thrown while setting this property when WiFi is not supported.</exception>
219 public WiFiRssiLevel RssiLevel
224 int ret = Interop.WiFi.AP.GetRssiLevel(_apHandle, out rssi);
225 if (ret != (int)WiFiError.None)
227 Log.Error(Globals.LogTag, "Failed to get rssi level, Error - " + (WiFiError)ret);
229 return (WiFiRssiLevel)rssi;
234 /// The max speed (Mbps).
236 /// <since_tizen> 3 </since_tizen>
237 /// <value>Represents the max speed value.</value>
243 int ret = Interop.WiFi.AP.GetMaxSpeed(_apHandle, out maxSpeed);
244 if (ret != (int)WiFiError.None)
246 Log.Error(Globals.LogTag, "Failed to get max speed, Error - " + (WiFiError)ret);
253 /// A property to check whether the access point is a favorite or not.
255 /// <since_tizen> 3 </since_tizen>
256 /// <value>Boolean value to check if the access point is a favorite or not.</value>
257 public bool IsFavorite
262 int ret = Interop.WiFi.AP.IsFavorite(_apHandle, out isFavorite);
263 if (ret != (int)WiFiError.None)
265 Log.Error(Globals.LogTag, "Failed to get favorite, Error - " + (WiFiError)ret);
272 /// A property to check whether the access point is a passpoint or not.
274 /// <since_tizen> 3 </since_tizen>
275 /// <value>Boolean value to check if the access point is a passpoint or not.</value>
276 public bool IsPasspoint
281 Log.Debug(Globals.LogTag, "Handle: " + _apHandle);
282 int ret = Interop.WiFi.AP.IsPasspoint(_apHandle, out isPasspoint);
283 if (ret != (int)WiFiError.None)
285 Log.Error(Globals.LogTag, "Failed to get isPassport, Error - " + (WiFiError)ret);
292 /// The connection state.
294 /// <since_tizen> 3 </since_tizen>
295 /// <value>Represents the connection state of the Wi-Fi.</value>
296 public WiFiConnectionState ConnectionState
301 int ret = Interop.WiFi.AP.GetConnectionState(_apHandle, out state);
302 if (ret != (int)WiFiError.None)
304 Log.Error(Globals.LogTag, "Failed to get connection state, Error - " + (WiFiError)ret);
306 return (WiFiConnectionState)state;
311 /// Gets all IPv6 addresses of the access point.
313 /// <since_tizen> 3 </since_tizen>
314 /// <returns>A list of IPv6 addresses of the access point.</returns>
315 /// <feature>http://tizen.org/feature/network.wifi</feature>
316 /// <exception cref="NotSupportedException">Thrown when the Wi-Fi is not supported.</exception>
317 /// <exception cref="ArgumentException">Thrown when the method failed due to an invalid parameter.</exception>
318 /// <exception cref="InvalidOperationException">Thrown when the method failed due to an invalid operation.</exception>
319 public IEnumerable<System.Net.IPAddress> GetAllIPv6Addresses()
321 Log.Debug(Globals.LogTag, "GetAllIPv6Addresses");
322 List<System.Net.IPAddress> ipList = new List<System.Net.IPAddress>();
323 Interop.WiFi.HandleCallback callback = (IntPtr ipv6Address, IntPtr userData) =>
325 if (ipv6Address != IntPtr.Zero)
327 string ipv6 = Marshal.PtrToStringAnsi(ipv6Address);
328 if (ipv6.Length == 0)
329 ipList.Add(System.Net.IPAddress.Parse("::"));
331 ipList.Add(System.Net.IPAddress.Parse(ipv6));
337 int ret = Interop.WiFi.AP.GetAllIPv6Addresses(_apHandle, callback, IntPtr.Zero);
338 if (ret != (int)WiFiError.None)
340 Log.Error(Globals.LogTag, "Failed to get all IPv6 addresses, Error - " + (WiFiError)ret);
341 WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
347 internal WiFiNetwork(Interop.WiFi.SafeWiFiAPHandle apHandle)
349 _apHandle = apHandle;
350 _ipv4 = new WiFiAddressInformation(apHandle, AddressFamily.IPv4);
351 _ipv6 = new WiFiAddressInformation(apHandle, AddressFamily.IPv6);
354 int ret = Interop.WiFi.AP.GetEssid(_apHandle, out strPtr);
355 if (ret != (int)WiFiError.None)
357 Log.Error(Globals.LogTag, "Failed to get essid, Error - " + (WiFiError)ret);
359 _essid = Marshal.PtrToStringAnsi(strPtr);
361 } //WiFiNetworkInformation