[WiFi] Modified the framework code to use SafeHandle for CAPI handles.
authoradhavan.m <adhavan.m@samsung.com>
Fri, 24 Feb 2017 06:11:17 +0000 (11:41 +0530)
committeradhavan.m <adhavan.m@samsung.com>
Tue, 28 Feb 2017 07:06:56 +0000 (12:36 +0530)
Fix for JIRA issue TCAPI-2224

Change-Id: I9cdcbb2c0050e59617606fb4118b862232082e7f
Signed-off-by: adhavan.m <adhavan.m@samsung.com>
12 files changed:
packaging/csapi-network-wifi.spec
src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/ConnectionStateChangedEventArgs.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAddressInformation.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiConfiguration.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEap.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEapConfiguration.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiSecurity.cs

index bac3d8e..ef2ed19 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       csapi-network-wifi
 Summary:    Tizen Wi-Fi API for C#
-Version:    1.0.7
+Version:    1.0.8
 Release:    1
 Group:      Development/Libraries
 License:    Apache-2.0
index 6a94c07..9a2cdf8 100755 (executable)
@@ -37,70 +37,70 @@ internal static partial class Interop
 
         //capi-network-wifi-1.0.65-19.23.armv7l
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_initialize")]
-        internal static extern int Initialize(out IntPtr wifi);
+        internal static extern int Initialize(out SafeWiFiManagerHandle wifi);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_deinitialize")]
         internal static extern int Deinitialize(IntPtr wifi);
 
         ////Wi-Fi Manager
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_activate")]
-        internal static extern int Activate(IntPtr wifi, VoidCallback callback, IntPtr userData);
+        internal static extern int Activate(SafeWiFiManagerHandle wifi, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_activate_with_wifi_picker_tested")]
-        internal static extern int ActivateWithWiFiPickerTested(IntPtr wifi, VoidCallback callback, IntPtr userData);
+        internal static extern int ActivateWithWiFiPickerTested(SafeWiFiManagerHandle wifi, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_deactivate")]
-        internal static extern int Deactivate(IntPtr wifi, VoidCallback callback, IntPtr userData);
+        internal static extern int Deactivate(SafeWiFiManagerHandle wifi, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_is_activated")]
-        internal static extern int IsActive(IntPtr wifi, out bool activated);
+        internal static extern int IsActive(SafeWiFiManagerHandle wifi, out bool activated);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_get_mac_address")]
-        internal static extern int GetMacAddress(IntPtr wifi, out string macAddress);
+        internal static extern int GetMacAddress(SafeWiFiManagerHandle wifi, out string macAddress);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_get_network_interface_name")]
-        internal static extern int GetNetworkInterfaceName(IntPtr wifi, out string interfaceName);
+        internal static extern int GetNetworkInterfaceName(SafeWiFiManagerHandle wifi, out string interfaceName);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_scan")]
-        internal static extern int Scan(IntPtr wifi, VoidCallback callback, IntPtr userData);
+        internal static extern int Scan(SafeWiFiManagerHandle wifi, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_scan_specific_ap")]
-        internal static extern int ScanSpecificAP(IntPtr wifi, string essid, VoidCallback callback, IntPtr userData);
+        internal static extern int ScanSpecificAP(SafeWiFiManagerHandle wifi, string essid, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_get_connected_ap")]
-        internal static extern int GetConnectedAP(IntPtr wifi, out IntPtr ap);
+        internal static extern int GetConnectedAP(SafeWiFiManagerHandle wifi, out IntPtr ap);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_foreach_found_ap")]
-        internal static extern int GetForeachFoundAPs(IntPtr wifi, HandleCallback callback, IntPtr userData);
+        internal static extern int GetForeachFoundAPs(SafeWiFiManagerHandle wifi, HandleCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_foreach_found_specific_ap")]
-        internal static extern int GetForeachFoundSpecificAPs(IntPtr wifi, HandleCallback callback, IntPtr userData);
+        internal static extern int GetForeachFoundSpecificAPs(SafeWiFiManagerHandle wifi, HandleCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_connect")]
-        internal static extern int Connect(IntPtr wifi, IntPtr ap, VoidCallback callback, IntPtr userData);
+        internal static extern int Connect(SafeWiFiManagerHandle wifi, IntPtr ap, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_disconnect")]
-        internal static extern int Disconnect(IntPtr wifi, IntPtr ap, VoidCallback callback, IntPtr userData);
+        internal static extern int Disconnect(SafeWiFiManagerHandle wifi, IntPtr ap, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_connect_by_wps_pbc")]
-        internal static extern int ConnectByWpsPbc(IntPtr wifi, IntPtr ap, VoidCallback callback, IntPtr userData);
+        internal static extern int ConnectByWpsPbc(SafeWiFiManagerHandle wifi, IntPtr ap, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_connect_by_wps_pin")]
-        internal static extern int ConnectByWpsPin(IntPtr wifi, IntPtr ap, string pin, VoidCallback callback, IntPtr userData);
+        internal static extern int ConnectByWpsPin(SafeWiFiManagerHandle wifi, IntPtr ap, string pin, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_forget_ap")]
-        internal static extern int RemoveAP(IntPtr wifi, IntPtr ap);
+        internal static extern int RemoveAP(SafeWiFiManagerHandle wifi, IntPtr ap);
 
         //Wi-Fi Monitor
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_get_connection_state")]
-        internal static extern int GetConnectionState(IntPtr wifi, out int connectionState);
+        internal static extern int GetConnectionState(SafeWiFiManagerHandle wifi, out int connectionState);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_set_device_state_changed_cb")]
-        internal static extern int SetDeviceStateChangedCallback(IntPtr wifi, DeviceStateChangedCallback callback, IntPtr userData);
+        internal static extern int SetDeviceStateChangedCallback(SafeWiFiManagerHandle wifi, DeviceStateChangedCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_unset_device_state_changed_cb")]
-        internal static extern int UnsetDeviceStateChangedCallback(IntPtr wifi);
+        internal static extern int UnsetDeviceStateChangedCallback(SafeWiFiManagerHandle wifi);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_set_background_scan_cb")]
-        internal static extern int SetBackgroundScanCallback(IntPtr wifi, VoidCallback callback, IntPtr userData);
+        internal static extern int SetBackgroundScanCallback(SafeWiFiManagerHandle wifi, VoidCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_unset_background_scan_cb")]
-        internal static extern int UnsetBackgroundScanCallback(IntPtr wifi);
+        internal static extern int UnsetBackgroundScanCallback(SafeWiFiManagerHandle wifi);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_set_connection_state_changed_cb")]
-        internal static extern int SetConnectionStateChangedCallback(IntPtr wifi, ConnectionStateChangedCallback callback, IntPtr userData);
+        internal static extern int SetConnectionStateChangedCallback(SafeWiFiManagerHandle wifi, ConnectionStateChangedCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_unset_connection_state_changed_cb")]
-        internal static extern int UnsetConnectionStateChangedCallback(IntPtr wifi);
+        internal static extern int UnsetConnectionStateChangedCallback(SafeWiFiManagerHandle wifi);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_set_rssi_level_changed_cb")]
-        internal static extern int SetRssiLevelchangedCallback(IntPtr wifi, RssiLevelChangedCallback callback, IntPtr userData);
+        internal static extern int SetRssiLevelchangedCallback(SafeWiFiManagerHandle wifi, RssiLevelChangedCallback callback, IntPtr userData);
         [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_unset_rssi_level_changed_cb")]
-        internal static extern int UnsetRssiLevelchangedCallback(IntPtr wifi);
+        internal static extern int UnsetRssiLevelchangedCallback(SafeWiFiManagerHandle wifi);
 
         internal static class AP
         {
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_create")]
-            internal static extern int Create(IntPtr wifi, string essid, out IntPtr ap);
+            internal static extern int Create(SafeWiFiManagerHandle wifi, string essid, out IntPtr ap);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_hidden_create")]
-            internal static extern int CreateHiddenAP(IntPtr wifi, string essid, out IntPtr ap);
+            internal static extern int CreateHiddenAP(SafeWiFiManagerHandle wifi, string essid, out IntPtr ap);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_destroy")]
             internal static extern int Destroy(IntPtr ap);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_clone")]
@@ -110,105 +110,105 @@ internal static partial class Interop
 
             ////Network Information
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_essid")]
-            internal static extern int GetEssid(IntPtr ap, out IntPtr essid);
+            internal static extern int GetEssid(SafeWiFiAPHandle ap, out IntPtr essid);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_bssid")]
-            internal static extern int GetBssid(IntPtr ap, out IntPtr bssid);
+            internal static extern int GetBssid(SafeWiFiAPHandle ap, out IntPtr bssid);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_rssi")]
-            internal static extern int GetRssi(IntPtr ap, out int rssi);
+            internal static extern int GetRssi(SafeWiFiAPHandle ap, out int rssi);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_frequency")]
-            internal static extern int GetFrequency(IntPtr ap, out int frequency);
+            internal static extern int GetFrequency(SafeWiFiAPHandle ap, out int frequency);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_max_speed")]
-            internal static extern int GetMaxSpeed(IntPtr ap, out int maxSpeed);
+            internal static extern int GetMaxSpeed(SafeWiFiAPHandle ap, out int maxSpeed);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_is_favorite")]
-            internal static extern int IsFavorite(IntPtr ap, out bool isFavorite);
+            internal static extern int IsFavorite(SafeWiFiAPHandle ap, out bool isFavorite);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_is_passpoint")]
-            internal static extern int IsPasspoint(IntPtr ap, out bool isPasspoint);
+            internal static extern int IsPasspoint(SafeWiFiAPHandle ap, out bool isPasspoint);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_connection_state")]
-            internal static extern int GetConnectionState(IntPtr ap, out int connectionState);
+            internal static extern int GetConnectionState(SafeWiFiAPHandle ap, out int connectionState);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_ip_config_type")]
-            internal static extern int GetIPConfigType(IntPtr ap, int addressFamily, out int ipConfigType);
+            internal static extern int GetIPConfigType(SafeWiFiAPHandle ap, int addressFamily, out int ipConfigType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_ip_config_type")]
-            internal static extern int SetIPConfigType(IntPtr ap, int addressFamily, int ipConfigType);
+            internal static extern int SetIPConfigType(SafeWiFiAPHandle ap, int addressFamily, int ipConfigType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_ip_address")]
-            internal static extern int GetIPAddress(IntPtr ap, int addressFamily, out IntPtr ipAddress);
+            internal static extern int GetIPAddress(SafeWiFiAPHandle ap, int addressFamily, out IntPtr ipAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_ip_address")]
-            internal static extern int SetIPAddress(IntPtr ap, int addressFamily, string ipAddress);
+            internal static extern int SetIPAddress(SafeWiFiAPHandle ap, int addressFamily, string ipAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_subnet_mask")]
-            internal static extern int GetSubnetMask(IntPtr ap, int addressFamily, out IntPtr subnetMask);
+            internal static extern int GetSubnetMask(SafeWiFiAPHandle ap, int addressFamily, out IntPtr subnetMask);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_subnet_mask")]
-            internal static extern int SetSubnetMask(IntPtr ap, int addressFamily, string subnetMask);
+            internal static extern int SetSubnetMask(SafeWiFiAPHandle ap, int addressFamily, string subnetMask);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_gateway_address")]
-            internal static extern int GetGatewayAddress(IntPtr ap, int addressFamily, out IntPtr gatewayAddress);
+            internal static extern int GetGatewayAddress(SafeWiFiAPHandle ap, int addressFamily, out IntPtr gatewayAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_gateway_address")]
-            internal static extern int SetGatewayAddress(IntPtr ap, int addressFamily, string gatewayAddress);
+            internal static extern int SetGatewayAddress(SafeWiFiAPHandle ap, int addressFamily, string gatewayAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_proxy_address")]
-            internal static extern int GetProxyAddress(IntPtr ap, int addressFamily, out IntPtr proxyAddress);
+            internal static extern int GetProxyAddress(SafeWiFiAPHandle ap, int addressFamily, out IntPtr proxyAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_proxy_address")]
-            internal static extern int SetProxyAddress(IntPtr ap, int addressFamily, string proxyAddress);
+            internal static extern int SetProxyAddress(SafeWiFiAPHandle ap, int addressFamily, string proxyAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_proxy_type")]
-            internal static extern int GetProxyType(IntPtr ap, out int proxyType);
+            internal static extern int GetProxyType(SafeWiFiAPHandle ap, out int proxyType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_proxy_type")]
-            internal static extern int SetProxyType(IntPtr ap, int proxyType);
+            internal static extern int SetProxyType(SafeWiFiAPHandle ap, int proxyType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_dns_address")]
-            internal static extern int GetDnsAddress(IntPtr ap, int order, int addressFamily, out IntPtr dnsAddress);
+            internal static extern int GetDnsAddress(SafeWiFiAPHandle ap, int order, int addressFamily, out IntPtr dnsAddress);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_dns_address")]
-            internal static extern int SetDnsAddress(IntPtr ap, int order, int addressFamily, string dnsAddress);
+            internal static extern int SetDnsAddress(SafeWiFiAPHandle ap, int order, int addressFamily, string dnsAddress);
 
             ////Security Information
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_security_type")]
-            internal static extern int GetSecurityType(IntPtr ap, out int securityType);
+            internal static extern int GetSecurityType(SafeWiFiAPHandle ap, out int securityType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_security_type")]
-            internal static extern int SetSecurityType(IntPtr ap, int securityType);
+            internal static extern int SetSecurityType(SafeWiFiAPHandle ap, int securityType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_encryption_type")]
-            internal static extern int GetEncryptionType(IntPtr ap, out int encryptionType);
+            internal static extern int GetEncryptionType(SafeWiFiAPHandle ap, out int encryptionType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_encryption_type")]
-            internal static extern int SetEncryptionType(IntPtr ap, int encryptionType);
+            internal static extern int SetEncryptionType(SafeWiFiAPHandle ap, int encryptionType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_is_passphrase_required")]
-            internal static extern int IsPassphraseRequired(IntPtr ap, out bool required);
+            internal static extern int IsPassphraseRequired(SafeWiFiAPHandle ap, out bool required);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_passphrase")]
-            internal static extern int SetPassphrase(IntPtr ap, string passphrase);
+            internal static extern int SetPassphrase(SafeWiFiAPHandle ap, string passphrase);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_is_wps_supported")]
-            internal static extern int IsWpsSupported(IntPtr ap, out bool supported);
+            internal static extern int IsWpsSupported(SafeWiFiAPHandle ap, out bool supported);
 
             ////EAP
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_eap_passphrase")]
-            internal static extern int SetEapPassphrase(IntPtr ap, string userName, string password);
+            internal static extern int SetEapPassphrase(SafeWiFiAPHandle ap, string userName, string password);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_eap_passphrase")]
-            internal static extern int GetEapPassphrase(IntPtr ap, out IntPtr userName, out bool isPasswordSet);
+            internal static extern int GetEapPassphrase(SafeWiFiAPHandle ap, out IntPtr userName, out bool isPasswordSet);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_eap_ca_cert_file")]
-            internal static extern int GetEapCaCertFile(IntPtr ap, out IntPtr file);
+            internal static extern int GetEapCaCertFile(SafeWiFiAPHandle ap, out IntPtr file);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_eap_ca_cert_file")]
-            internal static extern int SetEapCaCertFile(IntPtr ap, string file);
+            internal static extern int SetEapCaCertFile(SafeWiFiAPHandle ap, string file);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_eap_client_cert_file")]
-            internal static extern int GetEapClientCertFile(IntPtr ap, out IntPtr file);
+            internal static extern int GetEapClientCertFile(SafeWiFiAPHandle ap, out IntPtr file);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_eap_client_cert_file")]
-            internal static extern int SetEapClientCertFile(IntPtr ap, string file);
+            internal static extern int SetEapClientCertFile(SafeWiFiAPHandle ap, string file);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_eap_private_key_file")]
-            internal static extern int GetEapPrivateKeyFile(IntPtr ap, out IntPtr file);
+            internal static extern int GetEapPrivateKeyFile(SafeWiFiAPHandle ap, out IntPtr file);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_eap_private_key_info")]
-            internal static extern int SetEapPrivateKeyFile(IntPtr ap, string file, string password);
+            internal static extern int SetEapPrivateKeyFile(SafeWiFiAPHandle ap, string file, string password);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_eap_type")]
-            internal static extern int GetEapType(IntPtr ap, out int eapType);
+            internal static extern int GetEapType(SafeWiFiAPHandle ap, out int eapType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_eap_type")]
-            internal static extern int SetEapType(IntPtr ap, int eapType);
+            internal static extern int SetEapType(SafeWiFiAPHandle ap, int eapType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_get_eap_auth_type")]
-            internal static extern int GetEapAuthType(IntPtr ap, out int file);
+            internal static extern int GetEapAuthType(SafeWiFiAPHandle ap, out int file);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_ap_set_eap_auth_type")]
-            internal static extern int SetEapAuthType(IntPtr ap, int file);
+            internal static extern int SetEapAuthType(SafeWiFiAPHandle ap, int file);
         }
 
         internal static class Config
         {
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_create")]
-            internal static extern int Create(IntPtr wifi, string name, string passPhrase, int securityType, out IntPtr config);
+            internal static extern int Create(SafeWiFiManagerHandle wifi, string name, string passPhrase, int securityType, out IntPtr config);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_clone")]
             internal static extern int Clone(IntPtr origin, out IntPtr cloned);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_destroy")]
             internal static extern int Destroy(IntPtr config);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_save")]
-            internal static extern int SaveConfiguration(IntPtr wifi, IntPtr config);
+            internal static extern int SaveConfiguration(SafeWiFiManagerHandle wifi, IntPtr config);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_foreach_configuration")]
-            internal static extern int GetForeachConfiguration(IntPtr wifi, HandleCallback callback, IntPtr userData);
+            internal static extern int GetForeachConfiguration(SafeWiFiManagerHandle wifi, HandleCallback callback, IntPtr userData);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_name")]
             internal static extern int GetName(IntPtr config, out IntPtr name);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_security_type")]
@@ -222,33 +222,107 @@ internal static partial class Interop
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_hidden_ap_property")]
             internal static extern int GetHiddenAPProperty(IntPtr config, out bool isHidden);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_anonymous_identity")]
-            internal static extern int GetEapAnonymousIdentity(IntPtr config, out IntPtr anonymousIdentify);
+            internal static extern int GetEapAnonymousIdentity(SafeWiFiConfigHandle config, out IntPtr anonymousIdentify);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_anonymous_identity")]
-            internal static extern int SetEapAnonymousIdentity(IntPtr config, string anonymousIdentify);
+            internal static extern int SetEapAnonymousIdentity(SafeWiFiConfigHandle config, string anonymousIdentify);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_ca_cert_file")]
-            internal static extern int GetEapCaCertFile(IntPtr config, out IntPtr caCert);
+            internal static extern int GetEapCaCertFile(SafeWiFiConfigHandle config, out IntPtr caCert);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_ca_cert_file")]
-            internal static extern int SetEapCaCertFile(IntPtr config, string caCert);
+            internal static extern int SetEapCaCertFile(SafeWiFiConfigHandle config, string caCert);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_client_cert_file")]
-            internal static extern int GetEapClientCertFile(IntPtr config, out IntPtr clientCert);
+            internal static extern int GetEapClientCertFile(SafeWiFiConfigHandle config, out IntPtr clientCert);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_client_cert_file")]
-            internal static extern int SetEapClientCertFile(IntPtr config, string privateKey, string clientCert);
+            internal static extern int SetEapClientCertFile(SafeWiFiConfigHandle config, string privateKey, string clientCert);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_identity")]
-            internal static extern int GetEapIdentity(IntPtr config, out IntPtr identify);
+            internal static extern int GetEapIdentity(SafeWiFiConfigHandle config, out IntPtr identify);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_identity")]
-            internal static extern int SetEapIdentity(IntPtr config, string identify);
+            internal static extern int SetEapIdentity(SafeWiFiConfigHandle config, string identify);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_type")]
-            internal static extern int GetEapType(IntPtr config, out int eapType);
+            internal static extern int GetEapType(SafeWiFiConfigHandle config, out int eapType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_type")]
-            internal static extern int SetEapType(IntPtr config, int eapType);
+            internal static extern int SetEapType(SafeWiFiConfigHandle config, int eapType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_auth_type")]
-            internal static extern int GetEapAuthType(IntPtr config, out int eapAuthType);
+            internal static extern int GetEapAuthType(SafeWiFiConfigHandle config, out int eapAuthType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_auth_type")]
-            internal static extern int SetEapAuthType(IntPtr config, int eapAuthType);
+            internal static extern int SetEapAuthType(SafeWiFiConfigHandle config, int eapAuthType);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_get_eap_subject_match")]
-            internal static extern int GetEapSubjectMatch(IntPtr config, out IntPtr subjectMatch);
+            internal static extern int GetEapSubjectMatch(SafeWiFiConfigHandle config, out IntPtr subjectMatch);
             [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_config_set_eap_subject_match")]
-            internal static extern int SetEapSubjectMatch(IntPtr config, string subjectMatch);
+            internal static extern int SetEapSubjectMatch(SafeWiFiConfigHandle config, string subjectMatch);
+        }
+
+        internal sealed class SafeWiFiManagerHandle : SafeHandle
+        {
+            public SafeWiFiManagerHandle() : base(IntPtr.Zero, true)
+            {
+            }
+
+            public override bool IsInvalid
+            {
+                get
+                {
+                    return this.handle == IntPtr.Zero;
+                }
+            }
+
+            protected override bool ReleaseHandle()
+            {
+                WiFi.Deinitialize(this.handle);
+                this.SetHandle(IntPtr.Zero);
+                return true;
+            }
+        }
+
+        internal sealed class SafeWiFiAPHandle : SafeHandle
+        {
+            public SafeWiFiAPHandle() : base(IntPtr.Zero, true)
+            {
+            }
+
+            public SafeWiFiAPHandle(IntPtr handle) : base(handle, true)
+            {
+            }
+
+            public override bool IsInvalid
+            {
+                get
+                {
+                    return this.handle == IntPtr.Zero;
+                }
+            }
+
+            protected override bool ReleaseHandle()
+            {
+                WiFi.AP.Destroy(this.handle);
+                this.SetHandle(IntPtr.Zero);
+                return true;
+            }
+        }
+
+        internal sealed class SafeWiFiConfigHandle : SafeHandle
+        {
+            public SafeWiFiConfigHandle() : base(IntPtr.Zero, true)
+            {
+            }
+
+            public SafeWiFiConfigHandle(IntPtr handle) : base(handle, true)
+            {
+            }
+
+            public override bool IsInvalid
+            {
+                get
+                {
+                    return this.handle == IntPtr.Zero;
+                }
+            }
+
+            protected override bool ReleaseHandle()
+            {
+                WiFi.Config.Destroy(this.handle);
+                this.SetHandle(IntPtr.Zero);
+                return true;
+            }
         }
     }
 }
index fee5ca8..37c2a4d 100755 (executable)
@@ -26,10 +26,10 @@ namespace Tizen.Network.WiFi
         private WiFiConnectionState _state = WiFiConnectionState.Disconnected;
         private WiFiAP _ap;
 
-        internal ConnectionStateChangedEventArgs(WiFiConnectionState s, IntPtr _apHandle)
+        internal ConnectionStateChangedEventArgs(WiFiConnectionState s, IntPtr apHandle)
         {
             _state = s;
-            _ap = new WiFiAP(_apHandle);
+            _ap = new WiFiAP(apHandle);
         }
 
         /// <summary>
index e18b7d4..ab275af 100755 (executable)
@@ -30,7 +30,7 @@ namespace Tizen.Network.WiFi
         private int _requestId = 0;
         private WiFiNetwork _network;
         private WiFiSecurity _security;
-        private bool disposed = false;
+        private bool _disposed = false;
 
         /// <summary>
         /// The network information of the access point(AP).
@@ -99,17 +99,15 @@ namespace Tizen.Network.WiFi
 
         private void Dispose(bool disposing)
         {
-            if (disposed)
+            if (_disposed)
                 return;
 
             if (disposing)
             {
-                _network.Dispose();
-                _security.Dispose();
                 Interop.WiFi.AP.Destroy(_apHandle);
                 _apHandle = IntPtr.Zero;
             }
-            disposed = true;
+            _disposed = true;
         }
 
         private void createHandle(string id, bool hidden)
@@ -117,11 +115,12 @@ namespace Tizen.Network.WiFi
             int ret = -1;
             if (hidden)
             {
-                ret = Interop.WiFi.AP.CreateHiddenAP(WiFiManagerImpl.Instance.GetHandle(), id, out _apHandle);
+                ret = Interop.WiFi.AP.CreateHiddenAP(WiFiManagerImpl.Instance.GetSafeHandle(), id, out _apHandle);
             }
+
             else
             {
-                ret = Interop.WiFi.AP.Create(WiFiManagerImpl.Instance.GetHandle(), id, out _apHandle);
+                ret = Interop.WiFi.AP.Create(WiFiManagerImpl.Instance.GetSafeHandle(), id, out _apHandle);
             }
 
             if (ret != (int)WiFiError.None)
@@ -133,8 +132,9 @@ namespace Tizen.Network.WiFi
 
         private void Initialize()
         {
-            _network = new WiFiNetwork(_apHandle);
-            _security = new WiFiSecurity(_apHandle);
+            Interop.WiFi.SafeWiFiAPHandle apHandle = new Interop.WiFi.SafeWiFiAPHandle(_apHandle);
+            _network = new WiFiNetwork(apHandle);
+            _security = new WiFiSecurity(apHandle);
         }
 
         /// <summary>
@@ -150,11 +150,6 @@ namespace Tizen.Network.WiFi
             }
         }
 
-        internal IntPtr GetHandle()
-        {
-            return _apHandle;
-        }
-
         /// <summary>
         /// Connects the access point asynchronously.
         /// </summary>
@@ -181,7 +176,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.Connect(WiFiManagerImpl.Instance.GetHandle(), _apHandle, _callback_map[id], id);
+            int ret = Interop.WiFi.Connect(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle, _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret);
@@ -216,7 +211,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.ConnectByWpsPbc(WiFiManagerImpl.Instance.GetHandle(), _apHandle, _callback_map[id], id);
+            int ret = Interop.WiFi.ConnectByWpsPbc(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle, _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret);
@@ -252,7 +247,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.ConnectByWpsPin(WiFiManagerImpl.Instance.GetHandle(), _apHandle, pin, _callback_map[id], id);
+            int ret = Interop.WiFi.ConnectByWpsPin(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle, pin, _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret);
@@ -287,7 +282,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.Disconnect(WiFiManagerImpl.Instance.GetHandle(), _apHandle, _callback_map[id], id);
+            int ret = Interop.WiFi.Disconnect(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle, _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to disconnect wifi, Error - " + (WiFiError)ret);
@@ -302,7 +297,7 @@ namespace Tizen.Network.WiFi
         /// </summary>
         public void RemoveAP()
         {
-            int ret = Interop.WiFi.RemoveAP(WiFiManagerImpl.Instance.GetHandle(), _apHandle);
+            int ret = Interop.WiFi.RemoveAP(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to remove with AP, Error - " + (WiFiError)ret);
index 5c1e388..c2d2588 100755 (executable)
@@ -22,39 +22,15 @@ namespace Tizen.Network.WiFi
 {
     internal class WiFiAddressInformation : IAddressInformation
     {
-        private IntPtr _handle;
+        private Interop.WiFi.SafeWiFiAPHandle _handle;
         private AddressFamily _family;
-        private bool _disposed = false;
 
-        internal WiFiAddressInformation(IntPtr handle, AddressFamily family)
+        internal WiFiAddressInformation(Interop.WiFi.SafeWiFiAPHandle handle, AddressFamily family)
         {
             _handle = handle;
             _family = family;
         }
 
-        ~WiFiAddressInformation()
-        {
-            Dispose(false);
-        }
-
-        protected void Dispose(bool disposing)
-        {
-            if (_disposed)
-                return;
-
-            if (disposing)
-            {
-                // Free managed objects.
-            }
-            _handle = IntPtr.Zero;
-            _disposed = true;
-        }
-
-        public void Dispose()
-        {
-            Dispose(true);
-        }
-
         public System.Net.IPAddress Dns1
         {
             get
index e2d67d0..1f25515 100755 (executable)
@@ -28,7 +28,7 @@ namespace Tizen.Network.WiFi
     public class WiFiConfiguration : IDisposable
     {
         private IntPtr _configHandle = IntPtr.Zero;
-        private bool disposed = false;
+        private bool _disposed = false;
         private WiFiEapConfiguration _eapConfig;
 
         /// <summary>
@@ -132,7 +132,8 @@ namespace Tizen.Network.WiFi
         internal WiFiConfiguration(IntPtr handle)
         {
             _configHandle = handle;
-            _eapConfig = new WiFiEapConfiguration(_configHandle);
+            Interop.WiFi.SafeWiFiConfigHandle configHandle = new Interop.WiFi.SafeWiFiConfigHandle(handle);
+            _eapConfig = new WiFiEapConfiguration(configHandle);
         }
 
         /// <summary>
@@ -143,12 +144,13 @@ namespace Tizen.Network.WiFi
         /// <param name="type">Security type of the WiFi.</param>
         public WiFiConfiguration(string name, string passPhrase, WiFiSecurityType type)
         {
-            int ret = Interop.WiFi.Config.Create(WiFiManagerImpl.Instance.GetHandle(), name, passPhrase, (int)type, out _configHandle);
+            int ret = Interop.WiFi.Config.Create(WiFiManagerImpl.Instance.GetSafeHandle(), name, passPhrase, (int)type, out _configHandle);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to create config handle, Error - " + (WiFiError)ret);
             }
-            _eapConfig = new WiFiEapConfiguration(_configHandle);
+            Interop.WiFi.SafeWiFiConfigHandle configHandle = new Interop.WiFi.SafeWiFiConfigHandle(_configHandle);
+            _eapConfig = new WiFiEapConfiguration(configHandle);
         }
 
         ~WiFiConfiguration()
@@ -167,16 +169,15 @@ namespace Tizen.Network.WiFi
 
         private void Dispose(bool disposing)
         {
-            if (disposed)
+            if (_disposed)
                 return;
 
             if (disposing)
             {
-                _eapConfig.Dispose();
                 Interop.WiFi.Config.Destroy(_configHandle);
                 _configHandle = IntPtr.Zero;
             }
-            disposed = true;
+            _disposed = true;
         }
 
         internal IntPtr GetHandle()
index 325e5f9..dcc174c 100755 (executable)
@@ -26,10 +26,9 @@ namespace Tizen.Network.WiFi
     /// <summary>
     /// A class for managing the EAP information of access point(AP).
     /// </summary>
-    public class WiFiEap : IWiFiEap, IDisposable
+    public class WiFiEap : IWiFiEap
     {
-        private IntPtr _apHandle = IntPtr.Zero;
-        private bool disposed = false;
+        private Interop.WiFi.SafeWiFiAPHandle _apHandle;
 
         /// <summary>
         /// The file path of CA Certificate of EAP.
@@ -113,38 +112,11 @@ namespace Tizen.Network.WiFi
             }
         }
 
-        internal WiFiEap(IntPtr apHandle)
+        internal WiFiEap(Interop.WiFi.SafeWiFiAPHandle apHandle)
         {
             _apHandle = apHandle;
         }
 
-        ~WiFiEap()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// A method to destroy the managed objects in WiFiEap.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                // Free managed objects.
-            }
-            _apHandle = IntPtr.Zero;
-            disposed = true;
-        }
-
         /// <summary>
         /// Gets the private key file of EAP.
         /// </summary>
@@ -156,7 +128,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get private key file, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
             return Marshal.PtrToStringAnsi(strPtr);
         }
@@ -172,7 +144,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set private key file, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
         }
 
@@ -187,7 +159,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get client cert file, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
             return Marshal.PtrToStringAnsi(strPtr);
         }
@@ -202,7 +174,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set client cert file, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
         }
 
@@ -218,7 +190,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get user name in eap passphrase, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
             return Marshal.PtrToStringAnsi(strptr);
         }
@@ -235,7 +207,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get IsPasswordSet in passphrase, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
             return passwordSet;
         }
@@ -250,7 +222,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set username, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
         }
 
@@ -264,7 +236,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set password, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
         }
     } //WiFiEapInformation
index 2235453..5d301d8 100755 (executable)
@@ -22,10 +22,9 @@ namespace Tizen.Network.WiFi
     /// <summary>
     /// A class for managing the EAP configuration.
     /// </summary>
-    public class WiFiEapConfiguration : IWiFiEap, IDisposable
+    public class WiFiEapConfiguration : IWiFiEap
     {
-        private IntPtr _configHandle = IntPtr.Zero;
-        private bool disposed = false;
+        private Interop.WiFi.SafeWiFiConfigHandle _configHandle;
 
         /// <summary>
         /// The file path of CA Certificate of EAP.
@@ -39,7 +38,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get caCertFile Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
                 return Marshal.PtrToStringAnsi(strPtr);
             }
@@ -49,7 +48,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set caCertFile, Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
             }
         }
@@ -66,7 +65,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to eap type Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
                 return (WiFiEapType)type;
             }
@@ -76,7 +75,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set eap type, Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
             }
         }
@@ -93,7 +92,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get auth type Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
                 return (WiFiAuthenticationType)type;
             }
@@ -103,7 +102,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set eap auth type, Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
             }
         }
@@ -120,7 +119,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get anonymous identify Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                     return "";
                 }
                 return Marshal.PtrToStringAnsi(strPtr);
@@ -131,7 +130,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set anonymous identify, Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
             }
         }
@@ -148,7 +147,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get identify Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                     return "";
                 }
                 return Marshal.PtrToStringAnsi(strPtr);
@@ -159,7 +158,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set identify, Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
             }
         }
@@ -176,7 +175,7 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get subject match Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                     return "";
                 }
                 return Marshal.PtrToStringAnsi(strPtr);
@@ -187,43 +186,16 @@ namespace Tizen.Network.WiFi
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to set subject match, Error - " + (WiFiError)ret);
-                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                    WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
                 }
             }
         }
 
-        internal WiFiEapConfiguration(IntPtr handle)
+        internal WiFiEapConfiguration(Interop.WiFi.SafeWiFiConfigHandle handle)
         {
             _configHandle = handle;
         }
 
-        ~WiFiEapConfiguration()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// A method to destroy the managed objects in WiFiEapConfiguration.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                // Free managed objects.
-            }
-            _configHandle = IntPtr.Zero;
-            disposed = true;
-        }
-
         /// <summary>
         /// Gets access point client cert file from configuration.
         /// </summary>
@@ -235,7 +207,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get client cert file, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
             }
             return Marshal.PtrToStringAnsi(strPtr);
         }
@@ -251,7 +223,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set client cert file, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _configHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _configHandle.DangerousGetHandle());
             }
         }
     } //WiFiEapConfiguration
