Skip to content

Commit

Permalink
Implement timestamp tracking of invites
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
LucentW committed May 11, 2015
1 parent 4da0464 commit 4396936
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/ngircd/channel.c
Expand Up @@ -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);
}


Expand Down
23 changes: 19 additions & 4 deletions src/ngircd/lists.c
Expand Up @@ -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;
};

/**
Expand Down Expand Up @@ -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)
Expand All @@ -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.
*
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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,
Expand Down
3 changes: 2 additions & 1 deletion src/ngircd/lists.h
Expand Up @@ -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));

Expand All @@ -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));

Expand Down

0 comments on commit 4396936

Please sign in to comment.