[Tizen.Network.WiFiDirect] Add VSIE and connection related APIs (#6755)
authorakash1-kumar <115205462+akash1-kumar@users.noreply.github.com>
Fri, 11 Apr 2025 04:35:27 +0000 (10:05 +0530)
committerGitHub <noreply@github.com>
Fri, 11 Apr 2025 04:35:27 +0000 (13:35 +0900)
* [Tizen.Network.WiFiDirect] Add new wifi-direct API signature

Signed-off-by: Akash Kumar <akash1.kumar@.samsung.com>
* Implement newly added wifi-direct apis

Signed-off-by: Akash Kumar <akash1.kumar@.samsung.com>
* Apply review comments

Signed-off-by: Akash Kumar <akash1.kumar@.samsung.com>
* Update description

Signed-off-by: Akash Kumar <akash1.kumar@.samsung.com>
* Apply review comment

Signed-off-by: Akash Kumar <akash1.kumar@.samsung.com>
---------

Signed-off-by: Akash Kumar <akash1.kumar@.samsung.com>
Co-authored-by: Akash Kumar <akash1.kumar@.samsung.com>
src/Tizen.Network.WiFiDirect/Interop/Interop.WiFiDirect.cs
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect/WiFiDirectEnumerations.cs
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect/WiFiDirectManager.cs
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect/WiFiDirectManagerImpl.cs
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect/WiFiDirectPeer.cs

index 366588859315b3347c36f02633548ca94896021a..ecb4b59b99da9bdc8ee2625afb1da56c2fc08797 100644 (file)
@@ -229,5 +229,19 @@ internal static partial class Interop
         internal static extern int SetSessionTimer(int seconds);
         [DllImport(Libraries.WiFiDirect,EntryPoint = "wifi_direct_set_auto_group_removal")]
         internal static extern int SetAutoGroupRemoval(bool enable);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_add_vsie")]
+        internal static extern int AddVsie(WiFiDirectVsieFrameType frameType, string vsie);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_get_vsie")]
+        internal static extern int GetVsie(WiFiDirectVsieFrameType frameType, out string vsie);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_remove_vsie")]
+        internal static extern int RemoveVsie(WiFiDirectVsieFrameType frameType, string vsie);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_get_connecting_peer_info")]
+        internal static extern int GetConnectingPeerInfo(out IntPtr peer);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_get_peer_vsie")]
+        internal static extern int GetPeerVsie(string macAddress, out string vsie);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_accept_connection")]
+        internal static extern int AcceptConnection(string macAddress);
+        [DllImport(Libraries.WiFiDirect, EntryPoint = "wifi_direct_reject_connection")]
+        internal static extern int RejectConnection(string macAddress);
     }
 }
index a02a98e62171e79bb8a0564841111d89d4a76e3c..dfc7a63ad622c52c9fb2b93278d3814aa1916708 100644 (file)
@@ -658,4 +658,68 @@ namespace Tizen.Network.WiFiDirect
         /// </summary>
         ConnectionCancelled = -0x01C60000 | 0x10
     }
+
+    /// <summary>
+    /// Enumeration for Wi-Fi frame type.
+    /// </summary>
+    /// <since_tizen> 13 </since_tizen>
+    public enum WiFiDirectVsieFrameType
+    {
+        /// <summary>
+        /// P2P probe request frame.
+        /// </summary>
+        P2PProbeRequest,
+        /// <summary>
+        /// P2P probe response frame.
+        /// </summary>
+        P2PProbeResponse,
+        /// <summary>
+        ///P2P group owner probe response frame.
+        /// </summary>
+        P2PGOProbeResponse,
+        /// <summary>
+        /// P2P probe request frame.
+        /// </summary>
+        P2PGOBeacon,
+        /// <summary>
+        /// P2P provision discovery request frame.
+        /// </summary>
+        P2PProvisionDiscoveryRequest,
+        /// <summary>
+        /// P2P provision discovery response frame.
+        /// </summary>
+        P2PProvisionDiscoveryResponse,
+        /// <summary>
+        /// P2P probe request frame.
+        /// </summary>
+        P2PGONegotiationRequest,
+        /// <summary>
+        /// P2P group owner negotiation response frame.
+        /// </summary>
+        P2PGONegotiationResponse,
+        /// <summary>
+        /// P2P group owner negotiation confirmation frame.
+        /// </summary>
+        P2PGONegotiationConfirmation,
+        /// <summary>
+        /// P2P invitation request frame.
+        /// </summary>
+        P2PInvitationRequest,
+        /// <summary>
+        /// P2P invitation response frame.
+        /// </summary>
+        P2PInvitationResponse,
+        /// <summary>
+        /// P2P association request frame.
+        /// </summary>
+        P2PAssociationRequest,
+        /// <summary>
+        /// P2P association response frame.
+        /// </summary>
+        P2PAssociationResponse,
+        /// <summary>
+        /// Association request frame.
+        /// </summary>
+        AssociationRequest
+    }
 }
