/// <summary> /// Connects the access point asynchronously. /// </summary> /// <since_tizen> 3 </since_tizen> /// <returns> A task indicating whether the connect method is done or not.</returns> /// <remarks> /// This method must be called from MainThread. /// </remarks> /// <feature>http://tizen.org/feature/network.wifi</feature> /// <privilege>http://tizen.org/privilege/network.set</privilege> /// <privilege>http://tizen.org/privilege/network.get</privilege> /// <exception cref="NotSupportedException">Thrown when the Wi-Fi is not supported.</exception> /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception> /// <exception cref="ObjectDisposedException">Thrown when the object instance is disposed or released.</exception> /// <exception cref="OutOfMemoryException">Thrown when the system is out of memory.</exception> /// <exception cref="InvalidOperationException">Thrown when the method failed due to an invalid operation.</exception> public Task ConnectAsync() { Log.Info(Globals.LogTag, "ConnectAsync HashCode: " + _apHandle.GetHashCode()); if (_disposed) { throw new ObjectDisposedException("Invalid AP instance (Object may have been disposed or released)"); } TaskCompletionSource <bool> task = new TaskCompletionSource <bool>(); IntPtr id; lock (_callback_map) { id = (IntPtr)_requestId++; _callback_map[id] = (error, key) => { Log.Info(Globals.LogTag, "ConnectAsync done " + (WiFiError)error); if (error != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Error occurs during WiFi connecting, " + (WiFiError)error); task.SetException(new InvalidOperationException("Error occurs during WiFi connecting, " + (WiFiError)error)); } else { task.SetResult(true); } lock (_callback_map) { _callback_map.Remove(key); } }; } context.Post((x) => { Log.Info(Globals.LogTag, "Interop.WiFi.Connect"); try { int ret = Interop.WiFi.Connect(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle, _callback_map[id], id); if (ret != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret); if (ret == (int)WiFiError.InvalidParameterError) { throw new InvalidOperationException("Invalid handle"); } WiFiErrorFactory.ThrowWiFiException(ret, WiFiManagerImpl.Instance.GetSafeHandle().DangerousGetHandle(), _apHandle); } } catch (Exception e) { Log.Error(Globals.LogTag, "Exception on ConnectAsync\n" + e); task.SetException(e); } }, null); return(task.Task); }
internal Task SetDefaultCellularProfile(CellularServiceType type, ConnectionProfile profile) { Log.Info(Globals.LogTag, "SetDefaultCellularProfile"); if (profile != null) { TaskCompletionSource <bool> task = new TaskCompletionSource <bool>(); IntPtr id; lock (_callback_map) { id = (IntPtr)_requestId++; _callback_map[id] = (error, key) => { Log.Info(Globals.LogTag, "SetDefaultCellularProfile done " + profile.Name); if (error != ConnectionError.None) { Log.Error(Globals.LogTag, "Error occurs during set default cellular profile, " + error); task.SetException(new InvalidOperationException("Error occurs during set default cellular profile, " + error)); } else { task.SetResult(true); } lock (_callback_map) { _callback_map.Remove(key); } }; } context.Post((x) => { Log.Info(Globals.LogTag, "Interop.Connection.SetDefaultCellularServiceProfileAsync " + profile.Name); try { int ret = Interop.Connection.SetDefaultCellularServiceProfileAsync(GetHandle(), (int)type, profile.ProfileHandle, _callback_map[id], id); if ((ConnectionError)ret != ConnectionError.None) { Log.Error(Globals.LogTag, "It failed to set default cellular profile, " + (ConnectionError)ret); ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony"); ConnectionErrorFactory.CheckHandleNullException(ret, (GetHandle() == IntPtr.Zero || profile.ProfileHandle == IntPtr.Zero), "Connection or Profile Handle may have been disposed or released"); ConnectionErrorFactory.ThrowConnectionException(ret); } } catch (Exception e) { Log.Error(Globals.LogTag, "Exception on SetDefaultCellularServiceProfileAsync\n" + e.ToString()); task.SetException(e); } }, null); return(task.Task); } else { throw new ArgumentNullException("Profile is null"); } }
internal Task ActivateAsync() { Log.Info(Globals.LogTag, "ActivateAsync"); TaskCompletionSource <bool> task = new TaskCompletionSource <bool>(); IntPtr id; lock (_callback_map) { id = (IntPtr)_requestId++; _callback_map[id] = (error, key) => { Log.Info(Globals.LogTag, "ActivateAsync done"); if (error != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Error occurs during WiFi activating, " + (WiFiError)error); task.SetException(new InvalidOperationException("Error occurs during WiFi activating, " + (WiFiError)error)); } else { task.SetResult(true); } lock (_callback_map) { _callback_map.Remove(key); } }; } context.Post((x) => { Log.Info(Globals.LogTag, "Interop.WiFi.ActivateAsync"); try { int ret = Interop.WiFi.Activate(GetSafeHandle(), _callback_map[id], id); if (ret != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Failed to activate wifi, Error - " + (WiFiError)ret); WiFiErrorFactory.ThrowWiFiException(ret, GetSafeHandle().DangerousGetHandle()); } } catch (Exception e) { Log.Error(Globals.LogTag, "Exception on ActivateAsync\n" + e.ToString()); task.SetException(e); } }, null); return(task.Task); }
internal Task ActivateAsync() { Log.Info(Globals.LogTag, "ActivateAsync"); TaskCompletionSource <bool> task = new TaskCompletionSource <bool>(); IntPtr id; lock (_callback_map) { id = (IntPtr)_requestId++; _callback_map[id] = (error, key) => { Log.Info(Globals.LogTag, "ActivateAsync done"); if (error != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Error occurs during WiFi activating, " + (WiFiError)error); task.SetException(WiFiErrorFactory.GetException(error, "Error occurs during WiFi activating")); } else { task.SetResult(true); } lock (_callback_map) { _callback_map.Remove(key); } }; } context.Post((x) => { Log.Info(Globals.LogTag, "Interop.WiFi.ActivateAsync"); try { int ret = (int)WiFiError.None; lock (_callback_map) { ret = Interop.WiFi.Activate(GetSafeHandle(), _callback_map[id], id); } CheckReturnValue(ret, "Activate", ""); } catch (Exception e) { Log.Error(Globals.LogTag, "Exception on ActivateAsync\n" + e); task.SetException(e); } }, null); return(task.Task); }
/// <summary> /// Connects the access point with WPS without SSID asynchronously. /// </summary> /// <since_tizen> 3 </since_tizen> /// <param name="info">A WpsInfo instance which is of type WpsPbcInfo or WpsPinInfo.</param> /// <returns>A task which contains Connected access point information.</returns> /// <remarks> /// If WpsPinInfo is used, its object has to be constructed with a pin which must be 4 or 8 characters long. \n /// This method must be called from MainThread. /// </remarks> /// <feature>http://tizen.org/feature/network.wifi</feature> /// <privilege>http://tizen.org/privilege/network.set</privilege> /// <privilege>http://tizen.org/privilege/network.get</privilege> /// <privilege>http://tizen.org/privilege/network.profile</privilege> /// <exception cref="NotSupportedException">Thrown when the Wi-Fi is not supported.</exception> /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception> /// <exception cref="ArgumentNullException">Thrown when the WpsPinInfo object is constructed with a null pin.</exception> /// <exception cref="ArgumentOutOfRangeException">Thrown when the WpsPinInfo object is constructed with a pin which is not of 4 or 8 characters long.</exception> /// <exception cref="OutOfMemoryException">Thrown when the system is out of memory.</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> /// <exception cref="NowInProgressException">Thrown when the Wi-Fi connection is now in progress.</exception> /// <exception cref="TimeoutException">Thrown when the timeout of WPS connection is expired.</exception> public static Task <WiFiAP> ConnectWpsWithoutSsidAsync(WpsInfo info) { Log.Info(Globals.LogTag, "ConnectWpsWithoutSsidAsync"); wpsWithoutSsidTask = new TaskCompletionSource <WiFiAP>(); IntPtr id; lock (s_callbackMap) { id = (IntPtr)s_requestId++; s_callbackMap[id] = (error, key) => { Log.Info(Globals.LogTag, "ConnectWpsWithoutSsidAsync done"); if (error != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Error occurs during WiFi connecting, " + (WiFiError)error); wpsWithoutSsidTask.SetException(WiFiErrorFactory.GetException(error, "Error occurs during WiFi connecting")); wpsWithoutSsidTask = null; Log.Info(Globals.LogTag, "task is null"); } else { WiFiAP ap = WiFiManagerImpl.Instance.GetConnectedAP(); wpsWithoutSsidTask.SetResult(ap); wpsWithoutSsidTask = null; Log.Info(Globals.LogTag, "task is null"); } lock (s_callbackMap) { s_callbackMap.Remove(key); } }; } s_context.Post((x) => { try { int ret = -1; if (info.GetType() == typeof(WpsPbcInfo)) { Log.Info(Globals.LogTag, "Interop.WiFi.ConnectByWpsPbcWithoutSsid"); ret = Interop.WiFi.ConnectByWpsPbcWithoutSsid(WiFiManagerImpl.Instance.GetSafeHandle(), s_callbackMap[id], id); } else if (info.GetType() == typeof(WpsPinInfo)) { WpsPinInfo pinInfo = (WpsPinInfo)info; if (pinInfo.GetWpsPin() == null) { throw new ArgumentNullException("Wps pin should not be null"); } if (pinInfo.GetWpsPin().Length != 4 && pinInfo.GetWpsPin().Length != 8) { throw new ArgumentOutOfRangeException("Wps pin should be of 4 or 8 characters long"); } Log.Info(Globals.LogTag, "Interop.WiFi.ConnectByWpsPinWithoutSsid"); ret = Interop.WiFi.ConnectByWpsPinWithoutSsid(WiFiManagerImpl.Instance.GetSafeHandle(), pinInfo.GetWpsPin(), s_callbackMap[id], id); } if (ret != (int)WiFiError.None) { Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret); WiFiErrorFactory.ThrowWiFiException(ret, WiFiManagerImpl.Instance.GetSafeHandle().DangerousGetHandle()); } } catch (Exception e) { Log.Error(Globals.LogTag, "Exception on ConnectWpsWithoutSsidAsync\n" + e); wpsWithoutSsidTask.SetException(e); wpsWithoutSsidTask = null; Log.Info(Globals.LogTag, "task is null"); } }, null); return(wpsWithoutSsidTask.Task); }