Skip to content

Commit

Permalink
Added acknowledge function for lastseen entries
Browse files Browse the repository at this point in the history
Added function to acknowledge the observation of a lastseen entry in DB.
The function both acknowledges the observation and returns the previous
state of acknowledgment.

Ticket: ENT-11838
Changelog: None
Signed-off-by: Lars Erik Wik <[email protected]>
  • Loading branch information
larsewi committed Oct 14, 2024
1 parent 5d148d3 commit fc24d80
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
41 changes: 41 additions & 0 deletions libpromises/lastseen.c
Original file line number Diff line number Diff line change
Expand Up @@ -766,3 +766,44 @@ int RemoveKeysFromLastSeen(const char *input, bool must_be_coherent,

return 0;
}

/**
* @brief Acknowledge that lastseen host entry is observed.
* @param host_key The host key of the lastseen entry.
* @param already_acked Whether the lastseen entry was already acknowledged.
* @return true if host entry was successfully acknowledged, otherwise false.
*/
bool LastSeenHostAcknowledge(const char *host_key, bool incoming, bool *already_acked)
{
DBHandle *db = NULL;
if (!OpenDB(&db, dbid_lastseen))
{
Log(LOG_LEVEL_ERR, "Unable to open lastseen DB");
return false;
}

// Update quality-of-connection entry
char key[CF_BUFSIZE];
NDEBUG_UNUSED int ret = snprintf(key, CF_BUFSIZE, "q%c%s", incoming ? 'i' : 'o', host_key);
assert(ret > 0 && ret < CF_BUFSIZE);

KeyHostSeen value;
if (!ReadDB(db, key, &value, sizeof(value)))
{
Log(LOG_LEVEL_ERR, "Unable to read key '%s' from lastseen DB", key);
CloseDB(db);
return false;
}

*already_acked = value.acknowledged;
value.acknowledged = true;

if (!WriteDB(db, key, &value, sizeof(value))) {
Log(LOG_LEVEL_ERR, "Unable to write key '%s' to lastseen DB", key);
CloseDB(db);
return false;
}

CloseDB(db);
return true;
}
9 changes: 9 additions & 0 deletions libpromises/lastseen.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,13 @@ bool IsLastSeenCoherent(void);
int RemoveKeysFromLastSeen(const char *input, bool must_be_coherent,
char *equivalent, size_t equivalent_size);

/**
* @brief Acknowledge that lastseen host entry is observed.
* @param host_key The host key of the lastseen entry.
* @param incoming Whether it is an incoming or outgoing entry.
* @param already_acked Whether the lastseen entry was already acknowledged.
* @return true if host entry was successfully acknowledged, otherwise false.
*/
bool LastSeenHostAcknowledge(const char *host_key, bool incoming, bool *already_acked);

#endif

0 comments on commit fc24d80

Please sign in to comment.