From: shikha.ta Date: Wed, 25 Jan 2017 12:04:46 +0000 (+0530) Subject: Implemented fix for the connection callbacks crash tct issue X-Git-Tag: submit/trunk/20170823.075128~116^2~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=70989b0f45eaff40fa619d22272b42b42ef81302;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git Implemented fix for the connection callbacks crash tct issue Signed-off-by: shikha.ta Change-Id: I35d96ce41ee7a4e91455f6bbb8ccba3eb7d68ee6 --- diff --git a/src/Tizen.Network.Connection/Interop/Interop.Connection.cs b/src/Tizen.Network.Connection/Interop/Interop.Connection.cs old mode 100644 new mode 100755 index 04cde64..9ca98e5 --- a/src/Tizen.Network.Connection/Interop/Interop.Connection.cs +++ b/src/Tizen.Network.Connection/Interop/Interop.Connection.cs @@ -22,9 +22,13 @@ internal static partial class Interop { internal static partial class Connection { + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void ConnectionTypeChangedCallback(ConnectionType type, IntPtr userData); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void EthernetCableStateChangedCallback(EthernetCableState state, IntPtr userData); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void ConnectionAddressChangedCallback(IntPtr ipv4, IntPtr ipv6, IntPtr userData); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void ConnectionCallback(ConnectionError result, IntPtr userData); [DllImport(Libraries.Connection, EntryPoint = "connection_create")] diff --git a/src/Tizen.Network.Connection/Tizen.Network.Connection/ConnectionManager.cs b/src/Tizen.Network.Connection/Tizen.Network.Connection/ConnectionManager.cs old mode 100644 new mode 100755 index 21724ca..3ae6a56 --- a/src/Tizen.Network.Connection/Tizen.Network.Connection/ConnectionManager.cs +++ b/src/Tizen.Network.Connection/Tizen.Network.Connection/ConnectionManager.cs @@ -40,6 +40,10 @@ namespace Tizen.Network.Connection private EventHandler _EthernetCableStateChanged = null; private EventHandler _ProxyAddressChanged = null; + private Interop.Connection.ConnectionAddressChangedCallback _connectionAddressChangedCallback; + private Interop.Connection.ConnectionTypeChangedCallback _connectionTypeChangedCallback; + private Interop.Connection.ConnectionAddressChangedCallback _proxyAddressChangedCallback; + public ConnectionManager() { _internalManager = new ConnectionInternalManager(); @@ -97,7 +101,14 @@ namespace Tizen.Network.Connection private void ConnectionTypeChangedStart() { - int ret = Interop.Connection.SetTypeChangedCallback(_internalManager.GetHandle(), TypeChangedCallback, IntPtr.Zero); + _connectionTypeChangedCallback = (ConnectionType type, IntPtr user_data) => + { + if (_ConnectionTypeChanged != null) + { + _ConnectionTypeChanged(null, new ConnectionTypeEventArgs(type)); + } + }; + int ret = Interop.Connection.SetTypeChangedCallback(_internalManager.GetHandle(), _connectionTypeChangedCallback, IntPtr.Zero); if ((ConnectionError)ret != ConnectionError.None) { Log.Error(Globals.LogTag, "It failed to register connection type changed callback, " + (ConnectionError)ret); @@ -115,14 +126,6 @@ namespace Tizen.Network.Connection } } - private void TypeChangedCallback(ConnectionType type, IntPtr user_data) - { - if (_ConnectionTypeChanged != null) - { - _ConnectionTypeChanged(null, new ConnectionTypeEventArgs(type)); - } - } - /// /// Event for ethernet cable is plugged [in/out] event. /// @@ -199,8 +202,21 @@ namespace Tizen.Network.Connection private void IpAddressChangedStart() { + _connectionAddressChangedCallback = (IntPtr Ipv4, IntPtr Ipv6, IntPtr UserData) => + { + if (_IPAddressChanged != null) + { + string ipv4 = Marshal.PtrToStringAnsi(Ipv4); + string ipv6 = Marshal.PtrToStringAnsi(Ipv6); + + if ((string.IsNullOrEmpty(ipv4) == false) || (string.IsNullOrEmpty(ipv6) == false)) + { + _IPAddressChanged(null, new AddressEventArgs(ipv4, ipv6)); + } + } + }; Log.Debug(Globals.LogTag, "Handle: " + _internalManager.GetHandle()); - int ret = Interop.Connection.SetIpAddressChangedCallback(_internalManager.GetHandle(), IPAddressChangedCallback, IntPtr.Zero); + int ret = Interop.Connection.SetIpAddressChangedCallback(_internalManager.GetHandle(), _connectionAddressChangedCallback, IntPtr.Zero); if ((ConnectionError)ret != ConnectionError.None) { Log.Error(Globals.LogTag, "It failed to register callback for changing IP address, " + (ConnectionError)ret); @@ -216,20 +232,6 @@ namespace Tizen.Network.Connection } } - private void IPAddressChangedCallback(IntPtr Ipv4, IntPtr Ipv6, IntPtr UserData) - { - if (_IPAddressChanged != null) - { - string ipv4 = Marshal.PtrToStringAnsi(Ipv4); - string ipv6 = Marshal.PtrToStringAnsi(Ipv6); - - if ((string.IsNullOrEmpty(ipv4) == false) || (string.IsNullOrEmpty(ipv6) == false)) - { - _IPAddressChanged(null, new AddressEventArgs(ipv4, ipv6)); - } - } - } - /// /// Event that is called when the proxy address is changed. /// @@ -257,7 +259,20 @@ namespace Tizen.Network.Connection private void ProxyAddressChangedStart() { - int ret = Interop.Connection.SetProxyAddressChangedCallback(_internalManager.GetHandle(), IPAddressChangedCallback, IntPtr.Zero); + _proxyAddressChangedCallback = (IntPtr Ipv4, IntPtr Ipv6, IntPtr UserData) => + { + if (_ProxyAddressChanged != null) + { + string ipv4 = Marshal.PtrToStringAnsi(Ipv4); + string ipv6 = Marshal.PtrToStringAnsi(Ipv6); + + if ((string.IsNullOrEmpty(ipv4) == false) || (string.IsNullOrEmpty(ipv6) == false)) + { + _ProxyAddressChanged(null, new AddressEventArgs(ipv4, ipv6)); + } + } + }; + int ret = Interop.Connection.SetProxyAddressChangedCallback(_internalManager.GetHandle(), _proxyAddressChangedCallback, IntPtr.Zero); if ((ConnectionError)ret != ConnectionError.None) { Log.Error(Globals.LogTag, "It failed to register callback for changing proxy address, " + (ConnectionError)ret); @@ -273,19 +288,6 @@ namespace Tizen.Network.Connection } } - private void ProxyAddressChangedCallback(IntPtr Ipv4, IntPtr Ipv6, IntPtr UserData) - { - if (_ProxyAddressChanged != null) - { - string ipv4 = Marshal.PtrToStringAnsi(Ipv4); - string ipv6 = Marshal.PtrToStringAnsi(Ipv6); - Interop.Libc.Free(Ipv4); - Interop.Libc.Free(Ipv6); - - _ProxyAddressChanged(null, new AddressEventArgs(ipv4, ipv6)); - } - } - private void UnregisterEvents() { if (_ConnectionTypeChanged != null)