Expanded EXPERIMENTAL_TPDA feature
[exim.git] / src / src / smtp_out.c
index 0fa4ccd4846c8ee722b39822cbdded3f6eeaf215..4920b737129ffbe2cdf3a6e3a5938fb1cab7b747 100644 (file)
@@ -165,13 +165,18 @@ Arguments:
   timeout     timeout value or 0
   keepalive   TRUE to use keepalive
   dscp        DSCP value to assign to socket
+  tpda_event  event expansion
 
 Returns:      connected socket number, or -1 with errno set
 */
 
 int
 smtp_connect(host_item *host, int host_af, int port, uschar *interface,
-  int timeout, BOOL keepalive, const uschar *dscp)
+  int timeout, BOOL keepalive, const uschar *dscp
+#ifdef EXPERIMENTAL_TPDA
+  , uschar * tpda_event
+#endif
+  )
 {
 int on = 1;
 int save_errno = 0;
@@ -198,6 +203,13 @@ HDEBUG(D_transport|D_acl|D_v)
       host->address, port, interface);
   }
 
+#ifdef EXPERIMENTAL_TPDA
+  /*XXX Called from both delivery and verify.  Is that status observable? */
+  deliver_host_address = host->address;
+  deliver_host_port = port;
+  if (tpda_raise_event(tpda_event, US"tcp:connect", NULL) == DEFER) return -1;
+#endif
+
 /* Create the socket */
 
 if ((sock = ip_socket(SOCK_STREAM, host_af)) < 0) return -1;
@@ -352,6 +364,10 @@ if (!string_vformat(big_buffer, big_buffer_size, CS format, ap))
 va_end(ap);
 count = Ustrlen(big_buffer);
 
+if (count > outblock->buffersize)
+  log_write(0, LOG_MAIN|LOG_PANIC_DIE, "overlong write_command in outgoing "
+    "SMTP");
+
 if (count > outblock->buffersize - (outblock->ptr - outblock->buffer))
   {
   rc = outblock->cmd_count;                 /* flush resets */