summaryrefslogtreecommitdiff
path: root/src/cache/query.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cache/query.c')
-rw-r--r--src/cache/query.c32
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)