diff --git a/internals/src/Tizen.Network.Tethering/Interop/Interop.TetheringExtension.cs b/internals/src/Tizen.Network.Tethering/Interop/Interop.TetheringExtension.cs index d6cf65f05fc..2608a47e498 100644 --- a/internals/src/Tizen.Network.Tethering/Interop/Interop.TetheringExtension.cs +++ b/internals/src/Tizen.Network.Tethering/Interop/Interop.TetheringExtension.cs @@ -30,6 +30,8 @@ internal static partial class TetheringExtension internal delegate void DisabledCallback(int result, TetheringDisabledCause cause, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ConnectionStateChangedCallback(IntPtr client, bool opened, IntPtr userData); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + internal delegate void ModeChangedCallback(int mode, IntPtr userData); // Tethering Manager @@ -57,6 +59,12 @@ internal static partial class TetheringExtension [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_unset_connection_state_changed_cb")] internal static extern int UnsetConnectionStateChangedCallback(IntPtr tethering); + [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_set_mode_changed_cb")] + internal static extern int SetModeChangedCallback(IntPtr tethering, ModeChangedCallback callback, IntPtr userData); + + [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_unset_mode_changed_cb")] + internal static extern int UnsetModeChangedCallback(IntPtr tethering); + [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_activate")] internal static extern int Activate(IntPtr tethering); @@ -72,6 +80,9 @@ internal static partial class TetheringExtension [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_set_passphrase")] internal static extern int SetPassphrase(IntPtr tethering, string ssid); + [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_update_tethering_info")] + internal static extern int UpdateTetheringInfo(IntPtr tethering, string ssid, string passphrase); + [DllImport(Libraries.Tethering, EntryPoint = "tethering_ext_set_channel")] internal static extern int SetChannel(IntPtr tethering, int channel); diff --git a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEnumerations.cs b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEnumerations.cs index 0f34aca2d5c..75620d2a5ab 100644 --- a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEnumerations.cs +++ b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEnumerations.cs @@ -164,4 +164,23 @@ public enum TetheringSecurityType /// 13 Sae = 3, } + + /// + /// Enumeration for the Tethering Extension mode. + /// + /// 13 + public enum TetheringExtensionMode + { + /// + /// Tethering is disabled. + /// + /// 13 + Disabled = 0, + + /// + /// Tethering is enabled. + /// + /// 13 + Enabled = 1, + } } diff --git a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEvents.cs b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEvents.cs index 2d049d5378e..7b4083afdeb 100644 --- a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEvents.cs +++ b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionEvents.cs @@ -7,10 +7,12 @@ internal partial class TetheringExtensionManagerImpl { private event EventHandler _tetheringExtEnabled; private event EventHandler _tetheringExtDisabled; private event EventHandler _connectionStateChanged; + private event EventHandler _modeChanged; private Interop.TetheringExtension.EnabledCallback _enabledCallback; private Interop.TetheringExtension.DisabledCallback _disabledCallback; private Interop.TetheringExtension.ConnectionStateChangedCallback _connectionStateChangedCallback; + private Interop.TetheringExtension.ModeChangedCallback _modeChangedCallback; internal event EventHandler TetheringExtensionEnabled { @@ -117,6 +119,41 @@ internal event EventHandler ConnectionStateChan } } + internal event EventHandler ModeChanged + { + add + { + if (_modeChanged == null) + { + try + { + RegisterModeChangedEvent(); + } + catch (Exception e) + { + Log.Error(Globals.LogTag, "Exception on adding ModeChanged\n" + e); + return; + } + } + _modeChanged += value; + } + remove + { + _modeChanged -= value; + if (_modeChanged == null) + { + try + { + UnregisterModeChangedEvent(); + } + catch (Exception e) + { + Log.Error(Globals.LogTag, "Exception on removing ModeChanged\n" + e); + } + } + } + } + private void RegisterEnabledEvent() { @@ -196,6 +233,34 @@ private void UnregisterConnectionStatechangedEvent() } } + private void RegisterModeChangedEvent() + { + Log.Info(Globals.LogTag, "RegisterModeChangedEvent"); + _modeChangedCallback = (int mode, IntPtr userData) => + { + TetheringExtensionMode tetheringMode = (TetheringExtensionMode)mode; + TetheringExtensionModeChangedEventArgs e = new TetheringExtensionModeChangedEventArgs(tetheringMode); + _modeChanged?.Invoke(this, e); + }; + + int ret = Interop.TetheringExtension.SetModeChangedCallback(GetHandle(), _modeChangedCallback, IntPtr.Zero); + if (ret != (int)TetheringError.None) + { + Log.Error(Globals.LogTag, "Failed to set mode changed callback, Error - " + (TetheringError)ret); + } + } + + private void UnregisterModeChangedEvent() + { + Log.Info(Globals.LogTag, "UnregisterModeChangedEvent"); + int ret = Interop.TetheringExtension.UnsetModeChangedCallback(GetHandle()); + if (ret != (int)TetheringError.None) + { + Log.Error(Globals.LogTag, "Failed to unset mode changed callback, Error - " + (TetheringError)ret); + } + _modeChangedCallback = null; + } + } } diff --git a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManager.cs b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManager.cs index 6b60fc29d41..28e51bebb04 100644 --- a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManager.cs +++ b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManager.cs @@ -92,6 +92,27 @@ static public event EventHandler ConnectionStat } } + /// + /// ModeChanged is raised when the tethering mode is changed. + /// + /// 13 + /// + /// http://tizen.org/privilege/tethering.admin + /// + /// Thrown when the method failed due to an invalid parameter. + /// Thrown when the method failed due to an invalid operation. + static public event EventHandler ModeChanged + { + add + { + TetheringExtensionManagerImpl.Instance.ModeChanged += value; + } + remove + { + TetheringExtensionManagerImpl.Instance.ModeChanged -= value; + } + } + /// /// Activates the TetheringExtension. /// @@ -122,6 +143,22 @@ static public void Deactivate() TetheringExtensionManagerImpl.Instance.DeActivate(); } + /// + /// Updates the tethering information with new SSID and passphrase. + /// + /// 13 + /// + /// http://tizen.org/privilege/tethering.admin + /// + /// Thrown when SSID or passphrase is invalid. + /// Thrown when tethering is not active or settings match current values. + /// The new SSID + /// The new passphrase + static public void UpdateTetheringInfo(string ssid, string passphrase) + { + TetheringExtensionManagerImpl.Instance.UpdateTetheringInfo(ssid, passphrase); + } + /// /// Returns whethers TetheringExtension is enabled or not. /// diff --git a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManagerImpl.cs b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManagerImpl.cs index 652fb543ca6..f2d53cd3971 100644 --- a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManagerImpl.cs +++ b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionManagerImpl.cs @@ -153,6 +153,30 @@ internal void DeActivate() CheckReturnValue(ret, "DeActivate", PrivilegeNetworkProfile); } + internal void UpdateTetheringInfo(string ssid, string passphrase) + { + if (ssid == null) + { + Log.Error(Globals.LogTag, "SSID cannot be null"); + throw new ArgumentException("SSID cannot be null"); + } + + if (passphrase == null) + { + Log.Error(Globals.LogTag, "Passphrase cannot be null"); + throw new ArgumentException("Passphrase cannot be null"); + } + + Log.Info(Globals.LogTag, "Updating tethering info"); + int ret = Interop.TetheringExtension.UpdateTetheringInfo(GetHandle(), ssid, passphrase); + + if (ret != (int)TetheringError.None) + { + Log.Error(Globals.LogTag, "Failed to update tethering info, Error - " + (TetheringError)ret); + CheckReturnValue(ret, "UpdateTetheringInfo", PrivilegeNetworkProfile); + } + } + public TetheringInfo GetTetheringInfo() { Log.Info(Globals.LogTag, "GetTetheringInfo"); diff --git a/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionModeChangedEventArgs.cs b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionModeChangedEventArgs.cs new file mode 100644 index 00000000000..43c9e441ba2 --- /dev/null +++ b/internals/src/Tizen.Network.Tethering/Tizen.Network.Tethering/TetheringExtensionModeChangedEventArgs.cs @@ -0,0 +1,27 @@ +using System; + +namespace Tizen.Network.Tethering +{ + /// + /// TetheringExtensionModeChangedEventArgs provides the mode information when the ModeChanged event is raised. + /// + /// 13 + public class TetheringExtensionModeChangedEventArgs : EventArgs + { + /// + /// The tethering mode. + /// + /// 13 + public TetheringExtensionMode Mode { get; } + + /// + /// Constructor for TetheringExtensionModeChangedEventArgs. + /// + /// 13 + /// The tethering mode (Enabled or Disabled). + public TetheringExtensionModeChangedEventArgs(TetheringExtensionMode mode) + { + Mode = mode; + } + } +}