chiark / gitweb /
build system: provide configure option --enable-hacky-parallel
[secnet.git] / secnet.h
index 656c86d262a54e0910ca5dc580becf720236270c..9cc22059ad0272e189a4b54d3b5a505d67b7e71f 100644 (file)
--- a/secnet.h
+++ b/secnet.h
@@ -34,6 +34,10 @@ typedef enum {False,True} bool_t;
 #define ASSERT(x) do { if (!(x)) { fatal("assertion failed line %d file " \
                                         __FILE__,__LINE__); } } while(0)
 
+/* from version.c */
+
+extern char version[];
+
 /* from logmsg.c */
 extern uint32_t message_level;
 extern bool_t secnet_is_daemon;
@@ -56,7 +60,7 @@ typedef struct list list_t;        /* A list of items */
 /* Configuration file location, for error-reporting */
 struct cloc {
     cstring_t file;
-    uint32_t line;
+    int line;
 };
 
 /* Modules export closures, which can be invoked from the configuration file.
@@ -103,11 +107,11 @@ extern cstring_t *dict_keys(dict_t *dict);
 
 /* List-manipulation functions */
 extern list_t *list_new(void);
-extern uint32_t list_length(list_t *a);
+extern int32_t list_length(list_t *a);
 extern list_t *list_append(list_t *a, item_t *i);
 extern list_t *list_append_list(list_t *a, list_t *b);
 /* Returns an item from the list (index starts at 0), or NULL */
-extern item_t *list_elem(list_t *l, uint32_t index);
+extern item_t *list_elem(list_t *l, int32_t index);
 
 /* Convenience functions */
 extern list_t *new_closure(closure_t *cl);
@@ -122,6 +126,7 @@ extern string_t dict_read_string(dict_t *dict, cstring_t key, bool_t required,
 extern uint32_t dict_read_number(dict_t *dict, cstring_t key, bool_t required,
                                 cstring_t desc, struct cloc loc,
                                 uint32_t def);
+  /* 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);
 struct flagstr {
@@ -139,22 +144,29 @@ extern uint32_t string_list_to_word(list_t *l, struct flagstr *f,
 
 extern char *safe_strdup(const char *string, const char *message);
 extern void *safe_malloc(size_t size, const char *message);
+extern void *safe_malloc_ary(size_t size, size_t count, const char *message);
 
 extern int sys_cmd(const char *file, const char *argc, ...);
 
+extern uint64_t now_global;
+extern struct timeval tv_now_global;
+
+static const uint64_t       *const now    = &now_global;
+static const struct timeval *const tv_now = &tv_now_global;
+
+/* "now" is current program time, in milliseconds. It is derived
+   from tv_now. Both are provided by the event loop. */
+
 /***** END of utility functions *****/
 
 /***** SCHEDULING support */
 
-/* "now" is current program time, in milliseconds. It is derived
-   (once) from tv_now. If nfds_io is insufficient for your needs, set
-   it to the required number and return ERANGE. timeout is in milliseconds;
-   if it is too high then lower it. It starts at -1 (==infinite) */
+/* If nfds_io is insufficient for your needs, set it to the required
+   number and return ERANGE. timeout is in milliseconds; if it is too
+   high then lower it. It starts at -1 (==infinite) */
 typedef int beforepoll_fn(void *st, struct pollfd *fds, int *nfds_io,
-                         int *timeout_io, const struct timeval *tv_now,
-                         uint64_t *now);
-typedef void afterpoll_fn(void *st, struct pollfd *fds, int nfds,
-                         const struct timeval *tv_now, uint64_t *now);
+                         int *timeout_io);
+typedef void afterpoll_fn(void *st, struct pollfd *fds, int nfds);
 
 /* Register interest in the main loop of the program. Before a call
    to poll() your supplied beforepoll function will be called. After
@@ -163,7 +175,7 @@ typedef void afterpoll_fn(void *st, struct pollfd *fds, int nfds,
    structures you may require - you can always ask for more in
    *nfds_io. */
 extern void register_for_poll(void *st, beforepoll_fn *before,
-                             afterpoll_fn *after, uint32_t max_nfds,
+                             afterpoll_fn *after, int32_t max_nfds,
                              cstring_t desc);
 
 /***** END of scheduling support */
