mirror of
https://github.com/osmarks/ngircd.git
synced 2025-01-05 21:30:29 +00:00
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:
parent
4da04640e6
commit
4396936f38
@ -1120,7 +1120,7 @@ Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce, const char *who )
|
|||||||
{
|
{
|
||||||
struct list_head *h = Channel_GetListInvites(c);
|
struct list_head *h = Channel_GetListInvites(c);
|
||||||
LogDebug("Adding \"%s\" to \"%s\" invite list", mask, Channel_Name(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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,8 @@ struct list_elem {
|
|||||||
struct list_elem *next; /** pointer to next list element */
|
struct list_elem *next; /** pointer to next list element */
|
||||||
char mask[MASK_LEN]; /** IRC mask */
|
char mask[MASK_LEN]; /** IRC mask */
|
||||||
char *reason; /** Optional "reason" text */
|
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.
|
* Get "validity" value stored in list element.
|
||||||
*
|
*
|
||||||
* @param list_elem 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
|
GLOBAL time_t
|
||||||
Lists_GetValidity(const struct list_elem *e)
|
Lists_GetValidity(const struct list_elem *e)
|
||||||
@ -74,6 +75,19 @@ Lists_GetValidity(const struct list_elem *e)
|
|||||||
return e->valid_until;
|
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.
|
* Get first list element of a list.
|
||||||
*
|
*
|
||||||
@ -111,7 +125,7 @@ Lists_GetNext(const struct list_elem *e)
|
|||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
|
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;
|
struct list_elem *e, *newelem;
|
||||||
|
|
||||||
@ -148,6 +162,7 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
|
|||||||
else
|
else
|
||||||
newelem->reason = NULL;
|
newelem->reason = NULL;
|
||||||
newelem->valid_until = ValidUntil;
|
newelem->valid_until = ValidUntil;
|
||||||
|
newelem->onlyonce = OnlyOnce;
|
||||||
newelem->next = e;
|
newelem->next = e;
|
||||||
h->first = newelem;
|
h->first = newelem;
|
||||||
|
|
||||||
@ -363,7 +378,7 @@ Lists_Expire(struct list_head *h, const char *ListName)
|
|||||||
|
|
||||||
while (e) {
|
while (e) {
|
||||||
next = e->next;
|
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 */
|
/* Entry is expired, delete it */
|
||||||
if (e->reason)
|
if (e->reason)
|
||||||
Log(LOG_INFO,
|
Log(LOG_INFO,
|
||||||
|
@ -36,7 +36,7 @@ GLOBAL struct list_elem *Lists_CheckDupeMask PARAMS((const struct list_head *hea
|
|||||||
const char *mask));
|
const char *mask));
|
||||||
|
|
||||||
GLOBAL bool Lists_Add PARAMS((struct list_head *h, 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 void Lists_Del PARAMS((struct list_head *head, const char *Mask));
|
||||||
GLOBAL unsigned long Lists_Count PARAMS((struct list_head *h));
|
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_GetMask PARAMS((const struct list_elem *e));
|
||||||
GLOBAL const char *Lists_GetReason 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 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));
|
GLOBAL void Lists_Expire PARAMS((struct list_head *h, const char *ListName));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user