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 <[email protected]>
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