]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Add file descriptor to client, and create function to fetch all clients
authorpcarana <pc.moreno2099@gmail.com>
Thu, 7 Mar 2019 23:20:35 +0000 (17:20 -0600)
committerpcarana <pc.moreno2099@gmail.com>
Thu, 7 Mar 2019 23:20:35 +0000 (17:20 -0600)
src/clients.c
src/clients.h
src/rtr/rtr.c

index bb7fa6ac2fb287e2fab9386398d23842e2d707b2..bc81eb0f41d586d508a5b5118f94c0559744e889 100644 (file)
@@ -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)
 {
index 345eaf6d7ba11ff500ab2c4e3c2f6ecc20c90f74..2f218b88d1891d50de3d83019a4ee7a95167db6f 100644 (file)
@@ -5,6 +5,7 @@
 #include <time.h>
 
 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_ */
index 81f8795629ad233e92e1c49ff22ef43448a49f86..9f332a2e6855a19d2e586d24b4c15760932ab009 100644 (file)
@@ -125,7 +125,9 @@ client_thread_cb(void *param_void)
                        return NULL;
 
                /* RTR Version ready, now update client */
-               err = update_client(&param.client_addr, rtr_version, 3600);
+               /* TODO Remove this hardcoded ttl */
+               err = update_client(param.client_fd, &param.client_addr, rtr_version,
+                   3600);
                if (err)
                        return NULL;