Move some duplicated code into utility methods.

This commit is contained in:
akwizgran
2020-05-12 17:25:55 +01:00
parent c1101c7fe1
commit ee0bf7218c
9 changed files with 67 additions and 90 deletions

View File

@@ -1,10 +1,13 @@
package org.briarproject.bramble.plugin; package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.ConnectionRegistry; import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.TransportConnectionReader; import org.briarproject.bramble.api.plugin.TransportConnectionReader;
import org.briarproject.bramble.api.plugin.TransportConnectionWriter; import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.transport.KeyManager; import org.briarproject.bramble.api.transport.KeyManager;
import org.briarproject.bramble.api.transport.StreamContext;
import org.briarproject.bramble.api.transport.StreamReaderFactory; import org.briarproject.bramble.api.transport.StreamReaderFactory;
import org.briarproject.bramble.api.transport.StreamWriterFactory; import org.briarproject.bramble.api.transport.StreamWriterFactory;
@@ -12,6 +15,8 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.annotation.Nullable;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger; import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH; import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
@@ -37,7 +42,20 @@ abstract class Connection {
this.streamWriterFactory = streamWriterFactory; this.streamWriterFactory = streamWriterFactory;
} }
byte[] readTag(InputStream in) throws IOException { @Nullable
StreamContext recogniseTag(TransportConnectionReader reader,
TransportId transportId) {
StreamContext ctx;
try {
byte[] tag = readTag(reader.getInputStream());
return keyManager.getStreamContext(transportId, tag);
} catch (IOException | DbException e) {
logException(LOG, WARNING, e);
return null;
}
}
private byte[] readTag(InputStream in) throws IOException {
byte[] tag = new byte[TAG_LENGTH]; byte[] tag = new byte[TAG_LENGTH];
read(in, tag); read(in, tag);
return tag; return tag;

View File

@@ -3,6 +3,7 @@ package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.contact.ContactExchangeManager; import org.briarproject.bramble.api.contact.ContactExchangeManager;
import org.briarproject.bramble.api.contact.HandshakeManager; import org.briarproject.bramble.api.contact.HandshakeManager;
import org.briarproject.bramble.api.contact.PendingContactId; import org.briarproject.bramble.api.contact.PendingContactId;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.plugin.ConnectionManager; import org.briarproject.bramble.api.plugin.ConnectionManager;
import org.briarproject.bramble.api.plugin.ConnectionRegistry; import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.TransportConnectionReader; import org.briarproject.bramble.api.plugin.TransportConnectionReader;
@@ -10,9 +11,15 @@ import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection; import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
import org.briarproject.bramble.api.transport.KeyManager; import org.briarproject.bramble.api.transport.KeyManager;
import org.briarproject.bramble.api.transport.StreamContext;
import org.briarproject.bramble.api.transport.StreamReaderFactory; import org.briarproject.bramble.api.transport.StreamReaderFactory;
import org.briarproject.bramble.api.transport.StreamWriterFactory; import org.briarproject.bramble.api.transport.StreamWriterFactory;
import javax.annotation.Nullable;
import static java.util.logging.Level.WARNING;
import static org.briarproject.bramble.util.LogUtils.logException;
abstract class HandshakeConnection extends Connection { abstract class HandshakeConnection extends Connection {
final HandshakeManager handshakeManager; final HandshakeManager handshakeManager;
@@ -45,6 +52,17 @@ abstract class HandshakeConnection extends Connection {
writer = connection.getWriter(); writer = connection.getWriter();
} }
@Nullable
StreamContext allocateStreamContext(PendingContactId pendingContactId,
TransportId transportId) {
try {
return keyManager.getStreamContext(pendingContactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
return null;
}
}
void onError(boolean recognised) { void onError(boolean recognised) {
disposeOnError(reader, recognised); disposeOnError(reader, recognised);
disposeOnError(writer); disposeOnError(writer);

View File

@@ -38,15 +38,7 @@ class IncomingDuplexSyncConnection extends DuplexSyncConnection
@Override @Override
public void run() { public void run() {
// Read and recognise the tag // Read and recognise the tag
StreamContext ctx; StreamContext ctx = recogniseTag(reader, transportId);
try {
byte[] tag = readTag(reader.getInputStream());
ctx = keyManager.getStreamContext(transportId, tag);
} catch (IOException | DbException e) {
logException(LOG, WARNING, e);
onReadError(false);
return;
}
if (ctx == null) { if (ctx == null) {
LOG.info("Unrecognised tag"); LOG.info("Unrecognised tag");
onReadError(false); onReadError(false);
@@ -88,14 +80,7 @@ class IncomingDuplexSyncConnection extends DuplexSyncConnection
private void runOutgoingSession(ContactId contactId) { private void runOutgoingSession(ContactId contactId) {
// Allocate a stream context // Allocate a stream context
StreamContext ctx; StreamContext ctx = allocateStreamContext(contactId, transportId);
try {
ctx = keyManager.getStreamContext(contactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
onWriteError();
return;
}
if (ctx == null) { if (ctx == null) {
LOG.warning("Could not allocate stream context"); LOG.warning("Could not allocate stream context");
onWriteError(); onWriteError();

View File

@@ -41,15 +41,7 @@ class IncomingHandshakeConnection extends HandshakeConnection
@Override @Override
public void run() { public void run() {
// Read and recognise the tag // Read and recognise the tag
StreamContext ctxIn; StreamContext ctxIn = recogniseTag(reader, transportId);
try {
byte[] tag = readTag(reader.getInputStream());
ctxIn = keyManager.getStreamContext(transportId, tag);
} catch (IOException | DbException e) {
logException(LOG, WARNING, e);
onError(false);
return;
}
if (ctxIn == null) { if (ctxIn == null) {
LOG.info("Unrecognised tag"); LOG.info("Unrecognised tag");
onError(false); onError(false);
@@ -62,14 +54,8 @@ class IncomingHandshakeConnection extends HandshakeConnection
return; return;
} }
// Allocate the outgoing stream context // Allocate the outgoing stream context
StreamContext ctxOut; StreamContext ctxOut =
try { allocateStreamContext(pendingContactId, transportId);
ctxOut = keyManager.getStreamContext(pendingContactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
onError(true);
return;
}
if (ctxOut == null) { if (ctxOut == null) {
LOG.warning("Could not allocate stream context"); LOG.warning("Could not allocate stream context");
onError(true); onError(true);

View File

@@ -1,7 +1,6 @@
package org.briarproject.bramble.plugin; package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.ConnectionRegistry; import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.TransportConnectionReader; import org.briarproject.bramble.api.plugin.TransportConnectionReader;
@@ -41,15 +40,7 @@ class IncomingSimplexSyncConnection extends SyncConnection implements Runnable {
@Override @Override
public void run() { public void run() {
// Read and recognise the tag // Read and recognise the tag
StreamContext ctx; StreamContext ctx = recogniseTag(reader, transportId);
try {
byte[] tag = readTag(reader.getInputStream());
ctx = keyManager.getStreamContext(transportId, tag);
} catch (IOException | DbException e) {
logException(LOG, WARNING, e);
onError(false);
return;
}
if (ctx == null) { if (ctx == null) {
LOG.info("Unrecognised tag"); LOG.info("Unrecognised tag");
onError(false); onError(false);

View File

@@ -41,14 +41,7 @@ class OutgoingDuplexSyncConnection extends DuplexSyncConnection
@Override @Override
public void run() { public void run() {
// Allocate a stream context // Allocate a stream context
StreamContext ctx; StreamContext ctx = allocateStreamContext(contactId, transportId);
try {
ctx = keyManager.getStreamContext(contactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
onWriteError();
return;
}
if (ctx == null) { if (ctx == null) {
LOG.warning("Could not allocate stream context"); LOG.warning("Could not allocate stream context");
onWriteError(); onWriteError();
@@ -76,15 +69,7 @@ class OutgoingDuplexSyncConnection extends DuplexSyncConnection
private void runIncomingSession() { private void runIncomingSession() {
// Read and recognise the tag // Read and recognise the tag
StreamContext ctx; StreamContext ctx = recogniseTag(reader, transportId);
try {
byte[] tag = readTag(reader.getInputStream());
ctx = keyManager.getStreamContext(transportId, tag);
} catch (IOException | DbException e) {
logException(LOG, WARNING, e);
onReadError();
return;
}
// Unrecognised tags are suspicious in this case // Unrecognised tags are suspicious in this case
if (ctx == null) { if (ctx == null) {
LOG.warning("Unrecognised tag for returning stream"); LOG.warning("Unrecognised tag for returning stream");
@@ -109,8 +94,7 @@ class OutgoingDuplexSyncConnection extends DuplexSyncConnection
onReadError(); onReadError();
return; return;
} }
connectionRegistry.registerConnection(contactId, transportId, connectionRegistry.registerConnection(contactId, transportId, false);
false);
try { try {
// Store any transport properties discovered from the connection // Store any transport properties discovered from the connection
transportPropertyManager.addRemotePropertiesFromConnection( transportPropertyManager.addRemotePropertiesFromConnection(

View File

@@ -44,14 +44,8 @@ class OutgoingHandshakeConnection extends HandshakeConnection
@Override @Override
public void run() { public void run() {
// Allocate the outgoing stream context // Allocate the outgoing stream context
StreamContext ctxOut; StreamContext ctxOut =
try { allocateStreamContext(pendingContactId, transportId);
ctxOut = keyManager.getStreamContext(pendingContactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
onError();
return;
}
if (ctxOut == null) { if (ctxOut == null) {
LOG.warning("Could not allocate stream context"); LOG.warning("Could not allocate stream context");
onError(); onError();
@@ -69,15 +63,7 @@ class OutgoingHandshakeConnection extends HandshakeConnection
return; return;
} }
// Read and recognise the tag // Read and recognise the tag
StreamContext ctxIn; StreamContext ctxIn = recogniseTag(reader, transportId);
try {
byte[] tag = readTag(reader.getInputStream());
ctxIn = keyManager.getStreamContext(transportId, tag);
} catch (IOException | DbException e) {
logException(LOG, WARNING, e);
onError();
return;
}
// Unrecognised tags are suspicious in this case // Unrecognised tags are suspicious in this case
if (ctxIn == null) { if (ctxIn == null) {
LOG.warning("Unrecognised tag for returning stream"); LOG.warning("Unrecognised tag for returning stream");

View File

@@ -1,7 +1,6 @@
package org.briarproject.bramble.plugin; package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.ConnectionRegistry; import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.TransportConnectionWriter; import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
@@ -47,14 +46,7 @@ class OutgoingSimplexSyncConnection extends SyncConnection implements Runnable {
@Override @Override
public void run() { public void run() {
// Allocate a stream context // Allocate a stream context
StreamContext ctx; StreamContext ctx = allocateStreamContext(contactId, transportId);
try {
ctx = keyManager.getStreamContext(contactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
onError();
return;
}
if (ctx == null) { if (ctx == null) {
LOG.warning("Could not allocate stream context"); LOG.warning("Could not allocate stream context");
onError(); onError();

View File

@@ -1,9 +1,11 @@
package org.briarproject.bramble.plugin; package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.ConnectionRegistry; import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.TransportConnectionReader; import org.briarproject.bramble.api.plugin.TransportConnectionReader;
import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.properties.TransportPropertyManager; import org.briarproject.bramble.api.properties.TransportPropertyManager;
import org.briarproject.bramble.api.sync.SyncSession; import org.briarproject.bramble.api.sync.SyncSession;
import org.briarproject.bramble.api.sync.SyncSessionFactory; import org.briarproject.bramble.api.sync.SyncSessionFactory;
@@ -15,7 +17,11 @@ import org.briarproject.bramble.api.transport.StreamWriterFactory;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import javax.annotation.Nullable;
import static java.util.logging.Level.WARNING;
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
import static org.briarproject.bramble.util.LogUtils.logException;
@NotNullByDefault @NotNullByDefault
class SyncConnection extends Connection { class SyncConnection extends Connection {
@@ -34,6 +40,17 @@ class SyncConnection extends Connection {
this.transportPropertyManager = transportPropertyManager; this.transportPropertyManager = transportPropertyManager;
} }
@Nullable
StreamContext allocateStreamContext(ContactId contactId,
TransportId transportId) {
try {
return keyManager.getStreamContext(contactId, transportId);
} catch (DbException e) {
logException(LOG, WARNING, e);
return null;
}
}
SyncSession createIncomingSession(StreamContext ctx, SyncSession createIncomingSession(StreamContext ctx,
TransportConnectionReader r) throws IOException { TransportConnectionReader r) throws IOException {
InputStream streamReader = streamReaderFactory.createStreamReader( InputStream streamReader = streamReaderFactory.createStreamReader(