MacOS: TCP Fast Open
[exim.git] / src / src / smtp_out.c
index 70aaef3e346061bb6e32b1acce55d362c14e83c2..c5eafbc57499f003bdd66742925c73bea293db62 100644 (file)
@@ -45,7 +45,7 @@ if (!istring) return TRUE;
 
 if (!(expint = expand_string(istring)))
   {
 
 if (!(expint = expand_string(istring)))
   {
-  if (expand_string_forcedfail) return TRUE;
+  if (f.expand_string_forcedfail) return TRUE;
   addr->transport_return = PANIC;
   addr->message = string_sprintf("failed to expand \"interface\" "
       "option for %s: %s", msg, expand_string_message);
   addr->transport_return = PANIC;
   addr->message = string_sprintf("failed to expand \"interface\" "
       "option for %s: %s", msg, expand_string_message);
@@ -149,7 +149,6 @@ struct tcp_info tinfo;
 socklen_t len = sizeof(tinfo);
 
 if (getsockopt(sock, IPPROTO_TCP, TCP_INFO, &tinfo, &len) == 0)
 socklen_t len = sizeof(tinfo);
 
 if (getsockopt(sock, IPPROTO_TCP, TCP_INFO, &tinfo, &len) == 0)
-  {
   switch (tcp_out_fastopen)
     {
       /* This is a somewhat dubious detection method; totally undocumented so likely
   switch (tcp_out_fastopen)
     {
       /* This is a somewhat dubious detection method; totally undocumented so likely
@@ -163,39 +162,40 @@ if (getsockopt(sock, IPPROTO_TCP, TCP_INFO, &tinfo, &len) == 0)
        '# echo -n "00000000-00000000-00000000-0000000" >/proc/sys/net/ipv4/tcp_fastopen_key'
       The kernel seems to be counting unack'd packets. */
 
        '# echo -n "00000000-00000000-00000000-0000000" >/proc/sys/net/ipv4/tcp_fastopen_key'
       The kernel seems to be counting unack'd packets. */
 
-    case 1:
+    case TFO_ATTEMPTED:
       if (tinfo.tcpi_unacked > 1)
        {
        DEBUG(D_transport|D_v)
          debug_printf("TCP_FASTOPEN tcpi_unacked %d\n", tinfo.tcpi_unacked);
       if (tinfo.tcpi_unacked > 1)
        {
        DEBUG(D_transport|D_v)
          debug_printf("TCP_FASTOPEN tcpi_unacked %d\n", tinfo.tcpi_unacked);
-       tcp_out_fastopen = 2;
+       tcp_out_fastopen = TFO_USED;
        }
       break;
 
        }
       break;
 
-#ifdef notdef          /* This seems to always fire, meaning that we cannot tell
+#  ifdef notdef                /* This seems to always fire, meaning that we cannot tell
                        whether the server accepted data we sent.  For now assume
                        that it did. */
 
       /* If there was data-on-SYN but we had to retrasnmit it, declare no TFO */
 
                        whether the server accepted data we sent.  For now assume
                        that it did. */
 
       /* If there was data-on-SYN but we had to retrasnmit it, declare no TFO */
 
-    case 2:
+    case TFO_USED:
       if (!(tinfo.tcpi_options & TCPI_OPT_SYN_DATA))
        {
        DEBUG(D_transport|D_v) debug_printf("TFO: had to retransmit\n");
       if (!(tinfo.tcpi_options & TCPI_OPT_SYN_DATA))
        {
        DEBUG(D_transport|D_v) debug_printf("TFO: had to retransmit\n");
-       tcp_out_fastopen = 0;
+       tcp_out_fastopen = TFO_NOT_USED;
        }
       break;
        }
       break;
-#endif
-    }
 
 
-  }
+  default: break;      /* compiler quietening */
+#  endif
+    }
 # endif
 }
 #endif
 
 
 /* Arguments as for smtp_connect(), plus
 # endif
 }
 #endif
 
 
 /* Arguments as for smtp_connect(), plus
-  early_data   if non-NULL, data to be sent - preferably in the TCP SYN segment
+  early_data   if non-NULL, idenmpotent data to be sent -
+               preferably in the TCP SYN segment
 
 Returns:      connected socket number, or -1 with errno set
 */
 
 Returns:      connected socket number, or -1 with errno set
 */
@@ -264,7 +264,7 @@ requested some early-data then include that in the TFO request. */
 else
   {
 #ifdef TCP_FASTOPEN
 else
   {
 #ifdef TCP_FASTOPEN
-  if (verify_check_given_host(&ob->hosts_try_fastopen, host) == OK)
+  if (verify_check_given_host(CUSS &ob->hosts_try_fastopen, host) == OK)
     fastopen_blob = early_data ? early_data : &tcp_fastopen_nodata;
 #endif
 
     fastopen_blob = early_data ? early_data : &tcp_fastopen_nodata;
 #endif
 
@@ -444,7 +444,7 @@ return TRUE;
 any error message.
 
 Arguments:
 any error message.
 
 Arguments:
-  outblock   contains buffer for pipelining, and socket
+  sx        SMTP connection, contains buffer for pipelining, and socket
   mode       buffer, write-with-more-likely, write
   format     a format, starting with one of
              of HELO, MAIL FROM, RCPT TO, DATA, ".", or QUIT.
   mode       buffer, write-with-more-likely, write
   format     a format, starting with one of
              of HELO, MAIL FROM, RCPT TO, DATA, ".", or QUIT.
@@ -457,8 +457,9 @@ Returns:     0 if command added to pipelining buffer, with nothing transmitted
 */
 
 int
 */
 
 int
-smtp_write_command(smtp_outblock * outblock, int mode, const char *format, ...)
+smtp_write_command(void * sx, int mode, const char *format, ...)
 {
 {
+smtp_outblock * outblock = &((smtp_context *)sx)->outblock;
 int count;
 int rc = 0;
 va_list ap;
 int count;
 int rc = 0;
 va_list ap;
@@ -623,7 +624,8 @@ also returned after a reading error. In this case buffer[0] will be zero, and
 the error code will be in errno.
 
 Arguments:
 the error code will be in errno.
 
 Arguments:
-  inblock   the SMTP input block (contains holding buffer, socket, etc.)
+  sx        the SMTP connection (contains input block with holding buffer,
+               socket, etc.)
   buffer    where to put the response
   size      the size of the buffer
   okdigit   the expected first digit of the response
   buffer    where to put the response
   size      the size of the buffer
   okdigit   the expected first digit of the response
@@ -633,9 +635,10 @@ Returns:    TRUE if a valid, non-error response was received; else FALSE
 */
 
 BOOL
 */
 
 BOOL
-smtp_read_response(smtp_inblock *inblock, uschar *buffer, int size, int okdigit,
+smtp_read_response(void * sx, uschar *buffer, int size, int okdigit,
    int timeout)
 {
    int timeout)
 {
+smtp_inblock * inblock = &((smtp_context *)sx)->inblock;
 uschar *ptr = buffer;
 int count;
 
 uschar *ptr = buffer;
 int count;