From 7ab4d12d83fcca79ea051e318de3901595f7ebae Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Mon, 14 Nov 2016 10:10:14 +0000 Subject: [PATCH] Track private group invitation messages. --- .../invitation/GroupInvitationManager.java | 3 ++- .../invitation/AbstractProtocolEngine.java | 6 +++++- .../invitation/CreatorProtocolEngine.java | 16 +++++++++++++--- .../invitation/InviteeProtocolEngine.java | 13 +++++++++++-- .../invitation/PeerProtocolEngine.java | 6 ++++-- .../invitation/ProtocolEngineFactoryImpl.java | 11 +++++++---- 6 files changed, 42 insertions(+), 13 deletions(-) diff --git a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java index 489e51a591..2add861af2 100644 --- a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java +++ b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java @@ -4,6 +4,7 @@ import org.briarproject.api.clients.SessionId; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.db.DbException; +import org.briarproject.api.messaging.ConversationManager.ConversationClient; import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.privategroup.PrivateGroup; import org.briarproject.api.sharing.InvitationMessage; @@ -15,7 +16,7 @@ import java.util.Collection; import javax.annotation.Nullable; @NotNullByDefault -public interface GroupInvitationManager { +public interface GroupInvitationManager extends ConversationClient { /** * The unique ID of the private group invitation client. diff --git a/briar-core/src/org/briarproject/privategroup/invitation/AbstractProtocolEngine.java b/briar-core/src/org/briarproject/privategroup/invitation/AbstractProtocolEngine.java index 86e8688a0d..ddf3b5ae20 100644 --- a/briar-core/src/org/briarproject/privategroup/invitation/AbstractProtocolEngine.java +++ b/briar-core/src/org/briarproject/privategroup/invitation/AbstractProtocolEngine.java @@ -2,6 +2,7 @@ package org.briarproject.privategroup.invitation; import org.briarproject.api.FormatException; import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.MessageTracker; import org.briarproject.api.contact.ContactId; import org.briarproject.api.data.BdfDictionary; import org.briarproject.api.data.BdfList; @@ -42,6 +43,7 @@ abstract class AbstractProtocolEngine<S extends Session> protected final ClientHelper clientHelper; protected final PrivateGroupManager privateGroupManager; protected final PrivateGroupFactory privateGroupFactory; + protected final MessageTracker messageTracker; private final GroupMessageFactory groupMessageFactory; private final IdentityManager identityManager; @@ -54,7 +56,8 @@ abstract class AbstractProtocolEngine<S extends Session> PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, Clock clock) { + MessageEncoder messageEncoder, MessageTracker messageTracker, + Clock clock) { this.db = db; this.clientHelper = clientHelper; this.privateGroupManager = privateGroupManager; @@ -63,6 +66,7 @@ abstract class AbstractProtocolEngine<S extends Session> this.identityManager = identityManager; this.messageParser = messageParser; this.messageEncoder = messageEncoder; + this.messageTracker = messageTracker; this.clock = clock; } diff --git a/briar-core/src/org/briarproject/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/org/briarproject/privategroup/invitation/CreatorProtocolEngine.java index e3e6c05404..f58630c4c8 100644 --- a/briar-core/src/org/briarproject/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/org/briarproject/privategroup/invitation/CreatorProtocolEngine.java @@ -2,6 +2,7 @@ package org.briarproject.privategroup.invitation; import org.briarproject.api.FormatException; import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.MessageTracker; import org.briarproject.api.clients.ProtocolStateException; import org.briarproject.api.clients.SessionId; import org.briarproject.api.contact.ContactId; @@ -37,10 +38,11 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> { PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, Clock clock) { + MessageEncoder messageEncoder, MessageTracker messageTracker, + Clock clock) { super(db, clientHelper, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, messageParser, - messageEncoder, clock); + messageEncoder, messageTracker, clock); } @Override @@ -144,8 +146,10 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> { throws DbException { // Send an INVITE message Message sent = sendInviteMessage(txn, s, message, timestamp, signature); - long localTimestamp = Math.max(timestamp, getLocalTimestamp(s)); + // Track the message + messageTracker.trackOutgoingMessage(txn, sent); // Move to the INVITED state + long localTimestamp = Math.max(timestamp, getLocalTimestamp(s)); return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), sent.getId(), s.getLastRemoteMessageId(), localTimestamp, timestamp, INVITED); @@ -176,6 +180,9 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> { return abort(txn, s); // Mark the response visible in the UI markMessageVisibleInUi(txn, m.getId(), true); + // Track the message + messageTracker.trackMessage(txn, m.getContactGroupId(), + m.getTimestamp(), false); // Start syncing the private group with the contact syncPrivateGroupWithContact(txn, s, true); // Broadcast an event @@ -197,6 +204,9 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> { return abort(txn, s); // Mark the response visible in the UI markMessageVisibleInUi(txn, m.getId(), true); + // Track the message + messageTracker.trackMessage(txn, m.getContactGroupId(), + m.getTimestamp(), false); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent(contactId, diff --git a/briar-core/src/org/briarproject/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/org/briarproject/privategroup/invitation/InviteeProtocolEngine.java index 1526e23bd9..60579d46f5 100644 --- a/briar-core/src/org/briarproject/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/org/briarproject/privategroup/invitation/InviteeProtocolEngine.java @@ -2,6 +2,7 @@ package org.briarproject.privategroup.invitation; import org.briarproject.api.FormatException; import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.MessageTracker; import org.briarproject.api.clients.ProtocolStateException; import org.briarproject.api.clients.SessionId; import org.briarproject.api.contact.ContactId; @@ -40,10 +41,11 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> { PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, Clock clock) { + MessageEncoder messageEncoder, MessageTracker messageTracker, + Clock clock) { super(db, clientHelper, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, messageParser, - messageEncoder, clock); + messageEncoder, messageTracker, clock); } @Override @@ -150,6 +152,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> { markMessageAvailableToAnswer(txn, inviteId, false); // Send a JOIN message Message sent = sendJoinMessage(txn, s, true); + // Track the message + messageTracker.trackOutgoingMessage(txn, sent); try { // Subscribe to the private group subscribeToPrivateGroup(txn, inviteId); @@ -172,6 +176,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> { markMessageAvailableToAnswer(txn, inviteId, false); // Send a LEAVE message Message sent = sendLeaveMessage(txn, s, true); + // Track the message + messageTracker.trackOutgoingMessage(txn, sent); // Move to the START state return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(), sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(), @@ -200,6 +206,9 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> { // Mark the invite message visible in the UI and available to answer markMessageVisibleInUi(txn, m.getId(), true); markMessageAvailableToAnswer(txn, m.getId(), true); + // Track the message + messageTracker.trackMessage(txn, m.getContactGroupId(), + m.getTimestamp(), false); // Broadcast an event PrivateGroup privateGroup = privateGroupFactory.createPrivateGroup( m.getGroupName(), m.getCreator(), m.getSalt()); diff --git a/briar-core/src/org/briarproject/privategroup/invitation/PeerProtocolEngine.java b/briar-core/src/org/briarproject/privategroup/invitation/PeerProtocolEngine.java index 6d3c721f38..488c3cc74f 100644 --- a/briar-core/src/org/briarproject/privategroup/invitation/PeerProtocolEngine.java +++ b/briar-core/src/org/briarproject/privategroup/invitation/PeerProtocolEngine.java @@ -2,6 +2,7 @@ package org.briarproject.privategroup.invitation; import org.briarproject.api.FormatException; import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.MessageTracker; import org.briarproject.api.clients.ProtocolStateException; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.db.DbException; @@ -34,10 +35,11 @@ class PeerProtocolEngine extends AbstractProtocolEngine<PeerSession> { PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, Clock clock) { + MessageEncoder messageEncoder, MessageTracker messageTracker, + Clock clock) { super(db, clientHelper, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, messageParser, - messageEncoder, clock); + messageEncoder, messageTracker, clock); } @Override diff --git a/briar-core/src/org/briarproject/privategroup/invitation/ProtocolEngineFactoryImpl.java b/briar-core/src/org/briarproject/privategroup/invitation/ProtocolEngineFactoryImpl.java index 3c2c9ce84c..ed48f12241 100644 --- a/briar-core/src/org/briarproject/privategroup/invitation/ProtocolEngineFactoryImpl.java +++ b/briar-core/src/org/briarproject/privategroup/invitation/ProtocolEngineFactoryImpl.java @@ -1,6 +1,7 @@ package org.briarproject.privategroup.invitation; import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.MessageTracker; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.nullsafety.NotNullByDefault; @@ -24,6 +25,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { private final IdentityManager identityManager; private final MessageParser messageParser; private final MessageEncoder messageEncoder; + private final MessageTracker messageTracker; private final Clock clock; @Inject @@ -32,7 +34,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, + MessageEncoder messageEncoder, MessageTracker messageTracker, Clock clock) { this.db = db; this.clientHelper = clientHelper; @@ -42,6 +44,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { this.identityManager = identityManager; this.messageParser = messageParser; this.messageEncoder = messageEncoder; + this.messageTracker = messageTracker; this.clock = clock; } @@ -49,20 +52,20 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { public ProtocolEngine<CreatorSession> createCreatorEngine() { return new CreatorProtocolEngine(db, clientHelper, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, clock); + messageParser, messageEncoder, messageTracker, clock); } @Override public ProtocolEngine<InviteeSession> createInviteeEngine() { return new InviteeProtocolEngine(db, clientHelper, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, clock); + messageParser, messageEncoder, messageTracker, clock); } @Override public ProtocolEngine<PeerSession> createPeerEngine() { return new PeerProtocolEngine(db, clientHelper, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, clock); + messageParser, messageEncoder, messageTracker, clock); } } -- GitLab