diff options
Diffstat (limited to 'src/cache/query.c')
-rw-r--r-- | src/cache/query.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/cache/query.c b/src/cache/query.c index ad606e6..6c4bda8 100644 --- a/src/cache/query.c +++ b/src/cache/query.c @@ -1,13 +1,41 @@ /* ISC license. */ +#include <stdint.h> + +#include <s6-dns/s6dns-engine.h> + #include "shibari-cache-internal.h" -void query_fail (query *q) +static uint16_t query_delete (query *q) +{ + uint16_t newi = q->prev ; + QUERY(newi)->next = q->next ; + QUERY(q->next)->prev = q->prev ; + q->xindex = UINT16_MAX ; + return newi ; +} + +uint16_t query_abort (uint16_t id) { + query *q = QUERY(id) ; + s6dns_engine_recycle(&q->dt) ; + return query_delete(q) ; } -void query_success (query *q) +uint16_t query_fail (uint16_t id) { + query *q = QUERY(id) ; + + if (q->source == 2) tcpconnection_removequery(TCPCONNECTION(q->i), id) ; + return query_delete(q) ; +} + +uint16_t query_succeed (uint16_t id) +{ + query *q = QUERY(id) ; + + if (q->source == 2) tcpconnection_removequery(TCPCONNECTION(q->i), id) ; + return query_delete(q) ; } int query_new (uint8_t source, uint16_t i, char const *ip, uint16_t port, char const *s, uint16_t len) |