800 core_connect_status_e core_operation_roam_c::connect_status( |
800 core_connect_status_e core_operation_roam_c::connect_status( |
801 core_error_e request_status, |
801 core_error_e request_status, |
802 core_management_status_e management_status ) |
802 core_management_status_e management_status ) |
803 { |
803 { |
804 DEBUG( "core_operation_roam_c::connect_status()" ); |
804 DEBUG( "core_operation_roam_c::connect_status()" ); |
805 |
805 |
806 core_iap_data_c& iap_data( server_m->get_connection_data()->iap_data() ); |
806 core_iap_data_c& iap_data( server_m->get_connection_data()->iap_data() ); |
807 |
|
808 if ( management_status == core_management_status_assoc_denied_full_ap ) |
|
809 { |
|
810 DEBUG( "core_operation_roam_c::connect_status() - AP full" ); |
|
811 return core_connect_ap_full; |
|
812 } |
|
813 |
807 |
814 if ( request_status == core_error_eapol_auth_start_timeout ) |
808 if ( request_status == core_error_eapol_auth_start_timeout ) |
815 { |
809 { |
816 DEBUG( "core_operation_roam_c::connect_status() - EAPOL authentication timeout before authentication was started" ); |
810 DEBUG( "core_operation_roam_c::connect_status() - EAPOL authentication timeout before authentication was started" ); |
817 return core_connect_eapol_auth_start_timeout; |
811 return core_connect_eapol_auth_start_timeout; |
|
812 } |
|
813 |
|
814 if ( request_status == core_error_unsupported_config ) |
|
815 { |
|
816 DEBUG( "core_operation_roam_c::connect_status() - AP has an unsupported configuration" ); |
|
817 return core_connect_ap_unsupported_configuration; |
818 } |
818 } |
819 |
819 |
820 switch( iap_data.security_mode() ) |
820 switch( iap_data.security_mode() ) |
821 { |
821 { |
822 case core_security_mode_wep: |
822 case core_security_mode_wep: |
853 break; |
853 break; |
854 } |
854 } |
855 case core_security_mode_allow_unsecure: |
855 case core_security_mode_allow_unsecure: |
856 { |
856 { |
857 break; |
857 break; |
858 } |
858 } |
|
859 case core_security_mode_802dot1x_unencrypted: |
|
860 /** Falls through on purpose. */ |
859 case core_security_mode_802dot1x: |
861 case core_security_mode_802dot1x: |
860 { |
862 { |
861 if ( request_status == core_error_eapol_total_failure || |
863 if ( request_status == core_error_eapol_total_failure || |
862 request_status == core_error_eapol_failure ) |
864 request_status == core_error_eapol_failure ) |
863 { |
865 { |
921 |
923 |
922 default: |
924 default: |
923 { |
925 { |
924 ASSERT( false_t ); |
926 ASSERT( false_t ); |
925 } |
927 } |
|
928 } |
|
929 |
|
930 if ( management_status == core_management_status_assoc_denied_full_ap ) |
|
931 { |
|
932 DEBUG( "core_operation_roam_c::connect_status() - AP full" ); |
|
933 return core_connect_ap_full; |
|
934 } |
|
935 |
|
936 if ( management_status == core_management_status_unsupported_capabilities || |
|
937 management_status == core_management_status_assoc_unsup_basic_rates || |
|
938 management_status == core_management_status_assoc_unsup_ht_features ) |
|
939 { |
|
940 DEBUG( "core_operation_roam_c::connect_status() - AP has an unsupported configuration" ); |
|
941 return core_connect_ap_unsupported_configuration; |
926 } |
942 } |
927 |
943 |
928 return core_connect_undefined; |
944 return core_connect_undefined; |
929 } |
945 } |
930 |
946 |
949 DEBUG( "core_operation_roam_c::is_fatal_failure() - fatal, EAP failure" ); |
965 DEBUG( "core_operation_roam_c::is_fatal_failure() - fatal, EAP failure" ); |
950 return core_ap_blacklist_reason_eapol_failure; |
966 return core_ap_blacklist_reason_eapol_failure; |
951 } |
967 } |
952 |
968 |
953 /** |
969 /** |
|
970 * Unsupported configuration is always fatal. |
|
971 */ |
|
972 if( request_status == core_error_unsupported_config ) |
|
973 { |
|
974 DEBUG( "core_operation_roam_c::is_fatal_failure() - fatal, unsupported configuration" ); |
|
975 return core_ap_blacklist_reason_association_status; |
|
976 } |
|
977 |
|
978 /** |
954 * Don't consider a failed (re-)association attempt as fatal since it's |
979 * Don't consider a failed (re-)association attempt as fatal since it's |
955 * possible AP just doesn't have our authentication cached any more. |
980 * possible AP just doesn't have our authentication cached any more. |
956 */ |
981 */ |
957 if ( is_cached_sa_used ) |
982 if ( is_cached_sa_used ) |
958 { |
983 { |
995 eap_type ); |
1020 eap_type ); |
996 DEBUG1( "core_operation_roam_c::eap_connect_status() - eap_error %u", |
1021 DEBUG1( "core_operation_roam_c::eap_connect_status() - eap_error %u", |
997 eap_error ); |
1022 eap_error ); |
998 |
1023 |
999 core_connect_status_e status( core_connect_wpa_eap_failure ); |
1024 core_connect_status_e status( core_connect_wpa_eap_failure ); |
1000 if ( security_mode == core_security_mode_802dot1x ) |
1025 if ( security_mode == core_security_mode_802dot1x || |
|
1026 security_mode == core_security_mode_802dot1x_unencrypted ) |
1001 { |
1027 { |
1002 status = core_connect_802_1x_failure; |
1028 status = core_connect_802_1x_failure; |
1003 } |
1029 } |
1004 |
1030 |
1005 /** |
1031 /** |