Copyright updates:
[users/jgh/exim.git] / src / src / structs.h
index 1925c49323d99b352c0e1986c1aa9dcf38f834d8..c6700d5136803fe8aa91d5fad96cc4e02b4b3517 100644 (file)
@@ -3,6 +3,7 @@
 *************************************************/
 
 /* Copyright (c) University of Cambridge 1995 - 2018 */
+/* Copyright (c) The Exim Maintainers 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 
@@ -433,6 +434,7 @@ typedef struct auth_info {
     int);                         /* sizeof buffer */
   void (*version_report)(         /* diagnostic version reporting */
     FILE *);                      /* I/O stream to print to */
+  void (*macros_create)(void);   /* feature-macro creation */
 } auth_info;
 
 
@@ -511,17 +513,17 @@ typedef struct address_item_propagated {
   uschar *errors_address;         /* where to send errors (NULL => sender) */
   header_line *extra_headers;     /* additional headers */
   uschar *remove_headers;         /* list of those to remove */
-  gstring *set;                          /* list of variables, with values */
+  void   *variables;             /* router-vasriables */
 
-  #ifdef EXPERIMENTAL_SRS
+#ifdef EXPERIMENTAL_SRS
   uschar *srs_sender;             /* Change return path when delivering */
-  #endif
+#endif
   BOOL    ignore_error:1;        /* ignore delivery error */
-  #ifdef SUPPORT_I18N
+#ifdef SUPPORT_I18N
   BOOL    utf8_msg:1;            /* requires SMTPUTF8 processing */
   BOOL   utf8_downcvt:1;         /* mandatory downconvert on delivery */
   BOOL   utf8_downcvt_maybe:1;   /* optional downconvert on delivery */
-  #endif
+#endif
 } address_item_propagated;
 
 
@@ -552,7 +554,9 @@ typedef struct address_item {
   uschar *lc_local_part;          /* lowercased local part */
   uschar *local_part;             /* points to cc or lc version */
   uschar *prefix;                 /* stripped prefix of local part */
+  uschar *prefix_v;              /*  variable part of above */
   uschar *suffix;                 /* stripped suffix of local part */
+  uschar *suffix_v;              /*  variable part of above */
   const uschar *domain;           /* working domain (lower cased) */
 
   uschar *address_retry_key;      /* retry key including full address */
@@ -570,6 +574,7 @@ typedef struct address_item {
   uschar *shadow_message;         /* info about shadow transporting */
 
 #ifndef DISABLE_TLS
+  const uschar *tlsver;           /* version used for transport */
   uschar *cipher;                 /* Cipher used for transport */
   void   *ourcert;                /* Certificate offered to peer, binary */
   void   *peercert;               /* Certificate from peer, binary */
@@ -625,7 +630,7 @@ typedef struct address_item {
     BOOL af_tcp_fastopen:1;            /* delivery usefully used TCP Fast Open */
     BOOL af_tcp_fastopen_data:1;       /* delivery sent SMTP commands on TCP Fast Open */
     BOOL af_pipelining:1;              /* delivery used (traditional) pipelining */
-#ifdef SUPPORT_PIPE_CONNECT
+#ifndef DISABLE_PIPE_CONNECT
     BOOL af_early_pipe:1;              /* delivery used connect-time pipelining */
 #endif
 #ifndef DISABLE_PRDR
@@ -647,11 +652,10 @@ typedef struct address_item {
   unsigned int domain_cache[(MAX_NAMED_LIST * 2)/32];
   unsigned int localpart_cache[(MAX_NAMED_LIST * 2)/32];
   int     mode;                   /* mode for local transporting to a file */
+  int    basic_errno;            /* status after failure */
   int     more_errno;             /* additional error information */
-                                  /* (may need to hold a timestamp) */
-  unsigned int delivery_usec;    /* subsecond part of delivery time */
+  struct timeval delivery_time;   /* time taken to do delivery/attempt */
 
-  short int basic_errno;          /* status after failure */
   unsigned short child_count;     /* number of child addresses */
   short int return_file;          /* fileno of return data file */
   short int special_action;       /* ( used when when deferred or failed */
@@ -724,11 +728,17 @@ typedef struct tree_node {
 /* Structure for holding time-limited data such as DNS returns.
 We use this rather than extending tree_node to avoid wasting
 space for most tree use (variables...) at the cost of complexity
-for the lookups cache */
+for the lookups cache.
+We also store any options used for the lookup. */
 
 typedef struct expiring_data {
-  time_t expiry;                 /* if nonzero, data invalid after this time */
-  void   *ptr;                   /* pointer to data */
+  time_t       expiry;         /* if nonzero, data invalid after this time */
+  const uschar * opts;         /* options, or NULL */
+  union
+    {
+    void  *    ptr;            /* pointer to data */
+    int                val;            /* or integer data */
+    } data;
 } expiring_data;
 
 /* Structure for holding the handle and the cached last lookup for searches.
@@ -809,7 +819,7 @@ typedef struct {
 
 #ifdef SUPPORT_DANE
   BOOL dane:1;                 /* connection must do dane */
-  dns_answer           tlsa_dnsa;
+  dns_answer           tlsa_dnsa;      /* strictly, this should use tainted mem */
 #endif
 } smtp_connect_args;
 
@@ -881,9 +891,10 @@ typedef struct namedlist_cacheblock {
 /* Structure for holding data for an entry in a named list */
 
 typedef struct namedlist_block {
-  const uschar *string;              /* the list string */
-  namedlist_cacheblock *cache_data;  /* cached domain_data or localpart_data */
-  int number;                        /* the number of the list for caching */
+  const uschar *string;                        /* the list string */
+  namedlist_cacheblock *cache_data;    /* cached domain_data or localpart_data */
+  short                number;                 /* the number of the list for caching */
+  BOOL         hide;                   /* -bP does not display value */
 } namedlist_block;
 
 /* Structures for Access Control Lists */