This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit deef423282310b32de237bf7dc3186b7f4e55ed5 Author: Benoit Tellier <[email protected]> AuthorDate: Thu May 28 15:56:16 2020 +0700 JAMES-3196 Carry other SMTP context on DATA hooks These hooks are executed on a separate thread thus context is lost --- .../protocols/netty/ProtocolMDCContextFactory.java | 12 ++++++++---- .../protocols/smtp/core/SMTPMDCContextFactory.java | 18 ++++++++++++++---- .../smtpserver/DataLineJamesMessageHookHandler.java | 4 +++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java index 7501530..17a34cc 100644 --- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java +++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java @@ -69,11 +69,15 @@ public interface ProtocolMDCContextFactory { return Optional.ofNullable(o) .filter(object -> object instanceof ProtocolSession) .map(object -> (ProtocolSession) object) - .map(protocolSession -> MDCBuilder.create() - .addContext(MDCBuilder.SESSION_ID, protocolSession.getSessionID()) - .addContext(MDCBuilder.CHARSET, protocolSession.getCharset().displayName()) - .addContext(MDCBuilder.USER, protocolSession.getUsername())) + .map(ProtocolMDCContextFactory::forSession) .orElse(MDCBuilder.create()); } + static MDCBuilder forSession(ProtocolSession protocolSession) { + return MDCBuilder.create() + .addContext(MDCBuilder.SESSION_ID, protocolSession.getSessionID()) + .addContext(MDCBuilder.CHARSET, protocolSession.getCharset().displayName()) + .addContext(MDCBuilder.USER, protocolSession.getUsername()); + } + } diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java index cec99ae..87f7d94 100644 --- a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java +++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java @@ -38,14 +38,24 @@ public class SMTPMDCContextFactory implements ProtocolMDCContextFactory { .build(); } + public static MDCBuilder forSession(SMTPSession smtpSession) { + return MDCBuilder.create() + .addContext(ProtocolMDCContextFactory.forSession(smtpSession)) + .addContext(forSMTPSession(smtpSession)); + } + private MDCBuilder from(Object o) { return Optional.ofNullable(o) .filter(object -> object instanceof SMTPSession) .map(object -> (SMTPSession) object) - .map(protocolSession -> MDCBuilder.create() - .addContext("ehlo", protocolSession.getAttachment(SMTPSession.CURRENT_HELO_NAME, ProtocolSession.State.Connection)) - .addContext("sender", protocolSession.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction)) - .addContext("recipients", protocolSession.getAttachment(SMTPSession.RCPT_LIST, ProtocolSession.State.Transaction))) + .map(SMTPMDCContextFactory::forSMTPSession) .orElse(MDCBuilder.create()); } + + private static MDCBuilder forSMTPSession(SMTPSession smtpSession) { + return MDCBuilder.create() + .addContext("ehlo", smtpSession.getAttachment(SMTPSession.CURRENT_HELO_NAME, ProtocolSession.State.Connection)) + .addContext("sender", smtpSession.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction)) + .addContext("recipients", smtpSession.getAttachment(SMTPSession.RCPT_LIST, ProtocolSession.State.Transaction)); + } } diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java index fe3ac7c..4da0261 100644 --- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java +++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java @@ -19,6 +19,7 @@ package org.apache.james.smtpserver; +import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -42,6 +43,7 @@ import org.apache.james.protocols.smtp.SMTPRetCode; import org.apache.james.protocols.smtp.SMTPSession; import org.apache.james.protocols.smtp.core.AbstractHookableCmdHandler; import org.apache.james.protocols.smtp.core.DataLineFilter; +import org.apache.james.protocols.smtp.core.SMTPMDCContextFactory; import org.apache.james.protocols.smtp.dsn.DSNStatus; import org.apache.james.protocols.smtp.hook.HookResult; import org.apache.james.protocols.smtp.hook.HookResultHook; @@ -77,7 +79,7 @@ public class DataLineJamesMessageHookHandler implements DataLineFilter, Extensib MimeMessageInputStreamSource mmiss = session.getAttachment(SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE, State.Transaction) .orElseThrow(() -> new RuntimeException("'" + SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE.asString() + "' has not been filled.")); - try { + try (Closeable closeable = SMTPMDCContextFactory.forSession(session).build()) { OutputStream out = mmiss.getWritableOutputStream(); // 46 is "." --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
