Fix datastorage

This commit is contained in:
PolynomialDivision 2017-06-04 23:18:15 +02:00
parent 48b6ce6917
commit 86a760e445

View file

@ -2,10 +2,12 @@
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
int go_next_help(char sort_order[], int i, probe_entry entry, probe_entry next_entry);
int go_next(char sort_order[], int i, probe_entry entry, probe_entry next_entry);
int mac_is_equal(uint8_t addr1[], uint8_t addr2[]); int mac_is_equal(uint8_t addr1[], uint8_t addr2[]);
int mac_is_greater(uint8_t addr1[], uint8_t addr2[]); int mac_is_greater(uint8_t addr1[], uint8_t addr2[]);
void print_probe_entry(probe_entry entry); void print_probe_entry(probe_entry entry);
int delete_probe_req(node* head, uint8_t bssid_addr[], uint8_t client_addr[]); node* delete_probe_req(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[]); int mac_is_first_in_list(node* head, uint8_t bssid_addr[], uint8_t client_addr[]);
void insert_to_list(probe_entry entry) void insert_to_list(probe_entry entry)
@ -13,102 +15,87 @@ void insert_to_list(probe_entry entry)
pthread_mutex_lock(&list_mutex); pthread_mutex_lock(&list_mutex);
// first delete probe request // first delete probe request
delete_probe_req(probe_list_head, entry.bssid_addr, entry.client_addr); probe_list_head = delete_probe_req(probe_list_head, entry.bssid_addr, entry.client_addr);
probe_list_head = insert(probe_list_head, entry); probe_list_head = insert(probe_list_head, entry);
pthread_mutex_unlock(&list_mutex); 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])
{
// 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
case 'f':
return entry.freq < next_entry.freq && 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 go_next(char sort_order[], int i, probe_entry entry, probe_entry next_entry)
{
int conditions = 1;
for(int j = 0; j < i; j++)
{
printf("go_next %i", j);
i &= !(go_next(sort_order, j, entry, next_entry));
}
return conditions && go_next_help(sort_order, i, entry, next_entry);
}
node* insert(node* head, probe_entry entry) { node* insert(node* head, probe_entry entry) {
node *temp, *prev, *next; node *temp, *prev, *next;
temp = (node*)malloc(sizeof(node)); temp = (node*)malloc(sizeof(node));
temp->data = entry; temp->data = entry;
temp->ptr = NULL; temp->ptr = NULL;
// length of sorting string
char sort_string[] = "cfsb";
int i = 0;
if(!head) if(!head)
{ {
head = temp; head = temp;
} }
else else
{ {
// TODO: make sorting as startup parameter
prev = NULL; prev = NULL;
next = head; next = head;
while(next while(next)
&& (
mac_is_greater(entry.client_addr, next->data.client_addr)
|| (
mac_is_equal(entry.client_addr, next->data.client_addr)
//&& !mac_is_equal(entry.bssid_addr, next->data.bssid_addr)
&& entry.signal < next->data.signal
)
|| (
mac_is_equal(entry.client_addr, next->data.client_addr)
//&& !mac_is_equal(entry.bssid_addr, next->data.bssid_addr)
&& entry.signal == next->data.signal
&& entry.freq < next->data.freq
)
|| (
mac_is_equal(entry.client_addr, next->data.client_addr)
//&& !mac_is_equal(entry.bssid_addr, next->data.bssid_addr)
&& entry.signal == next->data.signal
&& entry.freq == next->data.freq
&& mac_is_greater(entry.bssid_addr, next->data.bssid_addr)
)
)
)
{ {
/* if(go_next(sort_string, i, entry, next->data))
if(mac_is_smaller(entry.client_addr, next->data.client_addr) {
prev = next;
next = next->ptr;
} else if(i < strlen(sort_string)) {
i++;
} else
{ {
break; break;
} }
else if(mac_is_equal(entry.client_addr, next->data.client_addr)
{
if(entry.freq >= next->data.freq)
{
if(mac_is_smaller(entry.bssid_addr, next->data.bssid_addr))
{
break;
}
else if(mac_is_equal(entry.bssid_addr, next->data.bssid_addr))
{
if()
}
}
}*/
/*
if(mac_is_greater(entry.client_addr, next->data.client_addr))
{
if(entry.freq > next->data.freq)
{
if(entry.signal >= next->data.signal)
{
if(mac_is_greater(entry.bssid_addr, next->data.bssid_addr))
{
break;
}
}
}
}
*/
prev = next;
next = next->ptr;
} }
if(next && mac_is_equal(entry.client_addr,next->data.client_addr) if(!next){
&& mac_is_equal(entry.bssid_addr, next->data.bssid_addr)
)//&& entry.freq == next->data.freq)
{
next->data.signal = entry.signal;
}
else if(!next){
prev->ptr = temp; prev->ptr = temp;
} }
else else
@ -126,12 +113,12 @@ node* insert(node* head, probe_entry entry) {
} }
int delete_probe_req(node* head, uint8_t bssid_addr[], uint8_t client_addr[]) node* delete_probe_req(node* head, uint8_t bssid_addr[], uint8_t client_addr[])
{ {
if(!head) if(!head)
{ {
return 1; return head;
} }
if(mac_is_equal(client_addr, head->data.client_addr) if(mac_is_equal(client_addr, head->data.client_addr)
@ -140,7 +127,7 @@ int delete_probe_req(node* head, uint8_t bssid_addr[], uint8_t client_addr[])
node *temp = head; node *temp = head;
head = head->ptr; head = head->ptr;
free(temp); free(temp);
return 1; return head;
} }
node *prev = NULL; node *prev = NULL;
@ -158,12 +145,12 @@ int delete_probe_req(node* head, uint8_t bssid_addr[], uint8_t client_addr[])
node *temp = next; node *temp = next;
prev->ptr = next->ptr; prev->ptr = next->ptr;
free(temp); free(temp);
return 1; return head;
} }
prev = next; prev = next;
next = next->ptr; next = next->ptr;
} }
return 0; return head;
} }
int mac_is_first_in_list(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[])