@@ -264,7 +276,7 @@ struct resolver_if {
 /* RANDOMSRC interface */
 
 /* Return some random data. Returns TRUE for success. */
-typedef bool_t random_fn(void *st, uint32_t bytes, uint8_t *buff);
+typedef bool_t random_fn(void *st, int32_t bytes, uint8_t *buff);
 
 struct random_if {
     void *st;
@@ -274,7 +286,7 @@ struct random_if {
 
 /* RSAPUBKEY interface */
 
-typedef bool_t rsa_checksig_fn(void *st, uint8_t *data, uint32_t datalen,
+typedef bool_t rsa_checksig_fn(void *st, uint8_t *data, int32_t datalen,
                               cstring_t signature);
 struct rsapubkey_if {
     void *st;
@@ -283,7 +295,7 @@ struct rsapubkey_if {
 
 /* RSAPRIVKEY interface */
 
-typedef string_t rsa_makesig_fn(void *st, uint8_t *data, uint32_t datalen);
+typedef string_t rsa_makesig_fn(void *st, uint8_t *data, int32_t datalen);
 struct rsaprivkey_if {
     void *st;
     rsa_makesig_fn *sign;
@@ -303,8 +315,8 @@ typedef bool_t comm_sendmsg_fn(void *commst, struct buffer_if *buf,
                               struct sockaddr_in *dest);
 struct comm_if {
     void *st;
-    uint32_t min_start_pad;
-    uint32_t min_end_pad;
+    int32_t min_start_pad;
+    int32_t min_end_pad;
     comm_request_notify_fn *request_notify;
     comm_release_notify_fn *release_notify;
     comm_sendmsg_fn *sendmsg;
@@ -320,9 +332,11 @@ struct log_if {
     log_msg_fn *log;
     log_vmsg_fn *vlog;
 };
-/* (convenience function, defined in util.c) */
+/* (convenience functions, defined in util.c) */
 extern void slilog(struct log_if *lf, int class, const char *message, ...)
 FORMAT(printf,3,4);
+extern void vslilog(struct log_if *lf, int class, const char *message, va_list)
+FORMAT(printf,3,0);
 
 /* SITE interface */
 
@@ -349,7 +363,7 @@ struct site_if {
    particular key material) have a different C type. */
 
 typedef struct transform_inst_if *transform_createinstance_fn(void *st);
-typedef bool_t transform_setkey_fn(void *st, uint8_t *key, uint32_t keylen);
+typedef bool_t transform_setkey_fn(void *st, uint8_t *key, int32_t keylen);
 typedef void transform_delkey_fn(void *st);
 typedef void transform_destroyinstance_fn(void *st);
 /* Returns 0 for 'all is well', any other value for a problem */
@@ -367,9 +381,9 @@ struct transform_inst_if {
 
 struct transform_if {
     void *st;
-    uint32_t max_start_pad;
-    uint32_t max_end_pad;
-    uint32_t keylen;
+    int32_t max_start_pad; /* these three are all <<< INT_MAX */
+    int32_t max_end_pad;
+    int32_t keylen;
     transform_createinstance_fn *create;
 };
 
@@ -390,11 +404,11 @@ typedef void netlink_deliver_fn(void *st, struct buffer_if *buf);
 #define MAXIMUM_LINK_QUALITY 3
 typedef void netlink_link_quality_fn(void *st, uint32_t quality);
 typedef void netlink_register_fn(void *st, netlink_deliver_fn *deliver,
-                                void *dst, uint32_t max_start_pad,
-                                uint32_t max_end_pad);
+                                void *dst, int32_t max_start_pad,
+                                int32_t max_end_pad);
 typedef void netlink_output_config_fn(void *st, struct buffer_if *buf);
 typedef bool_t netlink_check_config_fn(void *st, struct buffer_if *buf);
-typedef void netlink_set_mtu_fn(void *st, uint32_t new_mtu);
+typedef void netlink_set_mtu_fn(void *st, int32_t new_mtu);
 struct netlink_if {
     void *st;
     netlink_register_fn *reg;
@@ -409,14 +423,14 @@ struct netlink_if {
 
 /* Returns public key as a malloced hex string */
 typedef string_t dh_makepublic_fn(void *st, uint8_t *secret,
-                                 uint32_t secretlen);
+                                 int32_t secretlen);
 /* Fills buffer (up to buflen) with shared secret */
 typedef void dh_makeshared_fn(void *st, uint8_t *secret,
-                             uint32_t secretlen, cstring_t rempublic,
-                             uint8_t *sharedsecret, uint32_t buflen);
+                             int32_t secretlen, cstring_t rempublic,
+                             uint8_t *sharedsecret, int32_t buflen);
 struct dh_if {
     void *st;
-    uint32_t len; /* Approximate size of modulus in bytes */
+    int32_t len; /* Approximate size of modulus in bytes */
     dh_makepublic_fn *makepublic;
     dh_makeshared_fn *makeshared;
 };
@@ -424,10 +438,10 @@ struct dh_if {
 /* HASH interface */
 
 typedef void *hash_init_fn(void);
-typedef void hash_update_fn(void *st, uint8_t const *buf, uint32_t len);
+typedef void hash_update_fn(void *st, uint8_t const *buf, int32_t len);
 typedef void hash_final_fn(void *st, uint8_t *digest);
 struct hash_if {
-    uint32_t len; /* Hash output length in bytes */
+    int32_t len; /* Hash output length in bytes */
     hash_init_fn *init;
     hash_update_fn *update;
     hash_final_fn *final;
@@ -442,8 +456,8 @@ struct buffer_if {
     struct cloc loc; /* Where we were defined */
     uint8_t *base;
     uint8_t *start;
-    uint32_t size; /* Size of buffer contents */
-    uint32_t len; /* Total length allocated at base */
+    int32_t size; /* Size of buffer contents */
+    int32_t len; /* Total length allocated at base */
 };
 
 /***** LOG functions *****/