You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rc...@apache.org on 2020/06/08 03:12:26 UTC
[james-project] 05/16: JAMES-3196 Carry other SMTP context on DATA
hooks
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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org