mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 21:29:54 +01:00
Reset retransmission times when pairing (new) mailbox
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
package org.briarproject.bramble.mailbox;
|
package org.briarproject.bramble.mailbox;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||||
import org.briarproject.bramble.api.db.TransactionManager;
|
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||||
import org.briarproject.bramble.api.event.EventExecutor;
|
import org.briarproject.bramble.api.event.EventExecutor;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxPropertyManager;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
@@ -18,31 +19,35 @@ import javax.inject.Inject;
|
|||||||
class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
|
class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
|
||||||
|
|
||||||
private final Executor eventExecutor;
|
private final Executor eventExecutor;
|
||||||
private final TransactionManager db;
|
private final DatabaseComponent db;
|
||||||
private final CryptoComponent crypto;
|
private final CryptoComponent crypto;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
private final MailboxApi api;
|
private final MailboxApi api;
|
||||||
private final MailboxSettingsManager mailboxSettingsManager;
|
private final MailboxSettingsManager mailboxSettingsManager;
|
||||||
|
private final MailboxPropertyManager mailboxPropertyManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
MailboxPairingTaskFactoryImpl(
|
MailboxPairingTaskFactoryImpl(
|
||||||
@EventExecutor Executor eventExecutor,
|
@EventExecutor Executor eventExecutor,
|
||||||
TransactionManager db,
|
DatabaseComponent db,
|
||||||
CryptoComponent crypto,
|
CryptoComponent crypto,
|
||||||
Clock clock,
|
Clock clock,
|
||||||
MailboxApi api,
|
MailboxApi api,
|
||||||
MailboxSettingsManager mailboxSettingsManager) {
|
MailboxSettingsManager mailboxSettingsManager,
|
||||||
|
MailboxPropertyManager mailboxPropertyManager) {
|
||||||
this.eventExecutor = eventExecutor;
|
this.eventExecutor = eventExecutor;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.crypto = crypto;
|
this.crypto = crypto;
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.mailboxSettingsManager = mailboxSettingsManager;
|
this.mailboxSettingsManager = mailboxSettingsManager;
|
||||||
|
this.mailboxPropertyManager = mailboxPropertyManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MailboxPairingTask createPairingTask(String qrCodePayload) {
|
public MailboxPairingTask createPairingTask(String qrCodePayload) {
|
||||||
return new MailboxPairingTaskImpl(qrCodePayload, eventExecutor, db,
|
return new MailboxPairingTaskImpl(qrCodePayload, eventExecutor, db,
|
||||||
crypto, clock, api, mailboxSettingsManager);
|
crypto, clock, api, mailboxSettingsManager,
|
||||||
|
mailboxPropertyManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,17 @@ package org.briarproject.bramble.mailbox;
|
|||||||
|
|
||||||
import org.briarproject.bramble.api.Consumer;
|
import org.briarproject.bramble.api.Consumer;
|
||||||
import org.briarproject.bramble.api.FormatException;
|
import org.briarproject.bramble.api.FormatException;
|
||||||
|
import org.briarproject.bramble.api.contact.Contact;
|
||||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
import org.briarproject.bramble.api.db.TransactionManager;
|
|
||||||
import org.briarproject.bramble.api.event.EventExecutor;
|
import org.briarproject.bramble.api.event.EventExecutor;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
|
import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxPropertiesUpdate;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxPropertyManager;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
@@ -43,11 +46,12 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
|||||||
|
|
||||||
private final String payload;
|
private final String payload;
|
||||||
private final Executor eventExecutor;
|
private final Executor eventExecutor;
|
||||||
private final TransactionManager db;
|
private final DatabaseComponent db;
|
||||||
private final CryptoComponent crypto;
|
private final CryptoComponent crypto;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
private final MailboxApi api;
|
private final MailboxApi api;
|
||||||
private final MailboxSettingsManager mailboxSettingsManager;
|
private final MailboxSettingsManager mailboxSettingsManager;
|
||||||
|
private final MailboxPropertyManager mailboxPropertyManager;
|
||||||
|
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
@@ -59,11 +63,12 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
|||||||
MailboxPairingTaskImpl(
|
MailboxPairingTaskImpl(
|
||||||
String payload,
|
String payload,
|
||||||
@EventExecutor Executor eventExecutor,
|
@EventExecutor Executor eventExecutor,
|
||||||
TransactionManager db,
|
DatabaseComponent db,
|
||||||
CryptoComponent crypto,
|
CryptoComponent crypto,
|
||||||
Clock clock,
|
Clock clock,
|
||||||
MailboxApi api,
|
MailboxApi api,
|
||||||
MailboxSettingsManager mailboxSettingsManager) {
|
MailboxSettingsManager mailboxSettingsManager,
|
||||||
|
MailboxPropertyManager mailboxPropertyManager) {
|
||||||
this.payload = payload;
|
this.payload = payload;
|
||||||
this.eventExecutor = eventExecutor;
|
this.eventExecutor = eventExecutor;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
@@ -71,6 +76,7 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
|||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.mailboxSettingsManager = mailboxSettingsManager;
|
this.mailboxSettingsManager = mailboxSettingsManager;
|
||||||
|
this.mailboxPropertyManager = mailboxPropertyManager;
|
||||||
state = new MailboxPairingState.QrCodeReceived();
|
state = new MailboxPairingState.QrCodeReceived();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,6 +123,16 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
|||||||
mailboxSettingsManager
|
mailboxSettingsManager
|
||||||
.setOwnMailboxProperties(txn, ownerProperties);
|
.setOwnMailboxProperties(txn, ownerProperties);
|
||||||
mailboxSettingsManager.recordSuccessfulConnection(txn, time);
|
mailboxSettingsManager.recordSuccessfulConnection(txn, time);
|
||||||
|
// A (possibly new) mailbox is paired. Reset message retransmission
|
||||||
|
// timers for contacts who doesn't have their own mailbox. This way,
|
||||||
|
// data stranded on our old mailbox will be re-uploaded to our new.
|
||||||
|
for (Contact c : db.getContacts(txn)) {
|
||||||
|
MailboxPropertiesUpdate remoteProps = mailboxPropertyManager
|
||||||
|
.getRemoteProperties(txn, c.getId());
|
||||||
|
if (remoteProps == null) {
|
||||||
|
db.resetUnackedMessagesToSend(txn, c.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
setState(new MailboxPairingState.Paired());
|
setState(new MailboxPairingState.Paired());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
package org.briarproject.bramble.mailbox;
|
package org.briarproject.bramble.mailbox;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
import org.briarproject.bramble.api.db.Transaction;
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
import org.briarproject.bramble.api.db.TransactionManager;
|
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
|
import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxPropertyManager;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||||
import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent;
|
import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
@@ -35,16 +36,18 @@ import static org.junit.Assert.fail;
|
|||||||
public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||||
|
|
||||||
private final Executor executor = new ImmediateExecutor();
|
private final Executor executor = new ImmediateExecutor();
|
||||||
private final TransactionManager db =
|
private final DatabaseComponent db =
|
||||||
context.mock(TransactionManager.class);
|
context.mock(DatabaseComponent.class);
|
||||||
private final CryptoComponent crypto = context.mock(CryptoComponent.class);
|
private final CryptoComponent crypto = context.mock(CryptoComponent.class);
|
||||||
private final Clock clock = context.mock(Clock.class);
|
private final Clock clock = context.mock(Clock.class);
|
||||||
private final MailboxApi api = context.mock(MailboxApi.class);
|
private final MailboxApi api = context.mock(MailboxApi.class);
|
||||||
private final MailboxSettingsManager mailboxSettingsManager =
|
private final MailboxSettingsManager mailboxSettingsManager =
|
||||||
context.mock(MailboxSettingsManager.class);
|
context.mock(MailboxSettingsManager.class);
|
||||||
|
private final MailboxPropertyManager mailboxPropertyManager =
|
||||||
|
context.mock(MailboxPropertyManager.class);
|
||||||
private final MailboxPairingTaskFactory factory =
|
private final MailboxPairingTaskFactory factory =
|
||||||
new MailboxPairingTaskFactoryImpl(executor, db, crypto, clock, api,
|
new MailboxPairingTaskFactoryImpl(executor, db, crypto, clock, api,
|
||||||
mailboxSettingsManager);
|
mailboxSettingsManager, mailboxPropertyManager);
|
||||||
|
|
||||||
private final String onion = getRandomString(56);
|
private final String onion = getRandomString(56);
|
||||||
private final byte[] onionBytes = getRandomBytes(32);
|
private final byte[] onionBytes = getRandomBytes(32);
|
||||||
@@ -102,6 +105,7 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
|||||||
oneOf(mailboxSettingsManager).setOwnMailboxProperties(
|
oneOf(mailboxSettingsManager).setOwnMailboxProperties(
|
||||||
with(txn), with(matches(ownerProperties)));
|
with(txn), with(matches(ownerProperties)));
|
||||||
oneOf(mailboxSettingsManager).recordSuccessfulConnection(txn, time);
|
oneOf(mailboxSettingsManager).recordSuccessfulConnection(txn, time);
|
||||||
|
oneOf(db).getContacts(txn);
|
||||||
}});
|
}});
|
||||||
|
|
||||||
AtomicInteger i = new AtomicInteger(0);
|
AtomicInteger i = new AtomicInteger(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user