You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ra...@apache.org on 2019/09/08 16:02:08 UTC
[mina-vysper] branch master updated: XEP-0313 MAM: offline messages
are stored twice
This is an automated email from the ASF dual-hosted git repository.
ralaoui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-vysper.git
The following commit(s) were added to refs/heads/master by this push:
new 3b58965 XEP-0313 MAM: offline messages are stored twice
3b58965 is described below
commit 3b589654326231cfc98ba9352e13dd842f5487b8
Author: RĂ©da Housni Alaoui <re...@gmail.com>
AuthorDate: Sun Sep 8 18:01:59 2019 +0200
XEP-0313 MAM: offline messages are stored twice
---
.../inbound/DeliveringInternalInboundStanzaRelay.java | 5 +----
.../core/im/handler/PresenceAvailabilityHandler.java | 2 +-
.../protocol/worker/AbstractStateAwareProtocolWorker.java | 2 +-
.../xep0313_mam/in_memory/InMemoryMessageArchive.java | 15 +++++++++++++++
.../xep0313_mam/in_memory/InMemoryMessageArchives.java | 2 +-
.../xep0313_mam/in_memory/InMemoryUserMessageArchive.java | 5 +++--
.../xep0313_mam/user/UserMessageStanzaBroker.java | 9 +++++++--
.../extension/xep0313_mam/user/UserArchiveTest.java | 7 -------
8 files changed, 29 insertions(+), 18 deletions(-)
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
index 7993ea4..6e05961 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
@@ -96,8 +96,6 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage
private InboundStanzaProtocolWorker inboundStanzaProtocolWorker;
- private UnconnectedProtocolWorker unconnectedProtocolWorker;
-
private final ComponentRegistry componentRegistry;
private static final Integer PRIO_THRESHOLD = 0;
@@ -149,7 +147,6 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage
public void setStanzaHandlerExecutorFactory(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) {
this.inboundStanzaProtocolWorker = new InboundStanzaProtocolWorker(stanzaHandlerExecutorFactory);
- this.unconnectedProtocolWorker = new UnconnectedProtocolWorker(stanzaHandlerExecutorFactory);
}
public final void setLogStorageProvider(final LogStorageProvider logStorageProvider) {
@@ -385,7 +382,7 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage
LOG.warn("cannot relay to offline receiver {} stanza {}", receiver.getFullQualifiedName(), stanza);
return new RelayResult(new LocalRecipientOfflineException());
}
- unconnectedProtocolWorker.processStanza(serverRuntimeContext, null, sessionStateHolder, stanza,
+ inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, null, sessionStateHolder, stanza,
stanzaHandler);
return new RelayResult().setProcessed();
}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
index 477e5ff..de8865d 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
@@ -273,7 +273,7 @@ public class PresenceAvailabilityHandler extends AbstractPresenceSpecializedHand
Collection<Stanza> offlineStanzas = offlineProvider.getStanzasFor(user);
for (Stanza stanza : offlineStanzas) {
logger.debug("Sending out delayed offline stanza");
- relayStanza(user, stanza, stanzaBroker);
+ stanzaBroker.writeToSession(stanza);
}
}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java
index bebdefc..c4d7551 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java
@@ -58,7 +58,7 @@ public abstract class AbstractStateAwareProtocolWorker implements StateAwareProt
protected boolean checkState(InternalSessionContext sessionContext, SessionStateHolder sessionStateHolder,
Stanza stanza, StanzaHandler stanzaHandler) {
- return sessionContext != null && getHandledState() == sessionContext.getState();
+ return getHandledState() == sessionStateHolder.getState();
}
private void executeHandler(ServerRuntimeContext serverRuntimeContext, InternalSessionContext sessionContext,
diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchive.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchive.java
index 208bcae..f928625 100644
--- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchive.java
+++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchive.java
@@ -19,12 +19,16 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0313_mam.in_memory;
+import static java.util.Objects.requireNonNull;
+
import java.util.ArrayList;
import java.util.List;
+import java.util.StringJoiner;
import java.util.UUID;
import java.util.function.Predicate;
import java.util.stream.Collectors;
+import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.ArchivedMessage;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.ArchivedMessages;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.Message;
@@ -38,8 +42,14 @@ import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.SimpleArchivedMe
*/
public class InMemoryMessageArchive implements MessageArchive {
+ private final Entity archiveId;
+
private final List<SimpleArchivedMessage> messages = new ArrayList<>();
+ public InMemoryMessageArchive(Entity archiveId) {
+ this.archiveId = requireNonNull(archiveId);
+ }
+
@Override
public ArchivedMessage archive(Message message) {
SimpleArchivedMessage archivedMessage = new SimpleArchivedMessage(UUID.randomUUID().toString(), message);
@@ -63,4 +73,9 @@ public class InMemoryMessageArchive implements MessageArchive {
return messages.stream().filter(predicate).collect(Collectors.toList());
}
+ @Override
+ public String toString() {
+ return new StringJoiner(", ", InMemoryMessageArchive.class.getSimpleName() + "[", "]")
+ .add("archiveId=" + archiveId).toString();
+ }
}
diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchives.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchives.java
index a5d4073..ae491e5 100644
--- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchives.java
+++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryMessageArchives.java
@@ -37,7 +37,7 @@ public class InMemoryMessageArchives implements MessageArchives {
@Override
public Optional<UserMessageArchive> retrieveUserMessageArchive(Entity userBareJid) {
UserMessageArchive messageArchive = userMessageArchiveById.computeIfAbsent(userBareJid,
- id -> new InMemoryUserMessageArchive());
+ id -> new InMemoryUserMessageArchive(userBareJid));
return Optional.of(messageArchive);
}
}
diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryUserMessageArchive.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryUserMessageArchive.java
index 4042530..424dbcc 100644
--- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryUserMessageArchive.java
+++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/in_memory/InMemoryUserMessageArchive.java
@@ -19,6 +19,7 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0313_mam.in_memory;
+import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.ArchivedMessage;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.ArchivedMessages;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.Message;
@@ -38,8 +39,8 @@ public class InMemoryUserMessageArchive implements UserMessageArchive {
private UserMessageArchivePreferences preferences;
- public InMemoryUserMessageArchive() {
- this.delegate = new InMemoryMessageArchive();
+ public InMemoryUserMessageArchive(Entity archiveId) {
+ this.delegate = new InMemoryMessageArchive(archiveId);
this.preferences = new SimpleUserMessageArchivePreferences();
}
diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java
index 3ef8a6a..b818253 100644
--- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java
+++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java
@@ -130,8 +130,13 @@ class UserMessageStanzaBroker extends DelegatingStanzaBroker {
// local users MUST expose these archives to the user on the user's bare JID.
Entity receiverArchiveId = requireNonNull(messageStanza.getTo(), "No 'to' found in " + messageStanza)
.getBareJID();
- return messageArchives().retrieveUserMessageArchive(receiverArchiveId)
- .map(messageArchive -> messageArchive.archive(new SimpleMessage(messageStanza)));
+ Optional<UserMessageArchive> receiverArchive = messageArchives().retrieveUserMessageArchive(receiverArchiveId);
+ if (!receiverArchive.isPresent()) {
+ LOG.debug("No archive returned for sender with bare JID '{}'", receiverArchiveId);
+ return Optional.empty();
+ }
+
+ return Optional.ofNullable(receiverArchive.get().archive(new SimpleMessage(messageStanza)));
}
private MessageArchives messageArchives() {
diff --git a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java
index bef02b9..9e1fbb4 100644
--- a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java
+++ b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java
@@ -219,16 +219,9 @@ public class UserArchiveTest extends IntegrationTest {
Thread.sleep(200);
- assertNotNull(carolReceivedMessage.get());
- assertEquals("Hello carol", carolReceivedMessage.get().getBody());
-
Message archivedMessage = fetchUniqueArchivedMessage(carol());
String storedStanzaId = extractStanzaId(archivedMessage);
assertNotNull(storedStanzaId);
-
- String receivedStanzaId = extractStanzaId(carolReceivedMessage.get());
-
- assertEquals(storedStanzaId, receivedStanzaId);
}
@Test