From 85744e3fa3440d5ed0bb443327b2fb3e1b2320fc Mon Sep 17 00:00:00 2001 From: PolynomialDivision Date: Sun, 16 Jul 2017 15:46:26 +0200 Subject: [PATCH] Add insert into client array --- src/include/datastorage.h | 2 +- src/storage/datastorage.c | 61 +++++++++++++++++++++++++++++++++++---- src/utils/ubus.c | 2 -- 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/src/include/datastorage.h b/src/include/datastorage.h index e509e3d..605fb0c 100644 --- a/src/include/datastorage.h +++ b/src/include/datastorage.h @@ -54,7 +54,7 @@ typedef struct client_s { #define ARRAY_CLIENT_LEN 1000 -struct probe_entry_s client_array[ARRAY_CLIENT_LEN]; +struct client_s client_array[ARRAY_CLIENT_LEN]; pthread_mutex_t client_array_mutex; void client_array_insert(client entry); diff --git a/src/storage/datastorage.c b/src/storage/datastorage.c index ac67168..e4a6ed4 100644 --- a/src/storage/datastorage.c +++ b/src/storage/datastorage.c @@ -11,15 +11,64 @@ int mac_is_greater(uint8_t addr1[], uint8_t addr2[]); void print_probe_entry(probe_entry entry); void remove_old_probe_entries(time_t current_time, long long int threshold); +int client_array_go_next(char sort_order[], int i, client entry, + client next_entry); +int client_array_go_next_help(char sort_order[], int i, client entry, + client next_entry); + int probe_entry_last = -1; int client_entry_last = -1; +int client_array_go_next_help(char sort_order[], int i, client entry, + client next_entry) { + switch (sort_order[i]) { + // bssid-mac + case 'b': + return mac_is_greater(entry.bssid_addr, next_entry.bssid_addr) && + mac_is_equal(entry.client_addr, next_entry.client_addr); + break; + + // client-mac + case 'c': + return mac_is_greater(entry.client_addr, next_entry.client_addr); + break; + + // frequency + // mac is 5 ghz or 2.4 ghz? + // case 'f': + // return //entry.freq < next_entry.freq && + // entry.freq < 5000 && + // next_entry.freq >= 5000 && + // //entry.freq < 5 && + // mac_is_equal(entry.client_addr, next_entry.client_addr); + // break; + + // signal strength (RSSI) + //case 's': + // return entry.signal < next_entry.signal && + // mac_is_equal(entry.client_addr, next_entry.client_addr); + // break; + + default: + return 0; + break; + } +} + +int client_array_go_next(char sort_order[], int i, client entry, + client next_entry) { + int conditions = 1; + for (int j = 0; j < i; j++) { + i &= !(client_array_go_next(sort_order, j, entry, next_entry)); + } + return conditions && client_array_go_next_help(sort_order, i, entry, next_entry); +} + void client_array_insert(client entry) { - /* if(client_entry_last == -1) { - probe_array[0] = entry; + client_array[0] = entry; client_entry_last++; return; } @@ -27,7 +76,7 @@ void client_array_insert(client entry) int i; for(i = 0; i <= client_entry_last; i++) { - if(!go_next(sort_string, SORT_NUM, entry, probe_array[i])) + if(!client_array_go_next("bs", 2, entry, client_array[i])) { break; } @@ -36,15 +85,15 @@ void client_array_insert(client entry) { if(j + 1 <= ARRAY_LEN) { - probe_array[j + 1] = probe_array[j]; + client_array[j + 1] = client_array[j]; } } - probe_array[i] = entry; + client_array[i] = entry; if(client_entry_last < ARRAY_LEN) { client_entry_last++; - }*/ + } } client* client_array_delete(client entry) diff --git a/src/utils/ubus.c b/src/utils/ubus.c index 9c3fe60..469f1f8 100644 --- a/src/utils/ubus.c +++ b/src/utils/ubus.c @@ -246,12 +246,10 @@ dump_client(struct blob_attr **tb, uint8_t client_addr[], const char* bssid_addr sprintf(mac_buf_ap, "%x:%x:%x:%x:%x:%x", MAC2STR(client_entry.bssid_addr)); sprintf(mac_buf_client, "%x:%x:%x:%x:%x:%x", MAC2STR(client_entry.client_addr)); - printf("Testing client mac: %s\n", client_entry.client_addr); printf("Client Address: %s\n", mac_buf_client); printf("AP Address: %s\n", mac_buf_ap); - //hwaddr_aton(client_addr, client_entry.client_addr); if (tb[CLIENT_AUTH]) {