index 612b01850fbf293bee2543a8d503a9e50c9a741f..386d8e768393d4233868e0ea37d5a8ab6ea3d980 100644 (file)
@@ -1709,5 +1709,201 @@ namespace Tizen.Network.WiFiDirect
                 WiFiDirectErrorFactory.ThrowWiFiDirectException((int)WiFiDirectError.NotPermitted);
             }
         }
+
+        /// <summary>
+        /// Adds the Wi-Fi Vendor Specific Information Element (VSIE) to specific frame type.
+        /// </summary>
+        /// <param name="frameType">frame type for setting VSIE.</param>
+        /// <param name="vsie">VSIE value. A valid string contains hexadecimal characters i.e. [0-9a-f]</param>
+        /// <privilege>
+        /// http://tizen.org/privilege/wifidirect
+        /// </privilege>
+        /// <feature>
+        /// http://tizen.org/feature/network.wifidirect
+        /// </feature>
+        /// <remarks>
+        /// Wi-Fi Direct must be activated.
+        /// <paramref name="vsie"/> for <paramref name="frameType"/> will be in effect until Wi-Fi Direct is deactivated.
+        /// A valid value will be concatenated to already added VSIE values. If vsie value is invalid, InvalidOperationException
+        /// will be thrown. If same value for given frameType is already in effect, then there will be no change.
+        /// VSIE data structure is described in 802.11 specification.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The object is in invalid state.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when application does not have privilege to access this method.</exception>
+        /// <since_tizen> 13 </since_tizen>
+        public static void AddVsie(WiFiDirectVsieFrameType frameType, string vsie)
+        {
+            if (Globals.IsActivated)
+            {
+                WiFiDirectManagerImpl.Instance.AddVsie(frameType, vsie);
+            }
+
+            else
+            {
+                Log.Error(Globals.LogTag, "Wifi-direct is not activated");
+                WiFiDirectErrorFactory.ThrowWiFiDirectException((int)WiFiDirectError.NotPermitted);
+            }
+        }
+
+        /// <summary>
+        /// Gets the Wi-Fi Vendor Specific Information Elements (VSIE) from specific frame type.
+        /// </summary>
+        /// <param name="frameType">frame type for getting VSIE.</param>
+        /// <returns>VSIE value if success else null value.</returns>
+        /// <privilege>
+        /// http://tizen.org/privilege/wifidirect
+        /// </privilege>
+        /// <feature>
+        /// http://tizen.org/feature/network.wifidirect
+        /// </feature>
+        /// <remarks>
+        /// Wi-Fi Direct must be activated.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The object is in invalid state.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when application does not have privilege to access this method.</exception>
+        /// <since_tizen> 13 </since_tizen>
+        public static string GetVsie(WiFiDirectVsieFrameType frameType)
+        {
+            if (Globals.IsActivated)
+            {
+                return WiFiDirectManagerImpl.Instance.GetVsie(frameType);
+            }
+
+            else
+            {
+                Log.Error(Globals.LogTag, "Wifi-direct is not activated");
+                WiFiDirectErrorFactory.ThrowWiFiDirectException((int)WiFiDirectError.NotPermitted);
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// Removes the Wi-Fi Vendor Specific Information Element (VSIE) from specific frame type.
+        /// </summary>
+        /// <param name="frameType">frame type for removing VSIE.</param>
+        /// <param name="vsie">VSIE value</param>
+        /// <privilege>
+        /// http://tizen.org/privilege/wifidirect
+        /// </privilege>
+        /// <feature>
+        /// http://tizen.org/feature/network.wifidirect
+        /// </feature>
+        /// <remarks>
+        /// Wi-Fi Direct must be activated.
+        /// A VSIE value if already added, will be removed from VSIE value else InvalidOperationException will be thrown.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The object is in invalid state.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when application does not have privilege to access this method.</exception>
+        /// <since_tizen> 13 </since_tizen>
+        public static void RemoveVsie(WiFiDirectVsieFrameType frameType, string vsie)
+        {
+            if (Globals.IsActivated)
+            {
+                WiFiDirectManagerImpl.Instance.RemoveVsie(frameType, vsie);
+            }
+
+            else
+            {
+                Log.Error(Globals.LogTag, "Wifi-direct is not activated");
+                WiFiDirectErrorFactory.ThrowWiFiDirectException((int)WiFiDirectError.NotPermitted);
+            }
+        }
+
+        /// <summary>
+        /// Gets the information of peer devices which is in the connecting state.
+        /// </summary>
+        /// <returns>Connecting peer object.</returns>
+        /// <privilege>
+        /// http://tizen.org/privilege/wifidirect
+        /// </privilege>
+        /// <feature>
+        /// http://tizen.org/feature/network.wifidirect
+        /// </feature>
+        /// <remarks>
+        /// Wi-Fi Direct service must be in connecting state.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The object is in invalid state.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when application does not have privilege to access this method.</exception>
+        /// <since_tizen> 13 </since_tizen>
+        public static WiFiDirectPeer GetConnectingPeer()
+        {
+            if (Globals.IsActivated)
+            {
+                return WiFiDirectManagerImpl.Instance.GetConnectingPeer();
+            }
+
+            else
+            {
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// Accepts a connection requested from peer.
+        /// </summary>
+        /// <param name="peerMacAddress">MAC Address of the peer.</param>
+        /// <privilege>
+        /// http://tizen.org/privilege/wifidirect
+        /// </privilege>
+        /// <feature>
+        /// http://tizen.org/feature/network.wifidirect
+        /// </feature>
+        /// <remarks>
+        /// Wi-Fi Direct must be activated.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The object is in invalid state.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when application does not have privilege to access this method.</exception>
+        /// <since_tizen> 13 </since_tizen>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static void AcceptConnection(string peerMacAddress)
+        {
+            if (Globals.IsActivated)
+            {
+                WiFiDirectManagerImpl.Instance.AcceptConnection(peerMacAddress);
+            }
+
+            else
+            {
+                Log.Error(Globals.LogTag, "Wifi-direct is not activated");
+                WiFiDirectErrorFactory.ThrowWiFiDirectException((int)WiFiDirectError.NotPermitted);
+            }
+        }
+
+        /// <summary>
+        /// Rejects the connection request from other device now in progress.
+        /// </summary>
+        /// <param name="peerMacAddress">The MAC address of rejected device.</param>
+        /// <privilege>
+        /// http://tizen.org/privilege/wifidirect
+        /// </privilege>
+        /// <feature>
+        /// http://tizen.org/feature/network.wifidirect
+        /// </feature>
+        /// <remarks>
+        /// Wi-Fi Direct must be activated.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The object is in invalid state.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when application does not have privilege to access this method.</exception>
+        /// <since_tizen> 13 </since_tizen>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static void RejectConnection(string peerMacAddress)
+        {
+            if (Globals.IsActivated)
+            {
+                WiFiDirectManagerImpl.Instance.RejectConnection(peerMacAddress);
+            }
+
+            else
+            {
+                Log.Error(Globals.LogTag, "Wifi-direct is not activated");
+                WiFiDirectErrorFactory.ThrowWiFiDirectException((int)WiFiDirectError.NotPermitted);
+            }
+        }
     }
 }
index dc5bee0f0dbd686630ebb51790fcf9be167ad284..0211f6761bffd3c5429be50f4ab91140357c625d 100644 (file)
@@ -1150,6 +1150,82 @@ namespace Tizen.Network.WiFiDirect
             }
         }
 
