From 8adf8317a3f9c5e97aeece729cd8bc6e35302f68 Mon Sep 17 00:00:00 2001 From: "adhavan.m" Date: Fri, 24 Feb 2017 11:41:17 +0530 Subject: [PATCH] [WiFi] Modified the framework code to use SafeHandle for CAPI handles. Fix for JIRA issue TCAPI-2224 Change-Id: I9cdcbb2c0050e59617606fb4118b862232082e7f Signed-off-by: adhavan.m --- Tizen.Network.WiFi/Interop/Interop.WiFi.cs | 246 ++++++++++++++------- .../ConnectionStateChangedEventArgs.cs | 4 +- Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs | 33 ++- .../Tizen.Network.WiFi/WiFiAddressInformation.cs | 28 +-- .../Tizen.Network.WiFi/WiFiConfiguration.cs | 15 +- Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEap.cs | 50 +---- .../Tizen.Network.WiFi/WiFiEapConfiguration.cs | 62 ++---- .../Tizen.Network.WiFi/WiFiManagerImpl.cs | 109 ++------- .../Tizen.Network.WiFi/WiFiNetwork.cs | 36 +-- .../Tizen.Network.WiFi/WiFiNetworkChange.cs | 51 ++--- .../Tizen.Network.WiFi/WiFiSecurity.cs | 36 +-- packaging/csapi-network-wifi.spec | 2 +- 12 files changed, 261 insertions(+), 411 deletions(-) diff --git a/Tizen.Network.WiFi/Interop/Interop.WiFi.cs b/Tizen.Network.WiFi/Interop/Interop.WiFi.cs index 6a94c07..9a2cdf8 100755 --- a/Tizen.Network.WiFi/Interop/Interop.WiFi.cs +++ b/Tizen.Network.WiFi/Interop/Interop.WiFi.cs @@ -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; + } } } } diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/ConnectionStateChangedEventArgs.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/ConnectionStateChangedEventArgs.cs index fee5ca8..37c2a4d 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/ConnectionStateChangedEventArgs.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/ConnectionStateChangedEventArgs.cs @@ -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); } /// diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs index e18b7d4..ab275af 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs @@ -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; /// /// 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); } /// @@ -150,11 +150,6 @@ namespace Tizen.Network.WiFi } } - internal IntPtr GetHandle() - { - return _apHandle; - } - /// /// Connects the access point asynchronously. /// @@ -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 /// 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); diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAddressInformation.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAddressInformation.cs index 5c1e388..c2d2588 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAddressInformation.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAddressInformation.cs @@ -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 diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiConfiguration.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiConfiguration.cs index e2d67d0..1f25515 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiConfiguration.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiConfiguration.cs @@ -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; /// @@ -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); } /// @@ -143,12 +144,13 @@ namespace Tizen.Network.WiFi /// Security type of the WiFi. 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() diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEap.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEap.cs index 325e5f9..dcc174c 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEap.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEap.cs @@ -26,10 +26,9 @@ namespace Tizen.Network.WiFi /// /// A class for managing the EAP information of access point(AP). /// - public class WiFiEap : IWiFiEap, IDisposable + public class WiFiEap : IWiFiEap { - private IntPtr _apHandle = IntPtr.Zero; - private bool disposed = false; + private Interop.WiFi.SafeWiFiAPHandle _apHandle; /// /// 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); - } - - /// - /// A method to destroy the managed objects in WiFiEap. - /// - 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; - } - /// /// Gets the private key file of EAP. /// @@ -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 diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEapConfiguration.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEapConfiguration.cs index 2235453..5d301d8 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEapConfiguration.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEapConfiguration.cs @@ -22,10 +22,9 @@ namespace Tizen.Network.WiFi /// /// A class for managing the EAP configuration. /// - public class WiFiEapConfiguration : IWiFiEap, IDisposable + public class WiFiEapConfiguration : IWiFiEap { - private IntPtr _configHandle = IntPtr.Zero; - private bool disposed = false; + private Interop.WiFi.SafeWiFiConfigHandle _configHandle; /// /// 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); - } - - /// - /// A method to destroy the managed objects in WiFiEapConfiguration. - /// - 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; - } - /// /// Gets access point client cert file from configuration. /// @@ -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 diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs index 7cc4baa..5ced4a4 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs @@ -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 _callback_map = new Dictionary(); 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 GetFoundAPs() { List apList = new List(); @@ -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); diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs index d98ed81..49319bc 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs @@ -25,12 +25,11 @@ namespace Tizen.Network.WiFi /// /// A class for managing the Wi-Fi network information. /// - 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; /// @@ -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); - } - - /// - /// A method to destroy managed WiFiNetwork objects. - /// - 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 } diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs index 2a5693c..ac1eabf 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs @@ -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); diff --git a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiSecurity.cs b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiSecurity.cs index cdd395e..47646dd 100755 --- a/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiSecurity.cs +++ b/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiSecurity.cs @@ -22,11 +22,10 @@ namespace Tizen.Network.WiFi /// /// A class for managing the WiFi security information. /// - public class WiFiSecurity : IDisposable + public class WiFiSecurity { - private IntPtr _apHandle = IntPtr.Zero; + private Interop.WiFi.SafeWiFiAPHandle _apHandle; private WiFiEap _eap; - private bool disposed = false; /// /// 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); - } - - /// - /// A method to destroy managed WiFiSecurity objects. - /// - 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; - } - /// /// Sets the passphrase. /// @@ -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 diff --git a/packaging/csapi-network-wifi.spec b/packaging/csapi-network-wifi.spec index bac3d8e..ef2ed19 100755 --- a/packaging/csapi-network-wifi.spec +++ b/packaging/csapi-network-wifi.spec @@ -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 -- 2.7.4