1 /*************************************************
2 * Exim - an Internet mail transport agent *
3 *************************************************/
5 /* Copyright (c) University of Cambridge 1995 - 2018 */
6 /* Copyright (c) The Exim Maintainers 2020 */
7 /* See the file NOTICE for conditions of use and distribution. */
9 #define DELIVER_BUFFER_SIZE 4096
12 #define PENDING_DEFER (PENDING + DEFER)
13 #define PENDING_OK (PENDING + OK)
17 /* Flags structure for validity of TLS configuration */
20 BOOL conn_certs:1; /* certificates etc. loaded */
21 BOOL cabundle:1; /* CA certificates loaded */
22 BOOL crl:1; /* CRL loaded */
23 BOOL pri_string:1; /* cipher priority-string cache loaded */
24 BOOL dh:1; /* Diffie-Helman params loaded */
25 BOOL ecdh:1; /* EC Diffie-Helman params loaded */
27 BOOL ca_rdn_emulate:1; /* do not advertise usable-cert list */
28 BOOL ocsp_hook:1; /* need hshake callback on session */
30 void * libdata0; /* library-dependent preloaded data */
31 void * libdata1; /* library-dependent preloaded data */
36 /* Private structure for the private options and other private data. */
40 uschar *fallback_hosts;
42 host_item *fallback_hostlist;
43 uschar *authenticated_sender;
49 uschar *serialize_hosts;
50 uschar *hosts_try_auth;
51 uschar *hosts_require_auth;
52 uschar *hosts_try_chunking;
54 uschar *hosts_try_dane;
55 uschar *hosts_require_dane;
56 uschar *dane_require_tls_ciphers;
58 uschar *hosts_try_fastopen;
60 uschar *hosts_try_prdr;
63 uschar *hosts_request_ocsp;
64 uschar *hosts_require_ocsp;
66 uschar *hosts_require_tls;
67 uschar *hosts_avoid_tls;
68 uschar *hosts_verify_avoid_tls;
69 uschar *hosts_avoid_pipelining;
70 #ifndef DISABLE_PIPE_CONNECT
71 uschar *hosts_pipe_connect;
73 uschar *hosts_avoid_esmtp;
75 uschar *hosts_nopass_tls;
76 uschar *hosts_noproxy_tls;
84 int hosts_max_try_hardlimit;
85 int message_linelength_limit;
86 BOOL address_retry_include_sender;
88 BOOL authenticated_sender_force;
90 BOOL dns_qualify_single;
91 BOOL dns_search_parents;
92 dnssec_domains dnssec;
93 BOOL delay_after_cutoff;
97 BOOL lmtp_ignore_quota;
98 uschar *expand_retry_include_ip_address;
99 BOOL retry_include_ip_address;
104 uschar *tls_certificate;
106 uschar *tls_privatekey;
107 uschar *tls_require_ciphers;
108 # ifndef DISABLE_TLS_RESUME
109 uschar *tls_resumption_hosts;
111 const uschar *tls_sni;
112 uschar *tls_verify_certificates;
114 BOOL tls_tempfail_tryclear;
115 uschar *tls_verify_hosts;
116 uschar *tls_try_verify_hosts;
117 uschar *tls_verify_cert_hostnames;
120 uschar *utf8_downconvert;
125 #ifdef EXPERIMENTAL_ARC
129 exim_tlslib_state tls_preload;
131 } smtp_transport_options_block;
133 #define SOB (smtp_transport_options_block *)
136 /* smtp connect context */
139 address_item * addrlist;
141 smtp_connect_args conn_args;
149 #ifndef DISABLE_PIPE_CONNECT
150 BOOL early_pipe_ok:1;
151 BOOL early_pipe_active:1;
155 BOOL pipelining_used:1;
162 BOOL dsn_all_lasthop:1;
163 #if !defined(DISABLE_TLS) && defined(SUPPORT_DANE)
164 BOOL dane_required:1;
166 #ifndef DISABLE_PIPE_CONNECT
167 BOOL pending_BANNER:1;
174 BOOL completed_addr:1;
181 unsigned peer_offered;
182 unsigned avoid_option;
185 #ifdef EXPERIMENTAL_DSN_INFO
186 uschar * smtp_greeting;
187 uschar * helo_response;
189 #ifndef DISABLE_PIPE_CONNECT
190 ehlo_resp_precis ehlo_resp;
193 struct timeval delivery_start;
194 address_item * first_addr;
195 address_item * next_addr;
196 address_item * sync_addr;
198 client_conn_ctx cctx;
199 smtp_inblock inblock;
200 smtp_outblock outblock;
201 uschar buffer[DELIVER_BUFFER_SIZE];
202 uschar inbuffer[4096];
203 uschar outbuffer[4096];
206 extern int smtp_setup_conn(smtp_context *, BOOL);
207 extern int smtp_write_mail_and_rcpt_cmds(smtp_context *, int *);
208 extern int smtp_reap_early_pipe(smtp_context *, int *);
211 /* Data for reading the private options. */
213 extern optionlist smtp_transport_options[];
214 extern int smtp_transport_options_count;
216 /* Block containing default values. */
218 extern smtp_transport_options_block smtp_transport_option_defaults;
220 /* The main, init, and closedown entry points for the transport */
222 extern BOOL smtp_transport_entry(transport_instance *, address_item *);
223 extern void smtp_transport_init(transport_instance *);
224 extern void smtp_transport_closedown(transport_instance *);
229 extern int socks_sock_connect(host_item *, int, int, uschar *,
230 transport_instance *, int);
233 /* End of transports/smtp.h */