diff -r 5fb7af913dfd -r a828660c511c wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_wpa_connect.cpp --- 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. */