package mireka.smtp.server; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import mireka.MailData; import mireka.address.Recipient; import mireka.destination.Destination; import mireka.filter.MailTransaction; import mireka.filter.RecipientContext; import org.subethamail.smtp.MessageContext; public class MailTransactionImpl implements MailTransaction { private final Map<String, Object> attributes = new HashMap<String, Object>(); public final MessageContext messageContext; public String from; public List<RecipientContext> recipientContexts = new ArrayList<RecipientContext>(); private MailData data; /** * Contains only accepted recipients. */ private final Map<Recipient, Destination> recipientDestinationMap = new HashMap<Recipient, Destination>(); public MailTransactionImpl(MessageContext messageContext) { super(); this.messageContext = messageContext; } /** * it resets the stream if necessary before returning it */ @Override public MailData getData() { return data; } public void setData(MailData data) { this.data = data; } @Override public void replaceData(MailData mailData) { this.data = mailData; } @Override public MessageContext getMessageContext() { return messageContext; } @Override public String getFrom() { return from; } @Override public List<RecipientContext> getAcceptedRecipientContexts() { return recipientContexts; } @Override public InetAddress getRemoteInetAddress() { return ((InetSocketAddress) messageContext.getRemoteAddress()) .getAddress(); } @Override public void setAttribute(String name, Object value) { attributes.put(name, value); } @Override public Object getAttribute(String name) { return attributes.get(name); } public void addDestinationForRecipient(Recipient recipient, Destination destination) { recipientDestinationMap.put(recipient, destination); } }