X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/7eb6c37c5084760c1d1469bd4be652b479a8df55..875512a36119423217802de1f79350e7fce1cd9b:/src/src/transports/smtp.h diff --git a/src/src/transports/smtp.h b/src/src/transports/smtp.h index 84fb9f50c..88b608bcc 100644 --- a/src/src/transports/smtp.h +++ b/src/src/transports/smtp.h @@ -2,9 +2,16 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2014 */ +/* Copyright (c) University of Cambridge 1995 - 2017 */ /* See the file NOTICE for conditions of use and distribution. */ +#define DELIVER_BUFFER_SIZE 4096 + +#define PENDING 256 +#define PENDING_DEFER (PENDING + DEFER) +#define PENDING_OK (PENDING + OK) + + /* Private structure for the private options and other private data. */ typedef struct { @@ -21,10 +28,12 @@ typedef struct { uschar *serialize_hosts; uschar *hosts_try_auth; uschar *hosts_require_auth; + uschar *hosts_try_chunking; #ifdef EXPERIMENTAL_DANE uschar *hosts_try_dane; uschar *hosts_require_dane; #endif + uschar *hosts_try_fastopen; #ifndef DISABLE_PRDR uschar *hosts_try_prdr; #endif @@ -37,7 +46,10 @@ typedef struct { uschar *hosts_verify_avoid_tls; uschar *hosts_avoid_pipelining; uschar *hosts_avoid_esmtp; +#ifdef SUPPORT_TLS uschar *hosts_nopass_tls; + uschar *hosts_noproxy_tls; +#endif int command_timeout; int connect_timeout; int data_timeout; @@ -51,8 +63,7 @@ typedef struct { BOOL gethostbyname; BOOL dns_qualify_single; BOOL dns_search_parents; - uschar *dnssec_request_domains; - uschar *dnssec_require_domains; + dnssec_domains dnssec; BOOL delay_after_cutoff; BOOL hosts_override; BOOL hosts_randomize; @@ -60,7 +71,7 @@ typedef struct { BOOL lmtp_ignore_quota; uschar *expand_retry_include_ip_address; BOOL retry_include_ip_address; -#ifdef EXPERIMENTAL_SOCKS +#ifdef SUPPORT_SOCKS uschar *socks_proxy; #endif #ifdef SUPPORT_TLS @@ -68,9 +79,6 @@ typedef struct { uschar *tls_crl; uschar *tls_privatekey; uschar *tls_require_ciphers; - uschar *gnutls_require_kx; - uschar *gnutls_require_mac; - uschar *gnutls_require_proto; uschar *tls_sni; uschar *tls_verify_certificates; int tls_dh_min_bits; @@ -80,15 +88,73 @@ typedef struct { uschar *tls_verify_cert_hostnames; #endif #ifndef DISABLE_DKIM - uschar *dkim_domain; - uschar *dkim_private_key; - uschar *dkim_selector; - uschar *dkim_canon; - uschar *dkim_sign_headers; - uschar *dkim_strict; + struct ob_dkim dkim; #endif } smtp_transport_options_block; +/* smtp connect context */ +typedef struct { + uschar * from_addr; + address_item * addrlist; + host_item * host; + int host_af; + int port; + uschar * interface; + + BOOL verify:1; + BOOL lmtp:1; + BOOL smtps:1; + BOOL ok:1; + BOOL setting_up:1; + BOOL esmtp:1; + BOOL esmtp_sent:1; +#ifndef DISABLE_PRDR + BOOL prdr_active:1; +#endif +#ifdef SUPPORT_I18N + BOOL utf8_needed:1; +#endif + BOOL dsn_all_lasthop:1; +#if defined(SUPPORT_TLS) && defined(EXPERIMENTAL_DANE) + BOOL dane:1; + BOOL dane_required:1; +#endif + BOOL pending_MAIL:1; + BOOL pending_BDAT:1; + BOOL good_RCPT:1; + BOOL completed_addr:1; + BOOL send_rset:1; + BOOL send_quit:1; + + int max_rcpt; + int cmd_count; + + uschar peer_offered; + uschar * igquotstr; + uschar * helo_data; +#ifdef EXPERIMENTAL_DSN_INFO + uschar * smtp_greeting; + uschar * helo_response; +#endif + + address_item * first_addr; + address_item * next_addr; + address_item * sync_addr; + + smtp_inblock inblock; + smtp_outblock outblock; + uschar buffer[DELIVER_BUFFER_SIZE]; + uschar inbuffer[4096]; + uschar outbuffer[4096]; + + transport_instance * tblock; + smtp_transport_options_block * ob; +} smtp_context; + +extern int smtp_setup_conn(smtp_context *, BOOL); +extern int smtp_write_mail_and_rcpt_cmds(smtp_context *, int *); + + /* Data for reading the private options. */ extern optionlist smtp_transport_options[]; @@ -112,8 +178,8 @@ extern int smtp_auth(uschar *, unsigned, address_item *, host_item *, extern BOOL smtp_mail_auth_str(uschar *, unsigned, address_item *, smtp_transport_options_block *); -#ifdef EXPERMENTAL_SOCKS -extern int socks_sock_connect(host_item, int, int, uschar *, +#ifdef SUPPORT_SOCKS +extern int socks_sock_connect(host_item *, int, int, uschar *, transport_instance *, int); #endif