summaryrefslogtreecommitdiff
path: root/src/include/s6-dns/skadns.h
blob: b58363a20d042db7e00cdef16581efdb93c36f37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* ISC license. */

#ifndef SKADNS_H
#define SKADNS_H

#include <errno.h>
#include <skalibs/uint16.h>
#include <skalibs/tai.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
#include <skalibs/skaclient.h>
#include <s6-dns/config.h>
#include <s6-dns/s6dns-domain.h>

#define SKADNSD_PROG S6_DNS_BINPREFIX "skadnsd"
#define SKADNS_BANNER1 "skadns v1.0 (b)\n"
#define SKADNS_BANNER1_LEN (sizeof SKADNS_BANNER1 - 1)
#define SKADNS_BANNER2 "skadns v1.0 (a)\n"
#define SKADNS_BANNER2_LEN (sizeof SKADNS_BANNER2 - 1)
#define SKADNS_MAXCONCURRENCY 1000

typedef struct skadnsanswer_s skadnsanswer_t, *skadnsanswer_t_ref ;
struct skadnsanswer_s
{
  int status ;
  char *data ;
  unsigned int len ;
} ;
#define SKADNSANSWER_ZERO { .status = EINVAL, .data = 0, .len = 0 }

typedef struct skadns_s skadns_t, *skadns_t_ref ;
struct skadns_s
{
  skaclient_t connection ;
  genalloc list ; /* array of uint16 */
  gensetdyn q ; /* set of skadnsanswer_t */
  skaclient_buffer_t buffers ;
} ;
#define SKADNS_ZERO { .connection = SKACLIENT_ZERO, .list = GENALLOC_ZERO, .q = GENSETDYN_INIT(skadnsanswer_t, 3, 3, 8) }
extern skadns_t const skadns_zero ;


 /* Starting and ending a session */

extern int skadns_start (skadns_t *, char const *, tain_t const *, tain_t *) ;
#define skadns_start_g(a, path, deadline) skadns_start(a, path, (deadline), &STAMP)
extern int skadns_startf (skadns_t *, tain_t const *, tain_t *) ;
#define skadns_startf_g(a, deadline) skadns_startf(a, (deadline), &STAMP)
extern void skadns_end (skadns_t *) ;

                
 /* Synchronous functions */
 
extern int skadns_send (skadns_t *, uint16 *, s6dns_domain_t const *, uint16, tain_t const *, tain_t const *, tain_t *) ;
#define skadns_send_g(a, id, d, qtype, limit, deadline) skadns_send(a, id, d, qtype, limit, (deadline), &STAMP)
extern int skadns_cancel (skadns_t *, uint16, tain_t const *, tain_t *) ;
#define skadns_cancel_g(a, id, deadline) skadns_cancel(a, id, (deadline), &STAMP)


 /* Asynchronous functions */

#define skadns_fd(a) skaclient_fd(&(a)->connection)
extern int skadns_update (skadns_t *) ;
#define skadns_list(a) genalloc_s(uint16 const, &(a)->list)
#define skadns_clearlist(a) ((a)->list.len = 0)
extern int skadns_packetlen (skadns_t const *, uint16) ;
extern char const *skadns_packet (skadns_t const *, uint16) ;
extern int skadns_release (skadns_t *, uint16) ;

#endif