From 87598349556f732fd4593d6c2e656e5e3f2a6827 Mon Sep 17 00:00:00 2001 From: Tobias Eidelpes Date: Wed, 18 Nov 2020 11:34:52 +0100 Subject: [PATCH] Fix bug where two recipients do not both receive the message --- .../java/dslab/mailbox/DMTPConnection.java | 27 +++++++++++++------ src/main/java/dslab/mailbox/DMTPListener.java | 12 ++++++--- .../java/dslab/mailbox/MailboxServer.java | 2 +- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/dslab/mailbox/DMTPConnection.java b/src/main/java/dslab/mailbox/DMTPConnection.java index d99ff27..aca00a8 100644 --- a/src/main/java/dslab/mailbox/DMTPConnection.java +++ b/src/main/java/dslab/mailbox/DMTPConnection.java @@ -22,11 +22,16 @@ public class DMTPConnection implements Runnable { private Message msg = new Message(); - private final ConcurrentHashMap> messageStorage; + private final String domain; - public DMTPConnection(Socket connection, ConcurrentHashMap> messageStorage) { + private final ConcurrentHashMap> messageStorage; + private final ConcurrentHashMap userStorage; + + public DMTPConnection(Socket connection, ConcurrentHashMap> messageStorage, ConcurrentHashMap userStorage, String domain) { this.socket = connection; this.messageStorage = messageStorage; + this.userStorage = userStorage; + this.domain = domain; } @Override @@ -69,16 +74,22 @@ public class DMTPConnection implements Runnable { int count = 0; try { for (String emailAddress : emailAddresses) { + logger.info("Current email address in msg.getTo(): " + emailAddress); Email add = new Email(emailAddress); - if (!this.messageStorage.containsKey(add)) { - throw new UnknownRecipientException("error unknown recipient " + add.toString()); - } else { - msg.addTo(add); - count++; + if (this.domain.equals(add.getDomain())) { + logger.info("Address " + emailAddress + " belongs to this domain " + this.domain); + if (!this.userStorage.containsKey(add.getUsername())) { + logger.info("Our userStorage in domain " + this.domain + " does not contain user " + add.getUsername()); + out.println("error unknown recipient " + add.toString()); + } else { + logger.info("Address " + add.toString() + " belongs to this domain and user exists. Adding address to msg.To() field"); + msg.addTo(add); + count++; + } } } out.println("ok " + count); - } catch (MalformedInputException | UnknownRecipientException e) { + } catch (MalformedInputException e) { out.println(e.getMessage()); } } else if ("from".equals(userInput.split("\\s+")[0])) { diff --git a/src/main/java/dslab/mailbox/DMTPListener.java b/src/main/java/dslab/mailbox/DMTPListener.java index f17c02c..7db83fa 100644 --- a/src/main/java/dslab/mailbox/DMTPListener.java +++ b/src/main/java/dslab/mailbox/DMTPListener.java @@ -21,11 +21,15 @@ public class DMTPListener extends Thread { private final Logger logger = Logger.getLogger(DMTPListener.class.getName()); private final ArrayList clients = new ArrayList<>(); private final ExecutorService executorService = Executors.newCachedThreadPool(); - private final ConcurrentHashMap> storage; + private final ConcurrentHashMap> messageStorage; + private final ConcurrentHashMap userStorage; + private final String domain; - public DMTPListener(ServerSocket serverSocket, ConcurrentHashMap> storage) { + public DMTPListener(ServerSocket serverSocket, ConcurrentHashMap> storage, ConcurrentHashMap userStorage, String domain) { this.serverSocket = serverSocket; - this.storage = storage; + this.messageStorage = storage; + this.userStorage = userStorage; + this.domain = domain; } @Override @@ -35,7 +39,7 @@ public class DMTPListener extends Thread { try { Socket s = serverSocket.accept(); logger.fine("Processing incoming socket " + s.toString()); - DMTPConnection dmtpConnection = new DMTPConnection(s, storage); + DMTPConnection dmtpConnection = new DMTPConnection(s, messageStorage, userStorage, domain); clients.add(dmtpConnection); executorService.submit(dmtpConnection); } catch (InterruptedIOException | SocketException e) { diff --git a/src/main/java/dslab/mailbox/MailboxServer.java b/src/main/java/dslab/mailbox/MailboxServer.java index 29b1119..37adfe7 100644 --- a/src/main/java/dslab/mailbox/MailboxServer.java +++ b/src/main/java/dslab/mailbox/MailboxServer.java @@ -73,7 +73,7 @@ public class MailboxServer implements IMailboxServer, Runnable { e.printStackTrace(); shutdown(); } - this.dmtpListener = new DMTPListener(this.dmtpServerSocket, this.messageStorage); + this.dmtpListener = new DMTPListener(this.dmtpServerSocket, this.messageStorage, this.userStorage, this.domain); this.dmtpListener.start(); this.dmapListener = new DMAPListener(this.dmapServerSocket, this.messageStorage, this.userStorage); this.dmapListener.start();