index 7cc4baa..5ced4a4 100755 (executable)
@@ -18,6 +18,7 @@ using System;
 using System.Collections.Generic;
 using System.Threading;
 using System.Threading.Tasks;
+using System.Runtime.InteropServices;
 
 namespace Tizen.Network.WiFi
 {
@@ -26,10 +27,9 @@ namespace Tizen.Network.WiFi
         internal const string LogTag = "Tizen.Network.WiFi";
     }
 
-    internal class HandleHolder : IDisposable
+    internal class HandleHolder
     {
-        private IntPtr _handle = IntPtr.Zero;
-        private bool disposed = false;
+        private Interop.WiFi.SafeWiFiManagerHandle _handle;
 
         internal HandleHolder()
         {
@@ -38,45 +38,19 @@ namespace Tizen.Network.WiFi
             Log.Debug(Globals.LogTag, "Handle: " + _handle);
         }
 
-        ~HandleHolder()
+        internal Interop.WiFi.SafeWiFiManagerHandle GetSafeHandle()
         {
-            Dispose(false);
-        }
-
-        internal IntPtr GetHandle()
-        {
-            Log.Debug(Globals.LogTag, "Handleholder handle = " + _handle);
+            Log.Debug(Globals.LogTag, "Handleholder safehandle = " + _handle);
             return _handle;
         }
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            Log.Debug(Globals.LogTag, ">>> HandleHolder Dispose with " + disposing);
-            Log.Debug(Globals.LogTag, ">>> Handle: " + _handle);
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                // Free managed objects.
-                WiFiManagerImpl.Instance.Deinitialize(_handle);
-            }
-            disposed = true;
-        }
     }
 
