1 #include "fwp_agent_table.h"
6 unsigned int nr_agents;
7 /*pthread_mutex_t lock; */
8 /*gavl_cust_root_field_t root;*/
9 gavl_node_t *agent_tree;
13 GAVL_CUST_NODE_INT_DEC(_fwp_agent_table, fwp_agent_table_t, fwp_agent_data_t,
14 unsigned int, agent_tree, tree_node, _addr,
17 GAVL_CUST_NODE_INT_IMP(_fwp_agent_table, fwp_agent_table_t, fwp_agent_data_t,
18 unsigned int, agent_tree, tree_node, _addr,
21 fwp_agent_table_t fwp_agent_table = {
24 .lock = PTHREAD_MUTEX_INITIALIZER,
27 void fwp_agent_table_insert(fwp_sockaddr_t *agent_sockaddr)
29 struct sockaddr_in *addr_in;
30 fwp_agent_data_t *agdata;
32 agdata = fwp_agent_table_find(agent_sockaddr);
34 /* Alloc new agent data */
35 agdata = (fwp_agent_data_t*)malloc(sizeof(fwp_agent_data_t));
36 addr_in = (struct sockaddr_in*) agent_sockaddr->addr;
37 agdata->_addr = addr_in->sin_addr.s_addr;
38 memcpy(&agdata->addr, agent_sockaddr, sizeof(fwp_sockaddr_t));
39 fwp_contract_table_init(&agdata->contract_table);
42 pthread_mutex_lock(&fwp_agent_table.lock);
43 _fwp_agent_table_insert(&fwp_agent_table, agdata);
44 fwp_agent_table.nr_agents++;
45 pthread_mutex_unlock(&fwp_agent_table.lock);
48 fwp_agent_data_t* fwp_agent_table_find(fwp_sockaddr_t *agent_sockaddr)
51 struct sockaddr_in *addr_in;
53 addr_in = (struct sockaddr_in*) agent_sockaddr->addr;
54 addr = addr_in->sin_addr.s_addr;
56 return _fwp_agent_table_find(&fwp_agent_table, &addr);
59 int fwp_agent_table_delete(fwp_agent_data_t *agdata)
63 pthread_mutex_lock(&fwp_agent_table.lock);
64 rv = _fwp_agent_table_delete(&fwp_agent_table, agdata);
65 fwp_agent_table.nr_agents--;
66 pthread_mutex_unlock(&fwp_agent_table.lock);