Implement timestamp tracking of invites

Now lists nodes also have the "onlyonce" field, since the valid_until is
used to keep the timestamp of placing. Found no references to onlyonce
or about valid_until being == 1, though, so it might be unused, but
still available for other enhancements.
This commit is contained in:
LucentW 2015-05-11 21:50:48 +02:00
parent 4da04640e6
commit 4396936f38
3 changed files with 22 additions and 6 deletions

View File

@ -1120,7 +1120,7 @@ Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce, const char *who )
{
struct list_head *h = Channel_GetListInvites(c);
LogDebug("Adding \"%s\" to \"%s\" invite list", mask, Channel_Name(c));
return Lists_Add(h, mask, onlyonce, who);
return Lists_Add(h, mask, time(NULL), who, onlyonce);
}

View File

@ -32,7 +32,8 @@ struct list_elem {
struct list_elem *next; /** pointer to next list element */
char mask[MASK_LEN]; /** IRC mask */
char *reason; /** Optional "reason" text */
time_t valid_until; /** 0: unlimited; 1: once; t(>1): until t */
time_t valid_until; /** 0: unlimited; t(>0): until t */
bool onlyonce;
};
/**
@ -65,7 +66,7 @@ Lists_GetReason(const struct list_elem *e)
* Get "validity" value stored in list element.
*
* @param list_elem List element.
* @return Validity: 0=unlimited, 1=once, >1 until this time stamp.
* @return Validity: 0=unlimited, >0 until this time stamp.
*/
GLOBAL time_t
Lists_GetValidity(const struct list_elem *e)
@ -74,6 +75,19 @@ Lists_GetValidity(const struct list_elem *e)
return e->valid_until;
}
/**
* Get "onlyonce" value stored in list element.
*
* @param list_elem List element.
* @return True if the element was stored for single use, false otherwise.
*/
GLOBAL bool
Lists_GetOnlyOnce(const struct list_elem *e)
{
assert(e != NULL);
return e->onlyonce;
}
/**
* Get first list element of a list.
*
@ -111,7 +125,7 @@ Lists_GetNext(const struct list_elem *e)
*/
bool
Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
const char *Reason)
const char *Reason, bool OnlyOnce = false)
{
struct list_elem *e, *newelem;
@ -148,6 +162,7 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
else
newelem->reason = NULL;
newelem->valid_until = ValidUntil;
newelem->onlyonce = OnlyOnce;
newelem->next = e;
h->first = newelem;
@ -363,7 +378,7 @@ Lists_Expire(struct list_head *h, const char *ListName)
while (e) {
next = e->next;
if (e->valid_until > 1 && e->valid_until < now) {
if (e->valid_until > 0 && e->valid_until < now) {
/* Entry is expired, delete it */
if (e->reason)
Log(LOG_INFO,

View File

@ -36,7 +36,7 @@ GLOBAL struct list_elem *Lists_CheckDupeMask PARAMS((const struct list_head *hea
const char *mask));
GLOBAL bool Lists_Add PARAMS((struct list_head *h, const char *Mask,
time_t ValidUntil, const char *Reason));
time_t ValidUntil, const char *Reason, bool OnlyOnce));
GLOBAL void Lists_Del PARAMS((struct list_head *head, const char *Mask));
GLOBAL unsigned long Lists_Count PARAMS((struct list_head *h));
@ -46,6 +46,7 @@ GLOBAL void Lists_MakeMask PARAMS((const char *Pattern, char *mask, size_t len))
GLOBAL const char *Lists_GetMask PARAMS((const struct list_elem *e));
GLOBAL const char *Lists_GetReason PARAMS((const struct list_elem *e));
GLOBAL time_t Lists_GetValidity PARAMS((const struct list_elem *e));
GLOBAL bool Lists_GetOnlyOnce PARAMS((const struct list_elem *e));
GLOBAL void Lists_Expire PARAMS((struct list_head *h, const char *ListName));