-    internal partial class WiFiManagerImpl : IDisposable
+    internal partial class WiFiManagerImpl
     {
         private static WiFiManagerImpl _instance = null;
         private Dictionary<IntPtr, Interop.WiFi.VoidCallback> _callback_map = new Dictionary<IntPtr, Interop.WiFi.VoidCallback>();
         private int _requestId = 0;
         private string _macAddress;
-        private bool disposed = false;
 
         internal string MacAddress
         {
@@ -85,7 +59,7 @@ namespace Tizen.Network.WiFi
                 if (String.IsNullOrEmpty(_macAddress))
                 {
                     string address;
-                    int ret = Interop.WiFi.GetMacAddress(GetHandle(), out address);
+                    int ret = Interop.WiFi.GetMacAddress(GetSafeHandle(), out address);
                     if (ret != (int)WiFiError.None)
                     {
                         Log.Error(Globals.LogTag, "Failed to get mac address, Error - " + (WiFiError)ret);
@@ -105,7 +79,7 @@ namespace Tizen.Network.WiFi
             get
             {
                 string name;
-                int ret = Interop.WiFi.GetNetworkInterfaceName(GetHandle(), out name);
+                int ret = Interop.WiFi.GetNetworkInterfaceName(GetSafeHandle(), out name);
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get interface name, Error - " + (WiFiError)ret);
@@ -120,7 +94,7 @@ namespace Tizen.Network.WiFi
             get
             {
                 int state;
-                int ret = Interop.WiFi.GetConnectionState(GetHandle(), out state);
+                int ret = Interop.WiFi.GetConnectionState(GetSafeHandle(), out state);
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get connection state, Error - " + (WiFiError)ret);
@@ -135,7 +109,7 @@ namespace Tizen.Network.WiFi
             get
             {
                 bool active;
-                int ret = Interop.WiFi.IsActive(GetHandle(), out active);
+                int ret = Interop.WiFi.IsActive(GetSafeHandle(), out active);
                 if (ret != (int)WiFiError.None)
                 {
                     Log.Error(Globals.LogTag, "Failed to get isActive, Error - " + (WiFiError)ret);
@@ -169,40 +143,15 @@ namespace Tizen.Network.WiFi
         {
         }
 
-        ~WiFiManagerImpl()
-        {
-            Dispose(false);
-        }
-
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                // Free managed objects.
-            }
-            //Free unmanaged objects
-            RemoveAllRegisteredEvent();
-            disposed = true;
-        }
-
-        internal IntPtr GetHandle()
+        internal Interop.WiFi.SafeWiFiManagerHandle GetSafeHandle()
         {
             Log.Debug(Globals.LogTag, "GetHandle, Thread Id = " + Thread.CurrentThread.ManagedThreadId);
-            return s_threadName.Value.GetHandle();
+            return s_threadName.Value.GetSafeHandle();
         }
 
-        internal IntPtr Initialize()
+        internal Interop.WiFi.SafeWiFiManagerHandle Initialize()
         {
-            IntPtr handle;
+            Interop.WiFi.SafeWiFiManagerHandle handle = new Interop.WiFi.SafeWiFiManagerHandle();
             int ret = Interop.WiFi.Initialize(out handle);
             if (ret != (int)WiFiError.None)
             {
@@ -212,16 +161,6 @@ namespace Tizen.Network.WiFi
             return handle;
         }
 
-        internal void Deinitialize(IntPtr handle)
-        {
-            int ret = Interop.WiFi.Deinitialize(handle);
-            if (ret != (int)WiFiError.None)
-            {
-                Log.Error(Globals.LogTag, "Failed to deinitialize wifi, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret);
-            }
-        }
-
         internal IEnumerable<WiFiAP> GetFoundAPs()
         {
             List<WiFiAP> apList = new List<WiFiAP>();
@@ -238,7 +177,7 @@ namespace Tizen.Network.WiFi
                 return false;
             };
 
-            int ret = Interop.WiFi.GetForeachFoundAPs(GetHandle(), callback, IntPtr.Zero);
+            int ret = Interop.WiFi.GetForeachFoundAPs(GetSafeHandle(), callback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get all APs, Error - " + (WiFiError)ret);
@@ -265,7 +204,7 @@ namespace Tizen.Network.WiFi
 
             };
 
-            int ret = Interop.WiFi.GetForeachFoundSpecificAPs(GetHandle(), callback, IntPtr.Zero);
+            int ret = Interop.WiFi.GetForeachFoundSpecificAPs(GetSafeHandle(), callback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get specific APs, Error - " + (WiFiError)ret);
@@ -291,7 +230,7 @@ namespace Tizen.Network.WiFi
                 return false;
             };
 
-            int ret = Interop.WiFi.Config.GetForeachConfiguration(GetHandle(), callback, IntPtr.Zero);
+            int ret = Interop.WiFi.Config.GetForeachConfiguration(GetSafeHandle(), callback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to get configurations, Error - " + (WiFiError)ret);
@@ -304,7 +243,7 @@ namespace Tizen.Network.WiFi
         internal void SaveWiFiNetworkConfiguration(WiFiConfiguration config)
         {
             IntPtr configHandle = config.GetHandle();
-            int ret = Interop.WiFi.Config.SaveConfiguration(GetHandle(), configHandle);
+            int ret = Interop.WiFi.Config.SaveConfiguration(GetSafeHandle(), configHandle);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to save configuration, Error - " + (WiFiError)ret);
@@ -316,7 +255,7 @@ namespace Tizen.Network.WiFi
         {
             IntPtr apHandle;
 
-            int ret = Interop.WiFi.GetConnectedAP(GetHandle(), out apHandle);
+            int ret = Interop.WiFi.GetConnectedAP(GetSafeHandle(), out apHandle);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to connect with AP, Error - " + (WiFiError)ret);
@@ -348,7 +287,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.Activate(GetHandle(), _callback_map[id], id);
+            int ret = Interop.WiFi.Activate(GetSafeHandle(), _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to activate wifi, Error - " + (WiFiError)ret);
@@ -379,7 +318,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.ActivateWithWiFiPickerTested(GetHandle(), _callback_map[id], id);
+            int ret = Interop.WiFi.ActivateWithWiFiPickerTested(GetSafeHandle(), _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to activate wifi, Error - " + (WiFiError)ret);
@@ -410,7 +349,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.Deactivate(GetHandle(), _callback_map[id], id);
+            int ret = Interop.WiFi.Deactivate(GetSafeHandle(), _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to deactivate wifi, Error - " + (WiFiError)ret);
@@ -441,7 +380,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.Scan(GetHandle(), _callback_map[id], id);
+            int ret = Interop.WiFi.Scan(GetSafeHandle(), _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to scan all AP, Error - " + (WiFiError)ret);
@@ -472,7 +411,7 @@ namespace Tizen.Network.WiFi
                     }
                 };
             }
-            int ret = Interop.WiFi.ScanSpecificAP(GetHandle(), essid, _callback_map[id], id);
+            int ret = Interop.WiFi.ScanSpecificAP(GetSafeHandle(), essid, _callback_map[id], id);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to scan with specific AP, Error - " + (WiFiError)ret);
index d98ed81..49319bc 100755 (executable)
@@ -25,12 +25,11 @@ namespace Tizen.Network.WiFi
     /// <summary>
     /// A class for managing the Wi-Fi network information.
     /// </summary>
-    public class WiFiNetwork : IDisposable
+    public class WiFiNetwork
     {
-        private IntPtr _apHandle = IntPtr.Zero;
+        private Interop.WiFi.SafeWiFiAPHandle _apHandle;
         private IAddressInformation _ipv4;
         private IAddressInformation _ipv6;
-        private bool disposed = false;
         private string _essid;
 
         /// <summary>
@@ -252,7 +251,7 @@ namespace Tizen.Network.WiFi
             }
         }
 
-        internal WiFiNetwork(IntPtr apHandle)
+        internal WiFiNetwork(Interop.WiFi.SafeWiFiAPHandle apHandle)
         {
             _apHandle = apHandle;
             _ipv4 = new WiFiAddressInformation(apHandle, AddressFamily.IPv4);
@@ -266,34 +265,5 @@ namespace Tizen.Network.WiFi
             }
             _essid = Marshal.PtrToStringAnsi(strPtr);
         }
-
-        ~WiFiNetwork()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// A method to destroy managed WiFiNetwork objects.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                _ipv4.Dispose();
-                _ipv6.Dispose();
-            }
-            _apHandle = IntPtr.Zero;
-            disposed = true;
-        }
-
     } //WiFiNetworkInformation
 }
index 2a5693c..ac1eabf 100755 (executable)
@@ -132,30 +132,6 @@ namespace Tizen.Network.WiFi
             }
         }
 
-        internal void RemoveAllRegisteredEvent()
-        {
-            //unregister all remaining events when this object is released.
-            if (_deviceStateChanged != null)
-            {
-                UnregisterDeviceStateChangedEvent();
-            }
-
-            if (_connectionStateChanged != null)
-            {
-                UnregisterConnectionStateChangedEvent();
-            }
-
-            if (_rssiLevelChanged != null)
-            {
-                UnregisterRssiLevelChangedEvent();
-            }
-
-            if (_backgroundScanFinished != null)
-            {
-                UnregisterBackgroundScanFinishedEvent();
-            }
-        }
-
         private void RegisterDeviceStateChangedEvent()
         {
             _deviceChangedCallback = (int deviceState, IntPtr userDate) =>
@@ -164,7 +140,7 @@ namespace Tizen.Network.WiFi
                 DeviceStateChangedEventArgs e = new DeviceStateChangedEventArgs(state);
                 _deviceStateChanged.SafeInvoke(null, e);
             };
-            int ret = Interop.WiFi.SetDeviceStateChangedCallback(GetHandle(), _deviceChangedCallback, IntPtr.Zero);
+            int ret = Interop.WiFi.SetDeviceStateChangedCallback(GetSafeHandle(), _deviceChangedCallback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set device state changed callback, Error - " + (WiFiError)ret);
@@ -173,7 +149,7 @@ namespace Tizen.Network.WiFi
 
         private void UnregisterDeviceStateChangedEvent()
         {
-            int ret = Interop.WiFi.UnsetDeviceStateChangedCallback(GetHandle());
+            int ret = Interop.WiFi.UnsetDeviceStateChangedCallback(GetSafeHandle());
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to unset device state changed callback, Error - " + (WiFiError)ret);
@@ -182,13 +158,16 @@ namespace Tizen.Network.WiFi
 
         private void RegisterConnectionStateChangedEvent()
         {
-            _connectionChangedCallback = (int connectionState, IntPtr ap, IntPtr userDate) =>
+            _connectionChangedCallback = (int connectionState, IntPtr ap, IntPtr userData) =>
             {
-                WiFiConnectionState state = (WiFiConnectionState)connectionState;
-                ConnectionStateChangedEventArgs e = new ConnectionStateChangedEventArgs(state, ap);
-                _connectionStateChanged.SafeInvoke(null, e);
+                if (ap != IntPtr.Zero)
+                {
+                    WiFiConnectionState state = (WiFiConnectionState)connectionState;
+                    ConnectionStateChangedEventArgs e = new ConnectionStateChangedEventArgs(state, ap);
+                    _connectionStateChanged.SafeInvoke(null, e);
+                }
             };
-            int ret = Interop.WiFi.SetConnectionStateChangedCallback(GetHandle(), _connectionChangedCallback, IntPtr.Zero);
+            int ret = Interop.WiFi.SetConnectionStateChangedCallback(GetSafeHandle(), _connectionChangedCallback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set copnnection state changed callback, Error - " + (WiFiError)ret);
@@ -197,7 +176,7 @@ namespace Tizen.Network.WiFi
 
         private void UnregisterConnectionStateChangedEvent()
         {
-            int ret = Interop.WiFi.UnsetConnectionStateChangedCallback(GetHandle());
+            int ret = Interop.WiFi.UnsetConnectionStateChangedCallback(GetSafeHandle());
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to unset device state changed callback, Error - " + (WiFiError)ret);
@@ -213,7 +192,7 @@ namespace Tizen.Network.WiFi
                 RssiLevelChangedEventArgs e = new RssiLevelChangedEventArgs(level);
                 _rssiLevelChanged.SafeInvoke(null, e);
             };
-            int ret = Interop.WiFi.SetRssiLevelchangedCallback(GetHandle(), _rssiChangedCallback, IntPtr.Zero);
+            int ret = Interop.WiFi.SetRssiLevelchangedCallback(GetSafeHandle(), _rssiChangedCallback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set rssi level changed callback, Error - " + (WiFiError)ret);
@@ -222,7 +201,7 @@ namespace Tizen.Network.WiFi
 
         private void UnregisterRssiLevelChangedEvent()
         {
-            int ret = Interop.WiFi.UnsetRssiLevelchangedCallback(GetHandle());
+            int ret = Interop.WiFi.UnsetRssiLevelchangedCallback(GetSafeHandle());
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to unset rssi level changed callback, Error - " + (WiFiError)ret);
@@ -236,7 +215,7 @@ namespace Tizen.Network.WiFi
                 EventArgs e = new EventArgs();
                 _backgroundScanFinished.SafeInvoke(null, e);
             };
-            int ret = Interop.WiFi.SetBackgroundScanCallback(GetHandle(), _backgroundScanFinishedCallback, IntPtr.Zero);
+            int ret = Interop.WiFi.SetBackgroundScanCallback(GetSafeHandle(), _backgroundScanFinishedCallback, IntPtr.Zero);
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set background scan callback, Error - " + (WiFiError)ret);
@@ -245,7 +224,7 @@ namespace Tizen.Network.WiFi
 
         private void UnregisterBackgroundScanFinishedEvent()
         {
-            int ret = Interop.WiFi.UnsetBackgroundScanCallback(GetHandle());
+            int ret = Interop.WiFi.UnsetBackgroundScanCallback(GetSafeHandle());
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to unset background scan callback, Error - " + (WiFiError)ret);
index cdd395e..47646dd 100755 (executable)
@@ -22,11 +22,10 @@ namespace Tizen.Network.WiFi
     /// <summary>
     /// A class for managing the WiFi security information.
     /// </summary>
-    public class WiFiSecurity : IDisposable
+    public class WiFiSecurity
     {
-        private IntPtr _apHandle = IntPtr.Zero;
+        private Interop.WiFi.SafeWiFiAPHandle _apHandle;
         private WiFiEap _eap;
-        private bool disposed = false;
 
         /// <summary>
         /// The type of Wi-Fi security.
@@ -129,39 +128,12 @@ namespace Tizen.Network.WiFi
             }
         }
 
-        internal WiFiSecurity(IntPtr apHandle)
+        internal WiFiSecurity(Interop.WiFi.SafeWiFiAPHandle apHandle)
         {
             _apHandle = apHandle;
             _eap = new WiFiEap(apHandle);
         }
 
-        ~WiFiSecurity()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// A method to destroy managed WiFiSecurity objects.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (disposed)
-                return;
-
-            if (disposing)
-            {
-                _eap.Dispose();
-            }
-            _apHandle = IntPtr.Zero;
-            disposed = true;
-        }
-
         /// <summary>
         /// Sets the passphrase.
         /// </summary>
@@ -171,7 +143,7 @@ namespace Tizen.Network.WiFi
             if (ret != (int)WiFiError.None)
             {
                 Log.Error(Globals.LogTag, "Failed to set passphrase, Error - " + (WiFiError)ret);
-                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle);
+                WiFiErrorFactory.ThrowWiFiException(ret, _apHandle.DangerousGetHandle());
             }
         }
     } //WiFiSecurityInformation