CHUNKING_LAST} chunking_state_t;
typedef enum { TFO_NOT_USED = 0,
- TFO_ATTEMPTED,
- TFO_USED } tfo_state_t;
+ TFO_ATTEMPTED_NODATA,
+ TFO_ATTEMPTED_DATA,
+ TFO_USED_NODATA,
+ TFO_USED_DATA } tfo_state_t;
/* Structure for holding information about a host for use mainly by routers,
but also used when checking lists of hosts and when transporting. Looking up
BOOL retry_use_local_part; /* Just what it says */
BOOL same_domain_copy_routing; /* TRUE => copy routing for same domain */
BOOL self_rewrite; /* TRUE to rewrite headers if making local */
+ uschar *set; /* Variable = value to set; list */
BOOL suffix_optional; /* As it says */
BOOL verify_only; /* Skip this router if not verifying */
BOOL verify_recipient; /* Use this router when verifying a recipient*/
int port;
BOOL v6_include_v4; /* Used in the daemon */
uschar address[46];
+ uschar * log; /* portion of "listening on" log line */
} ip_address_item;
/* Structure for chaining together arbitrary strings. */
uschar *errors_address; /* where to send errors (NULL => sender) */
header_line *extra_headers; /* additional headers */
uschar *remove_headers; /* list of those to remove */
+ 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;
uschar *self_hostname; /* after self=pass */
uschar *shadow_message; /* info about shadow transporting */
-#ifdef SUPPORT_TLS
+#ifndef DISABLE_TLS
uschar *cipher; /* Cipher used for transport */
void *ourcert; /* Certificate offered to peer, binary */
void *peercert; /* Certificate from peer, binary */
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 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
+ BOOL af_early_pipe:1; /* delivery used connect-time pipelining */
+#endif
#ifndef DISABLE_PRDR
BOOL af_prdr_used:1; /* delivery used SMTP PRDR */
#endif
#endif
#ifdef SUPPORT_I18N
BOOL af_utf8_downcvt:1; /* downconvert was done for delivery */
+#endif
+#ifdef EXPERIMENTAL_TLS_RESUME
+ BOOL af_tls_resume:1; /* TLS used a resumed session */
#endif
} flags;
typedef struct expiring_data {
time_t expiry; /* if nonzero, data invalid after this time */
- void *ptr; /* pointer to data */
+ 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.
unsigned int length;
} sha1;
+/* Information for making an smtp connection */
+typedef struct {
+ transport_instance * tblock;
+ void * ob; /* smtp_transport_options_block * */
+ host_item * host;
+ int host_af;
+ uschar * interface;
+
+#ifdef SUPPORT_DANE
+ BOOL dane:1; /* connection must do dane */
+ dns_answer tlsa_dnsa; /* strictly, this should use tainted mem */
+#endif
+} smtp_connect_args;
+
/* A client-initiated connection. If TLS, the second element is non-NULL */
typedef struct {
int sock;
BOOL authenticating; /* TRUE when authenticating */
uschar *ptr; /* current position in the buffer */
uschar *buffer; /* the buffer itself */
+
+ smtp_connect_args * conn_args; /* to make connection, if not yet made */
} smtp_outblock;
/* Structure to hold information about the source of redirection information */
/* Structures for Access Control Lists */
typedef struct acl_condition_block {
- struct acl_condition_block *next;
- uschar *arg;
- int type;
+ struct acl_condition_block * next;
+ uschar * arg;
+ int type;
union {
- BOOL negated;
- uschar *varname;
+ BOOL negated;
+ uschar * varname;
} u;
} acl_condition_block;
typedef struct acl_block {
- struct acl_block *next;
- acl_condition_block *condition;
- int verb;
+ struct acl_block * next;
+ acl_condition_block * condition;
+ int verb;
+ int srcline;
+ const uschar * srcfile;
} acl_block;
/* smtp transport calc outbound_ip */