Merge branch '709-track-private-group-invitation-messages' into 'master'

Use MessageTracker for private group invitation messages

Depends on !405.

See merge request !412
This commit is contained in:
Torsten Grote
2016-11-16 14:14:48 +00:00
6 changed files with 42 additions and 13 deletions

View File

@@ -5,6 +5,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;
@@ -16,7 +17,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.

View File

@@ -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;
}

View File

@@ -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,

View File

@@ -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());

View File

@@ -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.contact.Contact;
import org.briarproject.api.contact.ContactId;
@@ -36,10 +37,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

View File

@@ -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);
}
}