X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/74f1a42304ce056cf979d22fb970faae161e3ab2..b536a578fbabdc9d39da53d54a8d7700ba537431:/src/src/smtp_out.c?ds=sidebyside diff --git a/src/src/smtp_out.c b/src/src/smtp_out.c index 70aaef3e3..c5eafbc57 100644 --- a/src/src/smtp_out.c +++ b/src/src/smtp_out.c @@ -45,7 +45,7 @@ if (!istring) return TRUE; 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); @@ -149,7 +149,6 @@ struct tcp_info tinfo; 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 @@ -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. */ - 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); - tcp_out_fastopen = 2; + tcp_out_fastopen = TFO_USED; } 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 */ - 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"); - tcp_out_fastopen = 0; + tcp_out_fastopen = TFO_NOT_USED; } break; -#endif - } - } + default: break; /* compiler quietening */ +# endif + } # 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 */ @@ -264,7 +264,7 @@ requested some early-data then include that in the TFO request. */ 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 @@ -444,7 +444,7 @@ return TRUE; 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. @@ -457,8 +457,9 @@ Returns: 0 if command added to pipelining buffer, with nothing transmitted */ 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; @@ -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: - 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 @@ -633,9 +635,10 @@ Returns: TRUE if a valid, non-error response was received; else FALSE */ 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) { +smtp_inblock * inblock = &((smtp_context *)sx)->inblock; uschar *ptr = buffer; int count;