+        internal void AddVsie(WiFiDirectVsieFrameType frameType, string vsie)
+        {
+            int ret = Interop.WiFiDirect.AddVsie(frameType, vsie);
+
+            if (ret != (int)WiFiDirectError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to add vsie, Error - " + (WiFiDirectError)ret);
+                WiFiDirectErrorFactory.ThrowWiFiDirectException(ret);
+            }
+        }
+
+        internal string GetVsie(WiFiDirectVsieFrameType frameType)
+        {
+            string vsie;
+            int ret = Interop.WiFiDirect.GetVsie(frameType, out vsie);
+
+            if (ret != (int)WiFiDirectError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to get vsie, Error - " + (WiFiDirectError)ret);
+                WiFiDirectErrorFactory.ThrowWiFiDirectException(ret);
+                vsie = null;
+            }
+
+            return vsie;
+        }
+
+        internal void RemoveVsie(WiFiDirectVsieFrameType frameType, string vsie)
+        {
+            int ret = Interop.WiFiDirect.RemoveVsie(frameType, vsie);
+
+            if (ret != (int)WiFiDirectError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to remove vsie, Error - " + (WiFiDirectError)ret);
+                WiFiDirectErrorFactory.ThrowWiFiDirectException(ret);
+            }
+        }
+
+        internal WiFiDirectPeer GetConnectingPeer()
+        {
+            IntPtr peer;
+            int ret = Interop.WiFiDirect.GetConnectingPeerInfo(out peer);
+
+            if (ret != (int)WiFiDirectError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to get connecting peer info, Error - " + (WiFiDirectError)ret);
+                WiFiDirectErrorFactory.ThrowWiFiDirectException(ret);
+                return null;
+            }
+
+            DiscoveredPeerStruct peerStruct = (DiscoveredPeerStruct)Marshal.PtrToStructure(peer, typeof(DiscoveredPeerStruct));
+
+            return WiFiDirectUtils.ConvertStructToDiscoveredPeer(peerStruct);
+        }
+
+        internal void AcceptConnection(string peerMacAddress)
+        {
+            int ret = Interop.WiFiDirect.AcceptConnection(peerMacAddress);
+
+            if (ret != (int)WiFiDirectError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to accept connection, Error - " + (WiFiDirectError)ret);
+                WiFiDirectErrorFactory.ThrowWiFiDirectException(ret);
+            }
+        }
+
+        internal void RejectConnection(string peerMacAddress)
+        {
+            int ret = Interop.WiFiDirect.RejectConnection(peerMacAddress);
+
+            if (ret != (int)WiFiDirectError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to reject connection, Error - " + (WiFiDirectError)ret);
+                WiFiDirectErrorFactory.ThrowWiFiDirectException(ret);
+            }
+        }
+
         internal static WiFiDirectManagerImpl Instance
         {
             get
index f3bf6f35cc375bbf024454c0d3a80eff055022c6..011434232fe5f264458a5d4bb8ccae85319a2501 100644 (file)
@@ -427,6 +427,36 @@ namespace Tizen.Network.WiFiDirect
                 }
             }
         }
+
+        /// <summary>
+        /// The vendor specific information element (VSIE) of a peer.
+        /// </summary>
+        /// <remarks>
+        /// Wi-Fi Direct must be activated.
+        /// If there is any error, null will be returned.
+        /// </remarks>
+        /// <since_tizen> 13 </since_tizen>
+        public string Vsie
+        {
+            get
+            {
+                if (Globals.IsActivated)
+                {
+                    string vsie;
+                    int ret = Interop.WiFiDirect.GetPeerVsie(_peerMacAddress, out vsie);
+
+                    if (ret != (int)WiFiDirectError.None)
+                    {
+                        Log.Error(Globals.LogTag, "Failed to get the peer VSIE, Error - " + (WiFiDirectError)ret);
+                        return null;
+                    }
+
+                    return vsie;
+                }
+                return null;
+            }
+        }
+
         /// <summary>
         /// The ConnectionStateChanged event is raised when the connection state of the peer device changes.
         /// </summary>