diff options
author | Linus Nordberg <linus@nordberg.se> | 2013-08-26 14:25:51 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2013-08-26 14:25:51 +0200 |
commit | 4920ff44a180c17addff089a42b8b0b8c16fef83 (patch) | |
tree | d182dab202f9dc8ca355dabc703b6ba861bca76b /radsecproxy.c | |
parent | 185d4c5196a16a52eefb494a07cde42e73ab60df (diff) |
Purge the duplication cache once per received packet.
Diffstat (limited to 'radsecproxy.c')
-rw-r--r-- | radsecproxy.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/radsecproxy.c b/radsecproxy.c index caec987..2c001e5 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -1377,6 +1377,22 @@ struct request *newrequest() { return rq; } +static void +purgedupcache(struct client *client) { + struct request *r; + struct timeval now; + int i; + + gettimeofday(&now, NULL); + for (i = 0; i < MAX_REQUESTS; i++) { + r = client->rqs[i]; + if (r && now.tv_sec - r->created.tv_sec > r->from->conf->dupinterval) { + freerq(r); + client->rqs[i] = NULL; + } + } +} + int addclientrq(struct request *rq) { struct request *r; struct timeval now; @@ -1440,6 +1456,7 @@ int radsrv(struct request *rq) { goto exit; } + purgedupcache(from); if (!addclientrq(rq)) goto exit; |