chiark / gitweb /
main loop: Use <bsd/sys/queue.h> for poll interest list
[secnet.git] / secnet.h
index 5c97751c9eedb97b0dd37af776adc1b409506541..629851b2ac183234cf00ba8ca773c1e730183b2d 100644 (file)
--- a/secnet.h
+++ b/secnet.h
@@ -3,6 +3,8 @@
 #ifndef secnet_h
 #define secnet_h
 
+#define ADNS_FEATURE_MANYAF
+
 #include "config.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -17,6 +19,8 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
+#include <bsd/sys/queue.h>
+
 #define MAX_PEER_ADDRS 5
 /* send at most this many copies; honour at most that many addresses */
 
@@ -136,6 +140,14 @@ extern uint32_t dict_read_number(dict_t *dict, cstring_t key, bool_t required,
   /* return value can safely be assigned to int32_t */
 extern bool_t dict_read_bool(dict_t *dict, cstring_t key, bool_t required,
                             cstring_t desc, struct cloc loc, bool_t def);
+const char **dict_read_string_array(dict_t *dict, cstring_t key,
+                                   bool_t required, cstring_t desc,
+                                   struct cloc loc, const char *const *def);
+  /* Return value is a NULL-terminated array obtained from malloc;
+   * Individual string values are still owned by config file machinery
+   * and must not be modified or freed.  Returns NULL if key not
+   * found. */
+
 struct flagstr {
     cstring_t name;
     uint32_t value;
@@ -295,7 +307,10 @@ struct buffer_if;
    actually found in the DNS, which may be bigger if addrs is equal
    to MAX_PEER_ADDRS (ie there were too many). */
 typedef void resolve_answer_fn(void *st, const struct comm_addr *addrs,
-                              int naddrs, int was_naddrs);
+                              int naddrs, int was_naddrs,
+                              const char *name, const char *failwhy);
+  /* name is the same ptr as passed to request, so its lifetime must
+   * be suitable*/
 typedef bool_t resolve_request_fn(void *st, cstring_t name,
                                  int remoteport, struct comm_if *comm,
                                  resolve_answer_fn *cb, void *cst);
@@ -339,6 +354,7 @@ struct comm_addr {
        freely copy it. */
     struct comm_if *comm;
     union iaddr ia;
+    int ix; /* see comment `Re comm_addr.ix' in udp.c */
 };
 
 /* Return True if the packet was processed, and shouldn't be passed to