mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Track private group invitation messages.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user