remove old list stuff

This commit is contained in:
Polynomialdivision 2018-07-26 00:15:08 +02:00
parent 711b5a6e96
commit 960e297e92
3 changed files with 0 additions and 272 deletions

View file

@ -250,7 +250,6 @@ int ap_get_collision_count(int col_domain);
// ---------------- Defines -------------------
#define SORT_NUM 5
#define TIME_THRESHOLD 120 // every minute
// ---------------- Global variables ----------------
char *sort_string;
@ -258,26 +257,5 @@ char *sort_string;
// ---------------- Functions -------------------
int better_ap_available(uint8_t bssid_addr[], uint8_t client_addr[], int automatic_kick);
/* List stuff */
typedef struct node {
probe_entry data;
struct node *ptr;
} node;
node *insert(node *head, probe_entry entry);
void free_list(node *head);
void print_list();
void insert_to_list(probe_entry entry, int inc_counter);
int mac_first_in_probe_list(uint8_t bssid_addr[], uint8_t client_addr[]);
void *remove_thread(void *arg);
pthread_mutex_t list_mutex;
node *probe_list_head;
#endif

View file

@ -27,7 +27,6 @@ void daemon_shutdown() {
// free ressources
fprintf(stdout, "Freeing mutex ressources\n");
pthread_mutex_destroy(&list_mutex);
pthread_mutex_destroy(&probe_array_mutex);
pthread_mutex_destroy(&client_array_mutex);
pthread_mutex_destroy(&ap_array_mutex);
@ -52,10 +51,6 @@ void signal_handler(int sig) {
}
int init_mutex() {
if (pthread_mutex_init(&list_mutex, NULL) != 0) {
fprintf(stderr, "Mutex init failed!\n");
return 1;
}
if (pthread_mutex_init(&probe_array_mutex, NULL) != 0) {
fprintf(stderr, "Mutex init failed!\n");

View file

@ -1132,54 +1132,6 @@ auth_entry denied_req_array_delete(auth_entry entry) {
return tmp;
}
node *delete_probe_req(node **ret_remove, node *head, uint8_t bssid_addr[],
uint8_t client_addr[]);
int mac_is_first_in_list(node *head, uint8_t bssid_addr[],
uint8_t client_addr[]);
node *remove_node(node *head, node *curr, node *prev);
node *remove_old_entries(node *head, time_t current_time,
long long int threshold);
void print_list_with_head(node *head);
void insert_to_list(probe_entry entry, int inc_counter) {
pthread_mutex_lock(&list_mutex);
entry.time = time(0);
entry.counter = 0;
// first delete probe request
// probe_list_head = remove_old_entries(probe_list_head, time(0),
// TIME_THRESHOLD);
node *tmp_probe_req = NULL;
probe_list_head = delete_probe_req(&tmp_probe_req, probe_list_head,
entry.bssid_addr, entry.client_addr);
if (tmp_probe_req) {
// local ubus
tmp_probe_req->data.signal = entry.signal;
tmp_probe_req->data.time = entry.time;
if (inc_counter) {
// when network don't increase counter...
tmp_probe_req->data.counter++;
}
// is this correct?
probe_list_head = insert(probe_list_head, tmp_probe_req->data);
free(tmp_probe_req);
} else {
printf("New entry!\n");
probe_list_head = insert(probe_list_head, entry);
}
pthread_mutex_unlock(&list_mutex);
}
int go_next_help(char sort_order[], int i, probe_entry entry,
probe_entry next_entry) {
switch (sort_order[i]) {
@ -1225,172 +1177,6 @@ int go_next(char sort_order[], int i, probe_entry entry,
return conditions && go_next_help(sort_order, i, entry, next_entry);
}
node *insert(node *head, probe_entry entry) {
node *temp, *prev, *next;
temp = (node *) malloc(sizeof(node));
temp->data = entry;
temp->ptr = NULL;
// length of sorting string
// char sort_string[] = "cfsb";
int i = 0;
if (!head) {
head = temp;
} else {
prev = NULL;
next = head;
while (next) {
if (go_next(sort_string, i, entry, next->data)) {
prev = next;
next = next->ptr;
} else if (i < strlen(sort_string)) {
i++;
} else {
break;
}
}
if (!next) {
prev->ptr = temp;
} else {
if (prev) {
temp->ptr = prev->ptr;
prev->ptr = temp;
} else {
temp->ptr = head;
head = temp;
}
}
}
return head;
}
node *delete_probe_req(node **ret_remove, node *head, uint8_t bssid_addr[],
uint8_t client_addr[]) {
if (!head) {
return head;
}
if (mac_is_equal(client_addr, head->data.client_addr) &&
mac_is_equal(bssid_addr, head->data.bssid_addr)) {
node *temp = head;
head = head->ptr;
*ret_remove = temp;
// don't free pointer
// free(temp);
return head;
}
node *prev = NULL;
node *next = head;
while (next) {
if (mac_is_greater(next->data.client_addr, client_addr)) {
break;
}
if (mac_is_equal(client_addr, next->data.client_addr) &&
mac_is_equal(bssid_addr, next->data.bssid_addr)) {
node *temp = next;
prev->ptr = next->ptr;
// free(temp);
*ret_remove = temp;
return head;
}
prev = next;
next = next->ptr;
}
return head;
}
void *remove_thread(void *arg) {
while (1) {
sleep(TIME_THRESHOLD);
pthread_mutex_lock(&list_mutex);
printf("[Thread] : Removing old entries!\n");
probe_list_head =
remove_old_entries(probe_list_head, time(0), TIME_THRESHOLD);
pthread_mutex_unlock(&list_mutex);
// print_list();
}
return 0;
}
node *remove_old_entries(node *head, time_t current_time,
long long int threshold) {
if (head) {
node *prev = NULL;
node *next = head;
while (next) {
if (next->data.time < current_time - threshold) {
head = remove_node(head, next, prev);
// print_list_with_head(head);
if (prev == NULL) // removed head
{
next = head;
} else {
next = prev->ptr;
}
} else {
prev = next;
next = next->ptr;
}
}
}
return head;
}
// return headpointer
node *remove_node(node *head, node *curr, node *prev) {
if (curr == head) {
node *temp = head;
head = head->ptr;
free(temp);
} else {
node *temp = curr;
prev->ptr = curr->ptr;
free(temp);
}
// printf("Removed old entry!\n");
return head;
}
int mac_is_first_in_list(node *head, uint8_t bssid_addr[],
uint8_t client_addr[]) {
if (!head) {
return 1;
}
node *next = head;
while (next) {
if (mac_is_greater(next->data.client_addr, client_addr)) {
break;
}
if (mac_is_equal(client_addr, next->data.client_addr)) {
print_probe_entry(next->data);
return mac_is_equal(bssid_addr, next->data.bssid_addr);
}
next = next->ptr;
}
return 0;
}
int mac_first_in_probe_list(uint8_t bssid_addr[], uint8_t client_addr[]) {
pthread_mutex_lock(&list_mutex);
int ret = mac_is_first_in_list(probe_list_head, bssid_addr, client_addr);
pthread_mutex_unlock(&list_mutex);
return ret;
}
void free_list(node *head) {
node *prev = head;
node *cur = head;
while (cur) {
prev = cur;
cur = prev->ptr;
free(prev);
}
}
int mac_is_equal(uint8_t addr1[], uint8_t addr2[]) {
return memcmp(addr1, addr2, ETH_ALEN * sizeof(uint8_t)) == 0;
}
@ -1409,37 +1195,6 @@ int mac_is_greater(uint8_t addr1[], uint8_t addr2[]) {
return 0;
}
void print_list_with_head(node *head) {
pthread_mutex_lock(&list_mutex);
printf("------------------\n");
if (head) {
node *next;
next = head;
while (next) {
print_probe_entry(next->data);
next = next->ptr;
}
}
printf("------------------\n");
pthread_mutex_unlock(&list_mutex);
}
void print_list() {
pthread_mutex_lock(&list_mutex);
printf("------------------\n");
node *head = probe_list_head;
if (head) {
node *next;
next = head;
while (next) {
print_probe_entry(next->data);
next = next->ptr;
}
}
printf("------------------\n");
pthread_mutex_unlock(&list_mutex);
}
void print_probe_entry(probe_entry entry) {
char mac_buf_ap[20];
char mac_buf_client[20];