}
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;
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;
}
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)
{
#include <time.h>
struct client {
+ int fd;
sa_family_t sin_family;
union {
struct in_addr sin_addr;
};
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_ */
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;