X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fstructs.h;h=ac3efa587633c0ef66857713401751265e7dc845;hb=fc243e944ec00b59b75f41d07494116f925d58b4;hp=a32a5f9c6332fe1ec15e8368e1210fd3ba4d3c5b;hpb=165acdd1ea3b7399b2279f94c881f8e366efaf71;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/structs.h b/src/src/structs.h index a32a5f9c6..ac3efa587 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2017 */ +/* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -32,6 +32,17 @@ typedef struct gstring { uschar * s; /* The string memory */ } gstring; +/* 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; + /* Structure for bit tables for debugging and logging */ typedef struct bit_table { @@ -54,6 +65,12 @@ typedef enum { CHUNKING_NOT_OFFERED = -1, CHUNKING_ACTIVE, CHUNKING_LAST} chunking_state_t; +typedef enum { TFO_NOT_USED = 0, + 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 host addresses is done using this structure. */ @@ -409,8 +426,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 */ @@ -603,13 +619,18 @@ 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_tcp_fastopen_data:1; /* delivery sent SMTP commands on TCP Fast Open */ + BOOL af_pipelining:1; /* delivery used (traditional) pipelining */ +#ifdef EXPERIMENTAL_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 BOOL af_chunking_used:1; /* delivery used SMTP CHUNKING */ BOOL af_force_command:1; /* force_command in pipe transport */ -#ifdef EXPERIMENTAL_DANE +#ifdef SUPPORT_DANE BOOL af_dane_verified:1; /* TLS cert verify done with DANE */ #endif #ifdef SUPPORT_I18N @@ -694,38 +715,6 @@ typedef struct tree_node { 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 @@ -760,11 +749,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 @@ -801,15 +791,30 @@ md5; typedef struct sha1 { unsigned int H[5]; unsigned int length; - } -sha1; +} 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; +} smtp_connect_args; + +/* 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 */ @@ -821,12 +826,14 @@ 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 */ 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 */ @@ -871,19 +878,21 @@ typedef struct namedlist_block { /* 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 */ @@ -899,7 +908,12 @@ 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 + uschar *arc_signspec; +#endif }; /* End of structs.h */