From: pcarana Date: Thu, 7 Mar 2019 23:20:35 +0000 (-0600) Subject: Add file descriptor to client, and create function to fetch all clients X-Git-Tag: v0.0.2~52^2~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4815c9153598f1fa9b6c596a73171e3e25ff8fe4;p=thirdparty%2FFORT-validator.git Add file descriptor to client, and create function to fetch all clients --- diff --git a/src/clients.c b/src/clients.c index bb7fa6ac..bc81eb0f 100644 --- a/src/clients.c +++ b/src/clients.c @@ -54,7 +54,7 @@ static struct client } static int -create_client(struct sockaddr_storage *addr, u_int8_t rtr_version, +create_client(int fd, struct sockaddr_storage *addr, u_int8_t rtr_version, time_t ttl) { struct client *client; @@ -65,6 +65,7 @@ create_client(struct sockaddr_storage *addr, u_int8_t rtr_version, return -ENOMEM; } + client->fd = fd; client->sin_family = addr->ss_family; if (addr->ss_family == AF_INET) { client->sin_addr = SADDR_IN(addr)->sin_addr; @@ -80,18 +81,25 @@ create_client(struct sockaddr_storage *addr, u_int8_t rtr_version, } int -update_client(struct sockaddr_storage *addr, u_int8_t rtr_version, +update_client(int fd, struct sockaddr_storage *addr, u_int8_t rtr_version, time_t ttl) { struct client *client; client = get_client(addr, rtr_version); if (client == NULL) - return create_client(addr, rtr_version, ttl); + return create_client(fd, addr, rtr_version, ttl); client->expiration = time(NULL) + ttl; return 0; } +size_t +client_list(struct client **clients) +{ + *clients = clients_db->array; + return clients_db->len; +} + static void client_destroy(struct client *client) { diff --git a/src/clients.h b/src/clients.h index 345eaf6d..2f218b88 100644 --- a/src/clients.h +++ b/src/clients.h @@ -5,6 +5,7 @@ #include struct client { + int fd; sa_family_t sin_family; union { struct in_addr sin_addr; @@ -17,7 +18,8 @@ struct client { }; int clients_db_init(void); -int update_client(struct sockaddr_storage *, u_int8_t, time_t); +int update_client(int fd, struct sockaddr_storage *, u_int8_t, time_t); +size_t client_list(struct client **); void clients_db_destroy(void); #endif /* SRC_CLIENTS_H_ */ diff --git a/src/rtr/rtr.c b/src/rtr/rtr.c index 81f87956..9f332a2e 100644 --- a/src/rtr/rtr.c +++ b/src/rtr/rtr.c @@ -125,7 +125,9 @@ client_thread_cb(void *param_void) return NULL; /* RTR Version ready, now update client */ - err = update_client(¶m.client_addr, rtr_version, 3600); + /* TODO Remove this hardcoded ttl */ + err = update_client(param.client_fd, ¶m.client_addr, rtr_version, + 3600); if (err) return NULL;