mirror of
https://github.com/berlin-open-wireless-lab/DAWN.git
synced 2025-03-09 15:40:12 +00:00
Add connections update
This commit is contained in:
parent
427f0fa010
commit
c48c62f481
6 changed files with 126 additions and 7 deletions
|
@ -9,6 +9,8 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "tcpsocket.h"
|
||||||
|
|
||||||
#ifndef ETH_ALEN
|
#ifndef ETH_ALEN
|
||||||
#define ETH_ALEN 6
|
#define ETH_ALEN 6
|
||||||
#endif
|
#endif
|
||||||
|
@ -179,4 +181,11 @@ pthread_mutex_t list_mutex;
|
||||||
node *probe_list_head;
|
node *probe_list_head;
|
||||||
char sort_string[SORT_NUM];
|
char sort_string[SORT_NUM];
|
||||||
|
|
||||||
|
#define ARRAY_NETWORK_LEN 50
|
||||||
|
struct network_con_s network_array[ARRAY_NETWORK_LEN];
|
||||||
|
pthread_mutex_t tcp_array_mutex;
|
||||||
|
int insert_to_tcp_array(struct network_con_s entry);
|
||||||
|
int tcp_array_contains_address(struct sockaddr_in entry);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -24,6 +24,8 @@ void *update_clients_thread(void *arg);
|
||||||
|
|
||||||
void *kick_clients_thread(void *arg);
|
void *kick_clients_thread(void *arg);
|
||||||
|
|
||||||
|
void *update_connections_thread(void *arg);
|
||||||
|
|
||||||
char *hostapd_dir_glob;
|
char *hostapd_dir_glob;
|
||||||
|
|
||||||
int ubus_call_umdns();
|
int ubus_call_umdns();
|
||||||
|
|
|
@ -42,6 +42,7 @@ pthread_t tid_client;
|
||||||
pthread_t tid_get_client;
|
pthread_t tid_get_client;
|
||||||
pthread_t tid_kick_clients;
|
pthread_t tid_kick_clients;
|
||||||
pthread_t tid_ap;
|
pthread_t tid_ap;
|
||||||
|
pthread_t tid_connections;
|
||||||
|
|
||||||
void daemon_shutdown()
|
void daemon_shutdown()
|
||||||
{
|
{
|
||||||
|
@ -59,6 +60,7 @@ void daemon_shutdown()
|
||||||
pthread_mutex_destroy(&probe_array_mutex);
|
pthread_mutex_destroy(&probe_array_mutex);
|
||||||
pthread_mutex_destroy(&client_array_mutex);
|
pthread_mutex_destroy(&client_array_mutex);
|
||||||
pthread_mutex_destroy(&ap_array_mutex);
|
pthread_mutex_destroy(&ap_array_mutex);
|
||||||
|
pthread_mutex_destroy(&tcp_array_mutex);
|
||||||
|
|
||||||
//printf("Free Counter: %d\n", free_counter);
|
//printf("Free Counter: %d\n", free_counter);
|
||||||
}
|
}
|
||||||
|
@ -171,7 +173,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
run_tcp_socket();
|
// run_tcp_socket();
|
||||||
|
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
@ -212,6 +214,11 @@ int main(int argc, char **argv) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pthread_mutex_init(&tcp_array_mutex, NULL) != 0) {
|
||||||
|
printf("\n mutex init failed\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
init_socket_runopts(opt_broadcast_ip, opt_broadcast_port, 1);
|
init_socket_runopts(opt_broadcast_ip, opt_broadcast_port, 1);
|
||||||
|
|
||||||
pthread_create(&tid_probe, NULL, &remove_array_thread, (void*)&time_config.remove_probe);
|
pthread_create(&tid_probe, NULL, &remove_array_thread, (void*)&time_config.remove_probe);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
// http://www.geeksforgeeks.org/socket-programming-in-cc-handling-multiple-clients-on-server-without-multi-threading/
|
// http://www.geeksforgeeks.org/socket-programming-in-cc-handling-multiple-clients-on-server-without-multi-threading/
|
||||||
|
|
||||||
#include "tcpsocket.h"
|
#include "tcpsocket.h"
|
||||||
|
#include "datastorage.h"
|
||||||
|
|
||||||
//Example code: A simple server side code, which echos back the received message.
|
//Example code: A simple server side code, which echos back the received message.
|
||||||
//Handle multiple socket connections with select and fd_set on Linux
|
//Handle multiple socket connections with select and fd_set on Linux
|
||||||
|
@ -23,9 +24,6 @@
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
#define PORT 1025
|
#define PORT 1025
|
||||||
|
|
||||||
//struct network_con_s connections[100];
|
|
||||||
//int tcp_entry_last = -1;
|
|
||||||
|
|
||||||
int run_tcp_socket()
|
int run_tcp_socket()
|
||||||
{
|
{
|
||||||
int opt = TRUE;
|
int opt = TRUE;
|
||||||
|
@ -189,8 +187,26 @@ int add_tcp_conncection(char* ipv4, int port){
|
||||||
serv_addr.sin_addr.s_addr = inet_addr(ipv4);
|
serv_addr.sin_addr.s_addr = inet_addr(ipv4);
|
||||||
serv_addr.sin_port = htons(port);
|
serv_addr.sin_port = htons(port);
|
||||||
|
|
||||||
|
if(tcp_array_contains_address(serv_addr))
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
|
if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
|
||||||
|
{
|
||||||
fprintf(stderr,"ERROR connecting");
|
fprintf(stderr,"ERROR connecting");
|
||||||
|
//return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct network_con_s tmp =
|
||||||
|
{
|
||||||
|
.sock_addr = serv_addr,
|
||||||
|
.sockfd = sockfd
|
||||||
|
};
|
||||||
|
|
||||||
|
insert_to_tcp_array(tmp);
|
||||||
|
|
||||||
|
printf("NEW TCP CONNECTION!!!");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,15 @@ void remove_old_ap_entries(time_t current_time, long long int threshold);
|
||||||
|
|
||||||
void print_ap_entry(ap entry);
|
void print_ap_entry(ap entry);
|
||||||
|
|
||||||
|
int tcp_array_contains_address_help(struct sockaddr_in entry);
|
||||||
|
|
||||||
|
int tcp_array_insert(struct network_con_s entry);
|
||||||
|
|
||||||
int probe_entry_last = -1;
|
int probe_entry_last = -1;
|
||||||
int client_entry_last = -1;
|
int client_entry_last = -1;
|
||||||
int ap_entry_last = -1;
|
int ap_entry_last = -1;
|
||||||
|
int tcp_entry_last = -1;
|
||||||
|
|
||||||
|
|
||||||
int eval_probe_metric(struct probe_entry_s probe_entry) {
|
int eval_probe_metric(struct probe_entry_s probe_entry) {
|
||||||
|
|
||||||
|
@ -890,4 +896,68 @@ void print_ap_array() {
|
||||||
print_ap_entry(ap_array[i]);
|
print_ap_entry(ap_array[i]);
|
||||||
}
|
}
|
||||||
printf("------------------\n");
|
printf("------------------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int insert_to_tcp_array(struct network_con_s entry) {
|
||||||
|
pthread_mutex_lock(&tcp_array_mutex);
|
||||||
|
|
||||||
|
int ret = tcp_array_insert(entry);
|
||||||
|
pthread_mutex_unlock(&tcp_array_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tcp_array_insert(struct network_con_s entry) {
|
||||||
|
if (tcp_entry_last == -1) {
|
||||||
|
network_array[0] = entry;
|
||||||
|
tcp_entry_last++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i <= tcp_entry_last; i++) {
|
||||||
|
if (entry.sock_addr.sin_addr.s_addr < network_array[i].sock_addr.sin_addr.s_addr) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (entry.sock_addr.sin_addr.s_addr == network_array[i].sock_addr.sin_addr.s_addr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int j = tcp_entry_last; j >= i; j--) {
|
||||||
|
if (j + 1 <= ARRAY_NETWORK_LEN) {
|
||||||
|
network_array[j + 1] = network_array[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
network_array[i] = entry;
|
||||||
|
|
||||||
|
if (tcp_entry_last < ARRAY_NETWORK_LEN) {
|
||||||
|
tcp_entry_last++;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tcp_array_contains_address(struct sockaddr_in entry) {
|
||||||
|
pthread_mutex_lock(&tcp_array_mutex);
|
||||||
|
|
||||||
|
int ret = tcp_array_contains_address_help(entry);
|
||||||
|
pthread_mutex_unlock(&tcp_array_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tcp_array_contains_address_help(struct sockaddr_in entry) {
|
||||||
|
if (tcp_entry_last == -1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i <= tcp_entry_last; i++) {
|
||||||
|
if (entry.sin_addr.s_addr == network_array[i].sock_addr.sin_addr.s_addr) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (entry.sin_addr.s_addr > network_array[i].sock_addr.sin_addr.s_addr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
|
@ -550,6 +550,15 @@ void *update_clients_thread(void *arg) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *update_connections_thread(void *arg) {
|
||||||
|
while (1) {
|
||||||
|
sleep(TIME_THRESHOLD_CLIENT_KICK);
|
||||||
|
printf("[Thread] : Updating Connections!\n");
|
||||||
|
ubus_call_umdns();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void *kick_clients_thread(void *arg) {
|
void *kick_clients_thread(void *arg) {
|
||||||
while (1) {
|
while (1) {
|
||||||
sleep(TIME_THRESHOLD_CLIENT_KICK);
|
sleep(TIME_THRESHOLD_CLIENT_KICK);
|
||||||
|
@ -626,6 +635,8 @@ void del_client_interface(uint32_t id, const uint8_t *client_addr, uint32_t reas
|
||||||
static void ubus_umdns_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
|
static void ubus_umdns_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
|
||||||
struct blob_attr *tb[__DAWN_UMDNS_TABLE_MAX];
|
struct blob_attr *tb[__DAWN_UMDNS_TABLE_MAX];
|
||||||
|
|
||||||
|
printf("PARSING UMDNS!!!\n");
|
||||||
|
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -649,12 +660,14 @@ static void ubus_umdns_cb(struct ubus_request *req, int type, struct blob_attr *
|
||||||
//char* str = blobmsg_format_json_indent(attr, true, -1);
|
//char* str = blobmsg_format_json_indent(attr, true, -1);
|
||||||
|
|
||||||
printf("Hostname: %s\n", hdr->name);
|
printf("Hostname: %s\n", hdr->name);
|
||||||
if (tb_dawn[DAWN_UMDNS_IPV4]) {
|
if (tb_dawn[DAWN_UMDNS_IPV4] && tb_dawn[DAWN_UMDNS_PORT]) {
|
||||||
printf("IPV4: %s\n", blobmsg_get_string(tb_dawn[DAWN_UMDNS_IPV4]));
|
printf("IPV4: %s\n", blobmsg_get_string(tb_dawn[DAWN_UMDNS_IPV4]));
|
||||||
}
|
|
||||||
if (tb_dawn[DAWN_UMDNS_PORT]) {
|
|
||||||
printf("Port: %d\n", blobmsg_get_u32(tb_dawn[DAWN_UMDNS_PORT]));
|
printf("Port: %d\n", blobmsg_get_u32(tb_dawn[DAWN_UMDNS_PORT]));
|
||||||
|
}else{
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_tcp_conncection(blobmsg_get_string(tb_dawn[DAWN_UMDNS_IPV4]), blobmsg_get_u32(tb_dawn[DAWN_UMDNS_PORT]));
|
||||||
//dump_client(tb, tmp_mac, bssid_addr, freq, ht_supported, vht_supported);
|
//dump_client(tb, tmp_mac, bssid_addr, freq, ht_supported, vht_supported);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,6 +685,8 @@ int ubus_call_umdns()
|
||||||
}
|
}
|
||||||
|
|
||||||
int timeout = 1;
|
int timeout = 1;
|
||||||
|
ubus_invoke(ctx_clients, id, "update", NULL, NULL, NULL, timeout * 1000);
|
||||||
ubus_invoke(ctx_clients, id, "browse", NULL, ubus_umdns_cb, NULL, timeout * 1000);
|
ubus_invoke(ctx_clients, id, "browse", NULL, ubus_umdns_cb, NULL, timeout * 1000);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue