diff --git a/src/storage/datastorage.c b/src/storage/datastorage.c index e8b1fd0..cd358d3 100644 --- a/src/storage/datastorage.c +++ b/src/storage/datastorage.c @@ -62,7 +62,7 @@ int eval_probe_metric(struct probe_entry_s probe_entry) { int better_ap_available(uint8_t bssid_addr[], uint8_t client_addr[]) { - int own_score = 0; + int own_score = -1; // find first client entry in probe array int i; @@ -78,7 +78,8 @@ int better_ap_available(uint8_t bssid_addr[], uint8_t client_addr[]) if (!mac_is_equal(probe_array[j].client_addr, client_addr)) { // this shouldn't happen! //return 1; // kick client! - return 0; + //return 0; + break; } if (mac_is_equal(bssid_addr, probe_array[j].bssid_addr)) { own_score = eval_probe_metric(probe_array[j]); @@ -86,6 +87,12 @@ int better_ap_available(uint8_t bssid_addr[], uint8_t client_addr[]) } } + // no entry for own ap + if(own_score == -1) + { + return -1; + } + int k; for (k = i; k <= probe_entry_last; k++) { if (!mac_is_equal(probe_array[k].client_addr, client_addr)) { @@ -122,10 +129,13 @@ void kick_clients(uint8_t bssid[], uint32_t id) { if (!mac_is_equal(client_array[j].bssid_addr, bssid)) { break; } - if (kick_client(client_array[j])) { + if (kick_client(client_array[j]) > 0) { // TODO: Better debug output printf("KICKING CLIENT!!!!!!!!!!!!!\n"); del_client_interface(id, client_array[j].client_addr, 5, 1, 60000); + } else if (kick_client(client_array[j]) == -1) { + printf("Force client to reconnect!!!!!!!!!!!!!\n"); + del_client_interface(id, client_array[j].client_addr, 0, 0, 0); } else { printf("STAAAY CLIENT!!!!!!!!!!!!!\n"); }