Unbreak no-TLS build
[exim.git] / src / src / transports / smtp.h
index d55dc5961c6f121e78f29f8bbbad49a7b6028b6a..fc8a6b12687b00259b6dd17b6a2530e9fafa4876 100644 (file)
@@ -2,9 +2,10 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
+/* Copyright (c) The Exim Maintainers 2020 - 2022 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
 /* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 
 #define DELIVER_BUFFER_SIZE 4096
 
@@ -48,6 +49,7 @@ typedef struct {
   uschar       *dscp;
   uschar       *serialize_hosts;
   uschar       *hosts_try_auth;
+  uschar       *hosts_require_alpn;
   uschar       *hosts_require_auth;
   uschar       *hosts_try_chunking;
 #ifdef SUPPORT_DANE
@@ -82,7 +84,7 @@ typedef struct {
   int          size_addition;
   int          hosts_max_try;
   int          hosts_max_try_hardlimit;
-  int                  message_linelength_limit;
+  int          message_linelength_limit;
   BOOL         address_retry_include_sender;
   BOOL         allow_localhost;
   BOOL         authenticated_sender_force;
@@ -101,11 +103,14 @@ typedef struct {
   uschar       *socks_proxy;
 #endif
 #ifndef DISABLE_TLS
+  uschar       *tls_alpn;
   uschar       *tls_certificate;
   uschar       *tls_crl;
   uschar       *tls_privatekey;
   uschar       *tls_require_ciphers;
 # ifndef DISABLE_TLS_RESUME
+#  define HNE_DEFAULT US"${if and {{match{$host}{.outlook.com\\$}} {match{$item}{\\N^250-([\\w.]+)\\s\\N}}} {$1}}"
+  uschar       *host_name_extract;
   uschar       *tls_resumption_hosts;
 # endif
   const uschar *tls_sni;
@@ -135,7 +140,7 @@ typedef struct {
 
 /* smtp connect context */
 typedef struct {
-  uschar *             from_addr;
+  const uschar *       from_addr;
   address_item *       addrlist;
 
   smtp_connect_args    conn_args;
@@ -171,14 +176,25 @@ typedef struct {
   BOOL pending_BDAT:1;
   BOOL RCPT_452:1;
   BOOL good_RCPT:1;
+#ifndef DISABLE_ESMTP_LIMITS
+  BOOL single_rcpt_domain:1;
+#endif
   BOOL completed_addr:1;
   BOOL send_rset:1;
   BOOL send_quit:1;
+  BOOL send_tlsclose:1;
 
+  unsigned     peer_offered;
+#ifndef DISABLE_ESMTP_LIMITS
+  unsigned     peer_limit_mail;
+  unsigned     peer_limit_rcpt;
+  unsigned     peer_limit_rcptdom;
+#endif
+
+  unsigned     max_mail;
   int          max_rcpt;
   int          cmd_count;
 
-  unsigned     peer_offered;
   unsigned     avoid_option;
   uschar *     igquotstr;
   uschar *     helo_data;
@@ -187,6 +203,11 @@ typedef struct {
   uschar *     helo_response;
 #endif
 #ifndef DISABLE_PIPE_CONNECT
+  /* Info about the EHLO response stored to / retrieved from cache.  When
+  operating early-pipe, we use the cached values.  For each of plaintext and
+  crypted we store bitmaps for ESMTP features and AUTH methods.  If the LIMITS
+  extension is built and usable them at least one of the limits values cached
+  is nonzero, and we use the values to constrain the connection. */
   ehlo_resp_precis     ehlo_resp;
 #endif
 
@@ -204,7 +225,7 @@ typedef struct {
 } smtp_context;
 
 extern int smtp_setup_conn(smtp_context *, BOOL);
-extern int smtp_write_mail_and_rcpt_cmds(smtp_context *, int *);
+extern sw_mrc_t smtp_write_mail_and_rcpt_cmds(smtp_context *, int *);
 extern int smtp_reap_early_pipe(smtp_context *, int *);