[Applications.Cion] Fix bug of sending data (#3716)
authorjeremy-jang <35089715+jeremy-jang@users.noreply.github.com>
Wed, 10 Nov 2021 05:53:18 +0000 (14:53 +0900)
committerGitHub <noreply@github.com>
Wed, 10 Nov 2021 05:53:18 +0000 (14:53 +0900)
The data from unmanaged code should be marshalled.

Signed-off-by: Sangyoon Jang <jeremy.jang@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);