* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2015 */
+/* Copyright (c) University of Cambridge 1995 - 2017 */
/* See the file NOTICE for conditions of use and distribution. */
struct transport_info;
struct router_info;
-/* Structure for remembering macros for the configuration file */
-
-typedef struct macro_item {
- struct macro_item * next;
- BOOL command_line;
- unsigned namelen;
- unsigned replen;
- const uschar * name;
- const uschar * replacement;
-} macro_item;
+/* Growable-string */
+typedef struct gstring {
+ int size; /* Current capacity of string memory */
+ int ptr; /* Offset at which to append further chars */
+ uschar * s; /* The string memory */
+} gstring;
/* Structure for bit tables for debugging and logging */
typedef struct transport_context {
union { /* discriminated by option topt_output_string */
int fd; /* file descriptor to write message to */
- uschar * msg; /* allocated string with written message */
+ gstring * msg; /* allocated string with written message */
} u;
transport_instance * tblock; /* transport */
struct address_item * addr;
/* items below only used with option topt_use_bdat */
tpt_chunk_cmd_cb chunk_cb; /* per-datachunk callback */
void * smtp_context;
-
- /* items below only used with option topt_output_string */
- int msg_size;
- int msg_ptr;
} transport_ctx;
BOOL af_cert_verified:1; /* delivered with verified TLS cert */
BOOL af_pass_message:1; /* pass message in bounces */
BOOL af_bad_reply:1; /* filter could not generate autoreply */
+ BOOL af_tcp_fastopen_conn:1; /* delivery connection used TCP Fast Open */
+ BOOL af_tcp_fastopen:1; /* delivery usefuly used TCP Fast Open */
#ifndef DISABLE_PRDR
BOOL af_prdr_used:1; /* delivery used SMTP PRDR */
#endif
uschar name[1]; /* node name - variable length */
} tree_node;
+typedef struct tree_node_64 {
+ struct tree_node_64 *left; /* pointer to left child */
+ struct tree_node_64 *right; /* pointer to right child */
+ union
+ {
+ void *ptr; /* pointer to data */
+ int val; /* or integer data */
+ } data;
+ uschar balance; /* balancing factor */
+ uschar name[64]; /* node name - bounded length */
+} tree_node_64;
+
+/* Structure for remembering macros for the configuration file */
+
+typedef struct macro_item {
+ BOOL command_line;
+ unsigned namelen;
+ unsigned replen;
+ unsigned m_number;
+ tree_node tnode; /* contains name; ptr indicates val */
+} macro_item;
+
+typedef struct macro_item_64 {
+ BOOL command_line;
+ unsigned namelen;
+ unsigned replen;
+ unsigned m_number;
+ tree_node_64 tnode; /* contains name; ptr indicates val */
+} macro_item_64;
+
+#define tnode_to_mitem(tp) (tp ? (macro_item *) (CS(tp) - offsetof(macro_item, tnode)) : NULL)
+
/* 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
/* DKIM information for transport */
struct ob_dkim {
uschar *dkim_domain;
+ uschar *dkim_identity;
uschar *dkim_private_key;
uschar *dkim_selector;
uschar *dkim_canon;
uschar *dkim_sign_headers;
uschar *dkim_strict;
+ uschar *dkim_hash;
BOOL dot_stuffed;
};