mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 14:49:53 +01:00
Add checkConnection() to MailboxManager
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
package org.briarproject.bramble.api.mailbox;
|
package org.briarproject.bramble.api.mailbox;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.Consumer;
|
||||||
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.lifecycle.IoExecutor;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
@@ -32,4 +34,15 @@ public interface MailboxManager {
|
|||||||
*/
|
*/
|
||||||
MailboxPairingTask startPairingTask(String qrCodePayload);
|
MailboxPairingTask startPairingTask(String qrCodePayload);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be used by the UI to test the mailbox connection.
|
||||||
|
* After the connection has been made, the given {@param connectionCallback}
|
||||||
|
* will be called with true (success) or false (error).
|
||||||
|
* In addition, a {@link OwnMailboxConnectionStatusEvent} might be broadcast
|
||||||
|
* with a new {@link MailboxStatus}.
|
||||||
|
* <p>
|
||||||
|
* Note that the callback will be made on the {@link IoExecutor}.
|
||||||
|
*/
|
||||||
|
void checkConnection(Consumer<Boolean> connectionCallback);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,44 @@
|
|||||||
package org.briarproject.bramble.mailbox;
|
package org.briarproject.bramble.mailbox;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.Consumer;
|
||||||
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.lifecycle.IoExecutor;
|
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxManager;
|
import org.briarproject.bramble.api.mailbox.MailboxManager;
|
||||||
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.MailboxSettingsManager;
|
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxStatus;
|
import org.briarproject.bramble.api.mailbox.MailboxStatus;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.concurrent.GuardedBy;
|
import javax.annotation.concurrent.GuardedBy;
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static java.util.logging.Logger.getLogger;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
class MailboxManagerImpl implements MailboxManager {
|
class MailboxManagerImpl implements MailboxManager {
|
||||||
|
|
||||||
|
private static final String TAG = MailboxManagerImpl.class.getName();
|
||||||
|
private final static Logger LOG = getLogger(TAG);
|
||||||
|
|
||||||
private final Executor ioExecutor;
|
private final Executor ioExecutor;
|
||||||
|
private final MailboxApi api;
|
||||||
|
private final TransactionManager db;
|
||||||
private final MailboxSettingsManager mailboxSettingsManager;
|
private final MailboxSettingsManager mailboxSettingsManager;
|
||||||
private final MailboxPairingTaskFactory pairingTaskFactory;
|
private final MailboxPairingTaskFactory pairingTaskFactory;
|
||||||
|
private final Clock clock;
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -32,11 +48,17 @@ class MailboxManagerImpl implements MailboxManager {
|
|||||||
@Inject
|
@Inject
|
||||||
MailboxManagerImpl(
|
MailboxManagerImpl(
|
||||||
@IoExecutor Executor ioExecutor,
|
@IoExecutor Executor ioExecutor,
|
||||||
|
MailboxApi api,
|
||||||
|
TransactionManager db,
|
||||||
MailboxSettingsManager mailboxSettingsManager,
|
MailboxSettingsManager mailboxSettingsManager,
|
||||||
MailboxPairingTaskFactory pairingTaskFactory) {
|
MailboxPairingTaskFactory pairingTaskFactory,
|
||||||
|
Clock clock) {
|
||||||
this.ioExecutor = ioExecutor;
|
this.ioExecutor = ioExecutor;
|
||||||
|
this.api = api;
|
||||||
|
this.db = db;
|
||||||
this.mailboxSettingsManager = mailboxSettingsManager;
|
this.mailboxSettingsManager = mailboxSettingsManager;
|
||||||
this.pairingTaskFactory = pairingTaskFactory;
|
this.pairingTaskFactory = pairingTaskFactory;
|
||||||
|
this.clock = clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -75,4 +97,30 @@ class MailboxManagerImpl implements MailboxManager {
|
|||||||
return created;
|
return created;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkConnection(Consumer<Boolean> connectionCallback) {
|
||||||
|
ioExecutor.execute(() -> {
|
||||||
|
boolean success;
|
||||||
|
try {
|
||||||
|
MailboxProperties props = db.transactionWithNullableResult(true,
|
||||||
|
mailboxSettingsManager::getOwnMailboxProperties);
|
||||||
|
success = api.checkStatus(props);
|
||||||
|
} catch (DbException | IOException | MailboxApi.ApiException e) {
|
||||||
|
success = false;
|
||||||
|
logException(LOG, WARNING, e);
|
||||||
|
}
|
||||||
|
connectionCallback.accept(success);
|
||||||
|
if (!success) return;
|
||||||
|
try {
|
||||||
|
// we are only recording successful connections here
|
||||||
|
// as those update the UI and failures might be false negatives
|
||||||
|
db.transaction(false, txn ->
|
||||||
|
mailboxSettingsManager.recordSuccessfulConnection(txn,
|
||||||
|
clock.currentTimeMillis()));
|
||||||
|
} catch (DbException e) {
|
||||||
|
logException(LOG, WARNING, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user