mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 14:51:11 +01:00
geoip: Add clientmap_entry_new() function
Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
4d812e29b9
commit
e758d659a0
1 changed files with 26 additions and 6 deletions
|
@ -580,6 +580,31 @@ clientmap_entry_free(clientmap_entry_t *ent)
|
|||
tor_free(ent);
|
||||
}
|
||||
|
||||
/* Return a newly allocated clientmap entry with the given action and address
|
||||
* that are mandatory. The transport_name can be optional. This can't fail. */
|
||||
static clientmap_entry_t *
|
||||
clientmap_entry_new(geoip_client_action_t action, const tor_addr_t *addr,
|
||||
const char *transport_name)
|
||||
{
|
||||
clientmap_entry_t *entry;
|
||||
|
||||
tor_assert(action == GEOIP_CLIENT_CONNECT ||
|
||||
action == GEOIP_CLIENT_NETWORKSTATUS);
|
||||
tor_assert(addr);
|
||||
|
||||
entry = tor_malloc_zero(sizeof(clientmap_entry_t));
|
||||
entry->action = action;
|
||||
tor_addr_copy(&entry->addr, addr);
|
||||
if (transport_name) {
|
||||
entry->transport_name = tor_strdup(transport_name);
|
||||
}
|
||||
|
||||
/* Allocated and initialized, note down its size for the OOM handler. */
|
||||
geoip_increment_client_history_cache_size(clientmap_entry_size(entry));
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
||||
/** Clear history of connecting clients used by entry and bridge stats. */
|
||||
static void
|
||||
client_history_clear(void)
|
||||
|
@ -632,13 +657,8 @@ geoip_note_client_seen(geoip_client_action_t action,
|
|||
ent = HT_FIND(clientmap, &client_history, &lookup);
|
||||
|
||||
if (! ent) {
|
||||
ent = tor_malloc_zero(sizeof(clientmap_entry_t));
|
||||
tor_addr_copy(&ent->addr, addr);
|
||||
if (transport_name)
|
||||
ent->transport_name = tor_strdup(transport_name);
|
||||
ent->action = (int)action;
|
||||
ent = clientmap_entry_new(action, addr, transport_name);
|
||||
HT_INSERT(clientmap, &client_history, ent);
|
||||
geoip_increment_client_history_cache_size(clientmap_entry_size(ent));
|
||||
}
|
||||
if (now / 60 <= (int)MAX_LAST_SEEN_IN_MINUTES && now >= 0)
|
||||
ent->last_seen_in_minutes = (unsigned)(now/60);
|
||||
|
|
Loading…
Add table
Reference in a new issue