X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/617d39327e65b7fccc41a12b4a5e2940d6327c9f..75c121f07a85b4029458f11b113a4655114af126:/src/src/structs.h diff --git a/src/src/structs.h b/src/src/structs.h index 98c95010d..48f475a89 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -65,6 +65,10 @@ typedef enum { CHUNKING_NOT_OFFERED = -1, CHUNKING_ACTIVE, CHUNKING_LAST} chunking_state_t; +typedef enum { TFO_NOT_USED = 0, + TFO_ATTEMPTED, + TFO_USED } 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 host addresses is done using this structure. */ @@ -420,8 +424,7 @@ typedef struct auth_info { uschar *); /* rest of AUTH command */ int (*clientcode)( /* client function */ struct auth_instance *, - struct smtp_inblock *, /* socket and input buffer */ - struct smtp_outblock *, /* socket and output buffer */ + void *, /* smtp conn, with socket, output and input buffers */ int, /* command timeout */ uschar *, /* buffer for reading response */ int); /* sizeof buffer */ @@ -614,7 +617,8 @@ typedef struct address_item { 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 */ + BOOL af_tcp_fastopen:1; /* delivery usefully used TCP Fast Open */ + BOOL af_pipelining:1; /* delivery used (traditional) pipelining */ #ifndef DISABLE_PRDR BOOL af_prdr_used:1; /* delivery used SMTP PRDR */ #endif @@ -739,11 +743,12 @@ typedef struct { const uschar *data; /* pointer to data */ } dns_record; -/* Structure for holding the result of a DNS query. */ +/* Structure for holding the result of a DNS query. A touch over +64k big, so take care to release as soon as possible. */ typedef struct { int answerlen; /* length of the answer */ - uschar answer[MAXPACKET]; /* the answer itself */ + uschar answer[NS_MAXMSG]; /* the answer itself */ } dns_answer; /* Structure for holding the intermediate data while scanning a DNS answer @@ -780,15 +785,21 @@ md5; typedef struct sha1 { unsigned int H[5]; unsigned int length; - } -sha1; +} sha1; + +/* A client-initiated connection. If TLS, the second element is non-NULL */ +typedef struct { + int sock; + void * tls_ctx; +} client_conn_ctx; + /* Structure used to hold incoming packets of SMTP responses for a specific socket. The packets which may contain multiple lines (and in some cases, multiple responses). */ typedef struct smtp_inblock { - int sock; /* the socket */ + client_conn_ctx * cctx; /* the connection */ int buffersize; /* the size of the buffer */ uschar *ptr; /* current position in the buffer */ uschar *ptrend; /* end of data in the buffer */ @@ -800,7 +811,7 @@ specific socket. The packets which may contain multiple lines when pipelining is in use. */ typedef struct smtp_outblock { - int sock; /* the socket */ + client_conn_ctx * cctx; /* the connection */ int cmd_count; /* count of buffered commands */ int buffersize; /* the size of the buffer */ BOOL authenticating; /* TRUE when authenticating */ @@ -878,6 +889,7 @@ struct ob_dkim { uschar *dkim_sign_headers; uschar *dkim_strict; uschar *dkim_hash; + uschar *dkim_timestamps; BOOL dot_stuffed; BOOL force_bodyhash; #ifdef EXPERIMENTAL_ARC