From 1d78ed495979b442bd95c3c922859a8057ab4a13 Mon Sep 17 00:00:00 2001 From: jeremy-jang <35089715+jeremy-jang@users.noreply.github.com> Date: Tue, 2 Aug 2022 16:57:20 +0900 Subject: [PATCH] [Applications.Cion] Fix bug of sending data (#4399) The data from unmanaged code should be marshalled. Signed-off-by: Sangyoon Jang Co-authored-by: pjh9216 --- src/Tizen.Applications.Cion/Interop/Interop.CionServer.cs | 2 +- src/Tizen.Applications.Cion/Tizen.Applications.Cion/ServerBase.cs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Tizen.Applications.Cion/Interop/Interop.CionServer.cs b/src/Tizen.Applications.Cion/Interop/Interop.CionServer.cs index c08d7d3..0345c7b 100644 --- a/src/Tizen.Applications.Cion/Interop/Interop.CionServer.cs +++ b/src/Tizen.Applications.Cion/Interop/Interop.CionServer.cs @@ -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); diff --git a/src/Tizen.Applications.Cion/Tizen.Applications.Cion/ServerBase.cs b/src/Tizen.Applications.Cion/Tizen.Applications.Cion/ServerBase.cs index f5ddd21..0d2c5a4 100644 --- a/src/Tizen.Applications.Cion/Tizen.Applications.Cion/ServerBase.cs +++ b/src/Tizen.Applications.Cion/Tizen.Applications.Cion/ServerBase.cs @@ -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); -- 2.7.4