[Applications.Cion] Fix bug of sending data (#4399)
authorjeremy-jang <35089715+jeremy-jang@users.noreply.github.com>
Tue, 2 Aug 2022 07:57:20 +0000 (16:57 +0900)
committerGitHub <noreply@github.com>
Tue, 2 Aug 2022 07:57:20 +0000 (16:57 +0900)
The data from unmanaged code should be marshalled.

Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
Co-authored-by: pjh9216 <jh9216.park@samsung.com>
src/Tizen.Applications.Cion/Interop/Interop.CionServer.cs
src/Tizen.Applications.Cion/Tizen.Applications.Cion/ServerBase.cs

index c08d7d3..0345c7b 100644 (file)
@@ -34,7 +34,7 @@ internal static partial class Interop
         internal delegate void CionServerConnectionResultCb(string serviceName, IntPtr peerInfo, IntPtr result, IntPtr userData);
 
         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate void CionServerDataReceivedCb(string serviceName, IntPtr peerInfo, byte[] data, int dataSize, out IntPtr returnData, out int returnDataSize, IntPtr userData);
+        internal delegate void CionServerDataReceivedCb(string serviceName, IntPtr peerInfo, IntPtr data, int dataSize, out IntPtr returnData, out int returnDataSize, IntPtr userData);
 
         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         internal delegate void CionServerPayloadReceivedCb(string serviceName, IntPtr peerInfo, IntPtr payload, int status, IntPtr userData);
index f5ddd21..0d2c5a4 100644 (file)
@@ -122,7 +122,7 @@ namespace Tizen.Applications.Cion
             }
 
             _dataReceivedCb = new Interop.CionServer.CionServerDataReceivedCb(
-                (string service, IntPtr peerInfo, byte[] data, int dataSize, out IntPtr returnData, out int returnDataSize, IntPtr userData) =>
+                (string service, IntPtr peerInfo, IntPtr data, int dataSize, out IntPtr returnData, out int returnDataSize, IntPtr userData) =>
                 {
                     Interop.Cion.ErrorCode clone_ret = Interop.CionPeerInfo.CionPeerInfoClone(peerInfo, out PeerInfoSafeHandle clone);
                     if (clone_ret != Interop.Cion.ErrorCode.None)
@@ -131,7 +131,9 @@ namespace Tizen.Applications.Cion
                         returnData = IntPtr.Zero;
                         returnDataSize = -1;
                     }
-                    byte[] returnDataRaw = OnDataReceived(data, new PeerInfo(clone));
+                    byte[] receivedData = new byte[dataSize];
+                    Marshal.Copy(data, receivedData, 0, dataSize);
+                    byte[] returnDataRaw = OnDataReceived(receivedData, new PeerInfo(clone));
                     returnDataSize = returnDataRaw.Length;
                     returnData = Interop.Cion.Malloc(returnDataSize);
                     Marshal.Copy(returnDataRaw, 0, returnData, returnDataSize);