wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_wpa_connect.cpp
branchRCL_3
changeset 42 a828660c511c
parent 40 5fb7af913dfd
child 43 d3d7683d16f5
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_wpa_connect.cpp	Thu Aug 19 11:40:48 2010 +0300
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_wpa_connect.cpp	Tue Aug 31 17:02:06 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 61.1.1 %
+* %version: 62 %
 */
 
 #include "core_sub_operation_wpa_connect.h"
@@ -102,6 +102,8 @@
                 true_t );
             server_m->get_connection_data()->set_eapol_auth_bssid(
                 ZERO_MAC_ADDR );
+            server_m->get_connection_data()->set_eapol_auth_failure(
+                core_error_ok );
 
             eapol_auth_type_m = core_tools_c::eap_authentication_type(
                 server_m->get_connection_data()->iap_data(),
@@ -642,9 +644,17 @@
             DEBUG6( "core_sub_operation_wpa_connect_c::next_state() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X",
                 current_bssid_m.addr[0], current_bssid_m.addr[1], current_bssid_m.addr[2],
                 current_bssid_m.addr[3], current_bssid_m.addr[4], current_bssid_m.addr[5] );
+            DEBUG( "core_sub_operation_wpa_connect_c::next_state() - marking is_eapol_disconnecting as true" );
+            server_m->get_connection_data()->set_eapol_disconnecting(
+                true );
 
             server_m->get_eapol_instance().disassociation( &network );
-
+            operation_state_m = core_state_user_cancel_disassociated;
+            
+            break;
+            }
+        case core_state_user_cancel_disassociated:
+            {
             /** The connection attempt failed, we are no longer connected. */
             is_connected_m = false_t;            
 
@@ -778,10 +788,28 @@
 // ---------------------------------------------------------------------------
 //
 core_error_e core_sub_operation_wpa_connect_c::disassociate(
-    network_id_c * /*receive_network_id*/,
+    network_id_c * receive_network_id,
     const bool_t /* self_disassociation */ )
     {
     DEBUG( "core_sub_operation_wpa_connect_c::disassociate()" );
+
+    const core_mac_address_s bssid(
+        receive_network_id->source() );
+    DEBUG6( "core_sub_operation_wpa_connect_c::disassociate() - function BSSID is %02X:%02X:%02X:%02X:%02X:%02X",
+        bssid.addr[0], bssid.addr[1], bssid.addr[2], 
+        bssid.addr[3], bssid.addr[4], bssid.addr[5] );
+    DEBUG6( "core_sub_operation_wpa_connect_c::disassociate() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X",
+        current_bssid_m.addr[0], current_bssid_m.addr[1], current_bssid_m.addr[2],
+        current_bssid_m.addr[3], current_bssid_m.addr[4], current_bssid_m.addr[5] );
+    if( operation_state_m == core_state_req_state_notification &&
+        bssid == current_bssid_m )
+        {
+        DEBUG( "core_sub_operation_wpa_connect_c::disassociate() - marking is_eapol_disconnecting as true" );
+        server_m->get_connection_data()->set_eapol_disconnecting(
+            true );
+
+        server_m->get_eapol_instance().disassociation( receive_network_id );
+        }
     
     return core_error_ok;
     }
@@ -940,6 +968,18 @@
     return core_error_ok;
     }
 
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_error_e core_sub_operation_wpa_connect_c::complete_disassociation(
+    network_id_c * /* receive_network_id */ )
+    {
+    DEBUG( "core_sub_operation_wpa_connect_c::complete_disassociation()" );
+
+    ASSERT( false_t );
+
+    return core_error_ok;
+    }
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
@@ -968,9 +1008,10 @@
 
             asynch_goto( core_state_init, CORE_TIMER_IMMEDIATELY );
             }
-        else if ( function == wlan_eapol_if_message_type_function_complete_association
+        else if ( ( function == wlan_eapol_if_message_type_function_complete_association
                || function == wlan_eapol_if_message_type_function_complete_reassociation
-               || function == wlan_eapol_if_message_type_function_complete_wpx_fast_roam_reassociation  )
+               || function == wlan_eapol_if_message_type_function_complete_wpx_fast_roam_reassociation  ) &&
+               eapol_auth_type_m == wlan_eapol_if_eapol_key_authentication_type_wpx_fast_roam )
             {
             DEBUG( "core_sub_operation_wpa_connect_c::handle_error() - (WPX fast-roam) (re-)association failed" );
             asynch_goto( core_state_req_association_failed, CORE_TIMER_IMMEDIATELY );
@@ -1019,23 +1060,14 @@
         DEBUG6( "core_sub_operation_wpa_connect_c::notify() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X",
             current_bssid_m.addr[0], current_bssid_m.addr[1], current_bssid_m.addr[2],
             current_bssid_m.addr[3], current_bssid_m.addr[4], current_bssid_m.addr[5] );
+        DEBUG( "core_sub_operation_wpa_connect_c::next_state() - marking is_eapol_disconnecting as true" );
+        server_m->get_connection_data()->set_eapol_disconnecting(
+            true );
+        server_m->get_connection_data()->set_eapol_auth_failure(
+            core_error_eapol_failure );
 
         server_m->get_eapol_instance().disassociation( &network );
 
-        if ( indication != core_am_indication_wlan_media_disconnect )
-            {
-            DEBUG( "core_sub_operation_wpa_connect_c::notify() - marking is_eapol_authenticating as false" );
-            server_m->get_connection_data()->set_eapol_authenticating(
-                false_t );
-            DEBUG( "core_sub_operation_wpa_connect_c::notify() - marking is_eapol_authentication_started as false" );
-            server_m->get_connection_data()->set_eapol_authentication_started(
-                false_t );
-
-            asynch_goto( core_state_bss_lost );
-
-            return true_t;
-            }
-
         /**
          * EAPOL indication will move the state machine forward.
          */