&`I `& local interface used
&`id `& message id for incoming message
&`K `& CHUNKING extension used
-&`L `& on &`<=`& and &`=>`& lines: PIPELINING extension offered or used
+&`L `& on &`<=`& and &`=>`& lines: PIPELINING extension used
&`M8S `& 8BITMIME status for incoming message
&`P `& on &`<=`& lines: protocol used
&` `& on &`=>`& and &`**`& lines: return path
&` queue_time `& time on queue for one recipient
&` queue_time_overall `& time on queue for whole message
&` pid `& Exim process id
-&` pipelining `& PIPELINING, advertisement on <= lines, use on => lines
+&` pipelining `& PIPELINING use, on <= and => lines
&` proxy `& proxy address on <= and => lines
&` receive_time `& time taken to receive message
&` received_recipients `& recipients on <= lines
&%pid%&: The current process id is added to every log line, in square brackets,
immediately after the time and date.
.next
+.new
.cindex log pipelining
.cindex pipelining "logging outgoing"
&%pipelining%&: A field is added to delivery and accept
log lines when the ESMTP PIPELINING extension was used.
The field is a single "L".
+On accept lines, where PIPELINING was offered but not used by the client,
+the field has a minus appended.
.next
.cindex "log" "queue run"
.cindex "queue runner" "logging"
BOOL smtp_enforce_sync = TRUE;
FILE *smtp_in = NULL;
BOOL smtp_in_pipelining_advertised = FALSE;
+BOOL smtp_in_pipelining_used = FALSE;
BOOL smtp_input = FALSE;
int smtp_load_reserve = -1;
int smtp_mailcmd_count = 0;
extern BOOL smtp_etrn_serialize; /* Only one at once */
extern FILE *smtp_in; /* Incoming SMTP input file */
extern BOOL smtp_in_pipelining_advertised; /* server advertised PIPELINING */
+extern BOOL smtp_in_pipelining_used; /* server noted client using PIPELINING */
extern int smtp_load_reserve; /* Only from reserved if load > this */
extern int smtp_mailcmd_count; /* Count of MAIL commands */
extern int smtp_max_synprot_errors;/* Max syntax/protocol errors */
if (received_protocol)
g = string_append(g, 2, US" P=", received_protocol);
if (LOGGING(pipelining) && smtp_in_pipelining_advertised)
- g = string_catn(g, US" L", 2);
+ g = string_catn(g, US" L-", smtp_in_pipelining_used ? 2 : 3);
return g;
}
|| sender_host_notsocket || !smtp_in_pipelining_advertised)
return FALSE;
-return !wouldblock_reading();
+if (wouldblock_reading()) return FALSE;
+smtp_in_pipelining_used = TRUE;
+return TRUE;
}
synprot_error_count = unknown_command_count = nonmail_command_count = 0;
smtp_delay_mail = smtp_rlm_base;
auth_advertised = FALSE;
-smtp_in_pipelining_advertised = FALSE;
+smtp_in_pipelining_advertised = smtp_in_pipelining_used = FALSE;
pipelining_enable = TRUE;
sync_cmd_limit = NON_SYNC_CMD_NON_PIPELINING;
smtp_exit_function_called = FALSE; /* For avoiding loop in not-quit exit */
# Exim test configuration 0216
SERVER=
+HAP=
.include DIR/aux-var/std_conf_prefix
hosts = 127.0.0.1
port = PORT_D
max_rcpt = 0
+ HAP
# ----- Retry -----
1999-03-02 09:44:33 10HmaX-0005vi-00 -> a498@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 OK id=10HmaY-0005vi-00"
1999-03-02 09:44:33 10HmaX-0005vi-00 -> a499@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 OK id=10HmaY-0005vi-00"
1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => b@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmbA-0005vi-00"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
******** SERVER ********
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225
1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp L S=sss id=E10HmaX-0005vi-00@myhost.test.ex
+1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp L- S=sss id=E10HmaZ-0005vi-00@myhost.test.ex
****
exim -M $msg1
****
+#
+#
+# Try to spot, in logging, offer but no uptake of PIPELINING
+exim b@test.ex
+testing
+****
+exim -DHAP=hosts_avoid_pipelining=* -M $msg2
+****
+#
+#
killdaemon
no_msglog_check