diff --git a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java index c1dfc0072419a3b80b1ead10f4222926de3fb0d4..63125cc02c9f195edd72f80baabf8e4ee9dd885e 100644 --- a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java +++ b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java @@ -2,7 +2,6 @@ package org.briarproject.api.db; import org.briarproject.api.Settings; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.identity.Author; @@ -19,8 +18,6 @@ import org.briarproject.api.sync.Offer; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.transport.TransportKeys; import java.io.IOException; @@ -125,21 +122,6 @@ public interface DatabaseComponent { SubscriptionUpdate generateSubscriptionUpdate(ContactId c, int maxLatency) throws DbException; - /** - * Returns a batch of transport acks for the given contact, or null if no - * transport acks are due. - */ - Collection<TransportAck> generateTransportAcks(ContactId c) - throws DbException; - - /** - * Returns a batch of transport updates for the given contact, for - * transmission over a transport with the given latency. Returns null if no - * updates are due. - */ - Collection<TransportUpdate> generateTransportUpdates(ContactId c, - int maxLatency) throws DbException; - /** * Returns all groups belonging to the given client to which the user could * subscribe. @@ -173,13 +155,6 @@ public interface DatabaseComponent { /** Returns all local pseudonyms. */ Collection<LocalAuthor> getLocalAuthors() throws DbException; - /** Returns the local transport properties for all transports. */ - Map<TransportId, TransportProperties> getLocalProperties() - throws DbException; - - /** Returns the local transport properties for the given transport. */ - TransportProperties getLocalProperties(TransportId t) throws DbException; - /** * Returns the IDs of any messages that need to be validated by the given * client. @@ -210,10 +185,6 @@ public interface DatabaseComponent { MessageStatus getMessageStatus(ContactId c, MessageId m) throws DbException; - /** Returns all remote transport properties for the given transport. */ - Map<ContactId, TransportProperties> getRemoteProperties(TransportId t) - throws DbException; - /** Returns all settings in the given namespace. */ Settings getSettings(String namespace) throws DbException; @@ -243,13 +214,6 @@ public interface DatabaseComponent { */ void mergeGroupMetadata(GroupId g, Metadata meta) throws DbException; - /** - * Merges the given properties with the existing local properties for the - * given transport. - */ - void mergeLocalProperties(TransportId t, TransportProperties p) - throws DbException; - /** * Merges the given metadata with the existing metadata for the given * message. @@ -282,13 +246,6 @@ public interface DatabaseComponent { void receiveSubscriptionUpdate(ContactId c, SubscriptionUpdate u) throws DbException; - /** Processes a transport ack from the given contact. */ - void receiveTransportAck(ContactId c, TransportAck a) throws DbException; - - /** Processes a transport update from the given contact. */ - void receiveTransportUpdate(ContactId c, TransportUpdate u) - throws DbException; - /** Removes a contact (and all associated state) from the database. */ void removeContact(ContactId c) throws DbException; @@ -320,13 +277,6 @@ public interface DatabaseComponent { void setMessageValidity(Message m, ClientId c, boolean valid) throws DbException; - /** - * Sets the remote transport properties for the given contact, replacing - * any existing properties. - */ - void setRemoteProperties(ContactId c, - Map<TransportId, TransportProperties> p) throws DbException; - /** * Sets the reordering window for the given contact and transport in the * given rotation period. diff --git a/briar-api/src/org/briarproject/api/sync/PacketReader.java b/briar-api/src/org/briarproject/api/sync/PacketReader.java index a942adc7cacd88c6c3c4cc66da03dce2e123d745..8986dd81612383ed9471c17e68e8c98a584f99f4 100644 --- a/briar-api/src/org/briarproject/api/sync/PacketReader.java +++ b/briar-api/src/org/briarproject/api/sync/PacketReader.java @@ -23,10 +23,4 @@ public interface PacketReader { boolean hasSubscriptionUpdate() throws IOException; SubscriptionUpdate readSubscriptionUpdate() throws IOException; - - boolean hasTransportAck() throws IOException; - TransportAck readTransportAck() throws IOException; - - boolean hasTransportUpdate() throws IOException; - TransportUpdate readTransportUpdate() throws IOException; } diff --git a/briar-api/src/org/briarproject/api/sync/PacketTypes.java b/briar-api/src/org/briarproject/api/sync/PacketTypes.java index 2bbeeae06b008bc38e7df96b8731826c05ae8897..2bdc1b66af9c26e7e9b987ef80ec22d8d7f4ca10 100644 --- a/briar-api/src/org/briarproject/api/sync/PacketTypes.java +++ b/briar-api/src/org/briarproject/api/sync/PacketTypes.java @@ -9,6 +9,4 @@ public interface PacketTypes { byte REQUEST = 3; byte SUBSCRIPTION_ACK = 6; byte SUBSCRIPTION_UPDATE = 7; - byte TRANSPORT_ACK = 8; - byte TRANSPORT_UPDATE = 9; } diff --git a/briar-api/src/org/briarproject/api/sync/PacketWriter.java b/briar-api/src/org/briarproject/api/sync/PacketWriter.java index 896b661f45ec484c2edeada512e62c5ccb70bb94..7777a42943433e89e029372324f0acb34d92986f 100644 --- a/briar-api/src/org/briarproject/api/sync/PacketWriter.java +++ b/briar-api/src/org/briarproject/api/sync/PacketWriter.java @@ -22,9 +22,5 @@ public interface PacketWriter { void writeSubscriptionUpdate(SubscriptionUpdate u) throws IOException; - void writeTransportAck(TransportAck a) throws IOException; - - void writeTransportUpdate(TransportUpdate u) throws IOException; - void flush() throws IOException; } diff --git a/briar-api/src/org/briarproject/api/sync/TransportAck.java b/briar-api/src/org/briarproject/api/sync/TransportAck.java deleted file mode 100644 index 160d24dfff062fe6fe838153c8596f35c7a21dee..0000000000000000000000000000000000000000 --- a/briar-api/src/org/briarproject/api/sync/TransportAck.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.briarproject.api.sync; - -import org.briarproject.api.TransportId; - -/** A packet acknowledging a {@link TransportUpdate}. */ -public class TransportAck { - - private final TransportId id; - private final long version; - - public TransportAck(TransportId id, long version) { - this.id = id; - this.version = version; - } - - /** Returns the identifier of the updated transport. */ - public TransportId getId() { - return id; - } - - /** Returns the version number of the acknowledged update. */ - public long getVersion() { - return version; - } -} diff --git a/briar-api/src/org/briarproject/api/sync/TransportUpdate.java b/briar-api/src/org/briarproject/api/sync/TransportUpdate.java deleted file mode 100644 index ea403ba342955f285b4d3baa49f12831de16a0d7..0000000000000000000000000000000000000000 --- a/briar-api/src/org/briarproject/api/sync/TransportUpdate.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.briarproject.api.sync; - -import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; - -/** - * A packet updating the recipient's view of the sender's transport properties. - */ -public class TransportUpdate { - - private final TransportId id; - private final TransportProperties properties; - private final long version; - - public TransportUpdate(TransportId id, TransportProperties properties, - long version) { - this.id = id; - this.properties = properties; - this.version = version; - } - - /** Returns the identifier of the updated transport. */ - public TransportId getId() { - return id; - } - - /** Returns the transport's updated properties. */ - public TransportProperties getProperties() { - return properties; - } - - /** Returns the update's version number. */ - public long getVersion() { - return version; - } -} diff --git a/briar-core/src/org/briarproject/db/Database.java b/briar-core/src/org/briarproject/db/Database.java index 01a7b54bfcfcd1399e6798a4e4afdb15d865b5cb..917744c8029d7fb3593f00b7fe4d86d57a871bdc 100644 --- a/briar-core/src/org/briarproject/db/Database.java +++ b/briar-core/src/org/briarproject/db/Database.java @@ -2,7 +2,6 @@ package org.briarproject.db; import org.briarproject.api.Settings; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.db.DbException; @@ -19,8 +18,6 @@ import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageStatus; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.transport.TransportKeys; import java.io.IOException; @@ -302,22 +299,6 @@ interface Database<T> { */ Collection<LocalAuthor> getLocalAuthors(T txn) throws DbException; - /** - * Returns the local transport properties for all transports. - * <p> - * Locking: read. - */ - Map<TransportId, TransportProperties> getLocalProperties(T txn) - throws DbException; - - /** - * Returns the local transport properties for the given transport. - * <p> - * Locking: read. - */ - TransportProperties getLocalProperties(T txn, TransportId t) - throws DbException; - /** * Returns the metadata for all messages in the given group. * <p> @@ -403,14 +384,6 @@ interface Database<T> { */ byte[] getRawMessage(T txn, MessageId m) throws DbException; - /** - * Returns all remote properties for the given transport. - * <p> - * Locking: read. - */ - Map<ContactId, TransportProperties> getRemoteProperties(T txn, - TransportId t) throws DbException; - /** * Returns the IDs of some messages that are eligible to be sent to the * given contact and have been requested by the contact, up to the given @@ -452,15 +425,6 @@ interface Database<T> { SubscriptionUpdate getSubscriptionUpdate(T txn, ContactId c, int maxLatency) throws DbException; - /** - * Returns a collection of transport acks for the given contact, or null if - * no acks are due. - * <p> - * Locking: write. - */ - Collection<TransportAck> getTransportAcks(T txn, ContactId c) - throws DbException; - /** * Returns all transport keys for the given transport. * <p> @@ -476,16 +440,6 @@ interface Database<T> { */ Map<TransportId, Integer> getTransportLatencies(T txn) throws DbException; - /** - * Returns a collection of transport updates for the given contact and - * updates their expiry times using the given latency, or returns null if - * no updates are due. - * <p> - * Locking: write. - */ - Collection<TransportUpdate> getTransportUpdates(T txn, ContactId c, - int maxLatency) throws DbException; - /** * Returns the IDs of all contacts to which the given group is visible. * <p> @@ -529,15 +483,6 @@ interface Database<T> { void mergeGroupMetadata(T txn, GroupId g, Metadata meta) throws DbException; - /** - * Merges the given properties with the existing local properties for the - * given transport. - * <p> - * Locking: write. - */ - void mergeLocalProperties(T txn, TransportId t, TransportProperties p) - throws DbException; - /* * Merges the given metadata with the existing metadata for the given * message. @@ -689,26 +634,6 @@ interface Database<T> { boolean setGroups(T txn, ContactId c, Collection<Group> groups, long version) throws DbException; - /** - * Sets the remote transport properties for the given contact, replacing - * any existing properties. - * <p> - * Locking: write. - */ - void setRemoteProperties(T txn, ContactId c, - Map<TransportId, TransportProperties> p) throws DbException; - - /** - * Updates the remote transport properties for the given contact and the - * given transport, replacing any existing properties, and returns true, - * unless an update with an equal or higher version number has already been - * received from the contact. - * <p> - * Locking: write. - */ - boolean setRemoteProperties(T txn, ContactId c, TransportId t, - TransportProperties p, long version) throws DbException; - /** * Records a subscription ack from the given contact for the given version, * unless the contact has already acked an equal or higher version. @@ -718,15 +643,6 @@ interface Database<T> { void setSubscriptionUpdateAcked(T txn, ContactId c, long version) throws DbException; - /** - * Records a transport ack from the give contact for the given version, - * unless the contact has already acked an equal or higher version. - * <p> - * Locking: write. - */ - void setTransportUpdateAcked(T txn, ContactId c, TransportId t, - long version) throws DbException; - /** * Makes a group visible or invisible to future contacts by default. * <p> diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java index 85ff594e6c38893fa66e2702dc09411e5d91f0f4..833f850a22bf7bd34dba5079f65095543557b24f 100644 --- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java +++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java @@ -2,7 +2,6 @@ package org.briarproject.db; import org.briarproject.api.Settings; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.db.ContactExistsException; @@ -19,7 +18,6 @@ import org.briarproject.api.db.NoSuchTransportException; import org.briarproject.api.db.StorageStatus; import org.briarproject.api.event.EventBus; import org.briarproject.api.event.LocalSubscriptionsUpdatedEvent; -import org.briarproject.api.event.LocalTransportsUpdatedEvent; import org.briarproject.api.event.MessageAddedEvent; import org.briarproject.api.event.MessageRequestedEvent; import org.briarproject.api.event.MessageToAckEvent; @@ -28,7 +26,6 @@ import org.briarproject.api.event.MessageValidatedEvent; import org.briarproject.api.event.MessagesAckedEvent; import org.briarproject.api.event.MessagesSentEvent; import org.briarproject.api.event.RemoteSubscriptionsUpdatedEvent; -import org.briarproject.api.event.RemoteTransportsUpdatedEvent; import org.briarproject.api.event.SettingsUpdatedEvent; import org.briarproject.api.event.SubscriptionAddedEvent; import org.briarproject.api.event.SubscriptionRemovedEvent; @@ -49,8 +46,6 @@ import org.briarproject.api.sync.Offer; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.transport.TransportKeys; import java.io.IOException; @@ -475,47 +470,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } } - public Collection<TransportAck> generateTransportAcks(ContactId c) - throws DbException { - lock.writeLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsContact(txn, c)) - throw new NoSuchContactException(); - Collection<TransportAck> acks = db.getTransportAcks(txn, c); - db.commitTransaction(txn); - return acks; - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.writeLock().unlock(); - } - } - - public Collection<TransportUpdate> generateTransportUpdates(ContactId c, - int maxLatency) throws DbException { - lock.writeLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsContact(txn, c)) - throw new NoSuchContactException(); - Collection<TransportUpdate> updates = - db.getTransportUpdates(txn, c, maxLatency); - db.commitTransaction(txn); - return updates; - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.writeLock().unlock(); - } - } - public Collection<Group> getAvailableGroups(ClientId c) throws DbException { lock.readLock().lock(); try { @@ -679,45 +633,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } } - public Map<TransportId, TransportProperties> getLocalProperties() - throws DbException { - lock.readLock().lock(); - try { - T txn = db.startTransaction(); - try { - Map<TransportId, TransportProperties> properties = - db.getLocalProperties(txn); - db.commitTransaction(txn); - return properties; - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.readLock().unlock(); - } - } - - public TransportProperties getLocalProperties(TransportId t) - throws DbException { - lock.readLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsTransport(txn, t)) - throw new NoSuchTransportException(); - TransportProperties properties = db.getLocalProperties(txn, t); - db.commitTransaction(txn); - return properties; - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.readLock().unlock(); - } - } - public Collection<MessageId> getMessagesToValidate(ClientId c) throws DbException { lock.readLock().lock(); @@ -840,25 +755,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } } - public Map<ContactId, TransportProperties> getRemoteProperties( - TransportId t) throws DbException { - lock.readLock().lock(); - try { - T txn = db.startTransaction(); - try { - Map<ContactId, TransportProperties> properties = - db.getRemoteProperties(txn, t); - db.commitTransaction(txn); - return properties; - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.readLock().unlock(); - } - } - public Settings getSettings(String namespace) throws DbException { lock.readLock().lock(); try { @@ -992,30 +888,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } } - public void mergeLocalProperties(TransportId t, TransportProperties p) - throws DbException { - boolean changed = false; - lock.writeLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsTransport(txn, t)) - throw new NoSuchTransportException(); - if (!p.equals(db.getLocalProperties(txn, t))) { - db.mergeLocalProperties(txn, t, p); - changed = true; - } - db.commitTransaction(txn); - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.writeLock().unlock(); - } - if (changed) eventBus.broadcast(new LocalTransportsUpdatedEvent()); - } - public void mergeMessageMetadata(MessageId m, Metadata meta) throws DbException { lock.writeLock().lock(); @@ -1208,52 +1080,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { if (updated) eventBus.broadcast(new RemoteSubscriptionsUpdatedEvent(c)); } - public void receiveTransportAck(ContactId c, TransportAck a) - throws DbException { - lock.writeLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsContact(txn, c)) - throw new NoSuchContactException(); - if (!db.containsTransport(txn, a.getId())) - throw new NoSuchTransportException(); - db.setTransportUpdateAcked(txn, c, a.getId(), a.getVersion()); - db.commitTransaction(txn); - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.writeLock().unlock(); - } - } - - public void receiveTransportUpdate(ContactId c, TransportUpdate u) - throws DbException { - boolean updated; - lock.writeLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsContact(txn, c)) - throw new NoSuchContactException(); - TransportId t = u.getId(); - TransportProperties p = u.getProperties(); - long version = u.getVersion(); - updated = db.setRemoteProperties(txn, c, t, p, version); - db.commitTransaction(txn); - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.writeLock().unlock(); - } - if (updated) - eventBus.broadcast(new RemoteTransportsUpdatedEvent(c, u.getId())); - } - public void removeContact(ContactId c) throws DbException { lock.writeLock().lock(); try { @@ -1390,25 +1216,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { eventBus.broadcast(new MessageValidatedEvent(m, c, false, valid)); } - public void setRemoteProperties(ContactId c, - Map<TransportId, TransportProperties> p) throws DbException { - lock.writeLock().lock(); - try { - T txn = db.startTransaction(); - try { - if (!db.containsContact(txn, c)) - throw new NoSuchContactException(); - db.setRemoteProperties(txn, c, p); - db.commitTransaction(txn); - } catch (DbException e) { - db.abortTransaction(txn); - throw e; - } - } finally { - lock.writeLock().unlock(); - } - } - public void setReorderingWindow(ContactId c, TransportId t, long rotationPeriod, long base, byte[] bitmap) throws DbException { lock.writeLock().lock(); diff --git a/briar-core/src/org/briarproject/db/JdbcDatabase.java b/briar-core/src/org/briarproject/db/JdbcDatabase.java index 69ed999735fafb8987e616884538afca71765a2c..fc892e513341571d8b8863ef90925a8aa9d4c4ea 100644 --- a/briar-core/src/org/briarproject/db/JdbcDatabase.java +++ b/briar-core/src/org/briarproject/db/JdbcDatabase.java @@ -2,7 +2,6 @@ package org.briarproject.db; import org.briarproject.api.Settings; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.crypto.SecretKey; @@ -21,8 +20,6 @@ import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageStatus; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.system.Clock; import org.briarproject.api.transport.IncomingKeys; import org.briarproject.api.transport.OutgoingKeys; @@ -210,64 +207,6 @@ abstract class JdbcDatabase implements Database<Connection> { + " maxLatency INT NOT NULL," + " PRIMARY KEY (transportId))"; - private static final String CREATE_TRANSPORT_CONFIGS = - "CREATE TABLE transportConfigs" - + " (transportId VARCHAR NOT NULL," - + " key VARCHAR NOT NULL," - + " value VARCHAR NOT NULL," - + " PRIMARY KEY (transportId, key)," - + " FOREIGN KEY (transportId)" - + " REFERENCES transports (transportId)" - + " ON DELETE CASCADE)"; - - private static final String CREATE_TRANSPORT_PROPS = - "CREATE TABLE transportProperties" - + " (transportId VARCHAR NOT NULL," - + " key VARCHAR NOT NULL," - + " value VARCHAR NOT NULL," - + " PRIMARY KEY (transportId, key)," - + " FOREIGN KEY (transportId)" - + " REFERENCES transports (transportId)" - + " ON DELETE CASCADE)"; - - private static final String CREATE_TRANSPORT_VERSIONS = - "CREATE TABLE transportVersions" - + " (contactId INT NOT NULL," - + " transportId VARCHAR NOT NULL," - + " localVersion BIGINT NOT NULL," - + " localAcked BIGINT NOT NULL," - + " expiry BIGINT NOT NULL," - + " txCount INT NOT NULL," - + " PRIMARY KEY (contactId, transportId)," - + " FOREIGN KEY (contactId)" - + " REFERENCES contacts (contactId)" - + " ON DELETE CASCADE," - + " FOREIGN KEY (transportId)" - + " REFERENCES transports (transportId)" - + " ON DELETE CASCADE)"; - - private static final String CREATE_CONTACT_TRANSPORT_PROPS = - "CREATE TABLE contactTransportProperties" - + " (contactId INT NOT NULL," - + " transportId VARCHAR NOT NULL," // Not a foreign key - + " key VARCHAR NOT NULL," - + " value VARCHAR NOT NULL," - + " PRIMARY KEY (contactId, transportId, key)," - + " FOREIGN KEY (contactId)" - + " REFERENCES contacts (contactId)" - + " ON DELETE CASCADE)"; - - private static final String CREATE_CONTACT_TRANSPORT_VERSIONS = - "CREATE TABLE contactTransportVersions" - + " (contactId INT NOT NULL," - + " transportId VARCHAR NOT NULL," // Not a foreign key - + " remoteVersion BIGINT NOT NULL," - + " remoteAcked BOOLEAN NOT NULL," - + " PRIMARY KEY (contactId, transportId)," - + " FOREIGN KEY (contactId)" - + " REFERENCES contacts (contactId)" - + " ON DELETE CASCADE)"; - private static final String CREATE_INCOMING_KEYS = "CREATE TABLE incomingKeys" + " (contactId INT NOT NULL," @@ -405,11 +344,6 @@ abstract class JdbcDatabase implements Database<Connection> { s.executeUpdate(insertTypeNames(CREATE_OFFERS)); s.executeUpdate(insertTypeNames(CREATE_STATUSES)); s.executeUpdate(insertTypeNames(CREATE_TRANSPORTS)); - s.executeUpdate(insertTypeNames(CREATE_TRANSPORT_CONFIGS)); - s.executeUpdate(insertTypeNames(CREATE_TRANSPORT_PROPS)); - s.executeUpdate(insertTypeNames(CREATE_TRANSPORT_VERSIONS)); - s.executeUpdate(insertTypeNames(CREATE_CONTACT_TRANSPORT_PROPS)); - s.executeUpdate(insertTypeNames(CREATE_CONTACT_TRANSPORT_VERSIONS)); s.executeUpdate(insertTypeNames(CREATE_INCOMING_KEYS)); s.executeUpdate(insertTypeNames(CREATE_OUTGOING_KEYS)); s.close(); @@ -629,31 +563,6 @@ abstract class JdbcDatabase implements Database<Connection> { affected = ps.executeUpdate(); if (affected != 1) throw new DbStateException(); ps.close(); - // Create a transport version row for each local transport - sql = "SELECT transportId FROM transports"; - ps = txn.prepareStatement(sql); - rs = ps.executeQuery(); - Collection<String> transports = new ArrayList<String>(); - while (rs.next()) transports.add(rs.getString(1)); - rs.close(); - ps.close(); - if (transports.isEmpty()) return c; - sql = "INSERT INTO transportVersions (contactId, transportId," - + " localVersion, localAcked, expiry, txCount)" - + " VALUES (?, ?, 1, 0, 0, 0)"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - for (String t : transports) { - ps.setString(2, t); - ps.addBatch(); - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != transports.size()) - throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } - ps.close(); return c; } catch (SQLException e) { tryToClose(rs); @@ -851,30 +760,6 @@ abstract class JdbcDatabase implements Database<Connection> { int affected = ps.executeUpdate(); if (affected != 1) throw new DbStateException(); ps.close(); - // Create a transport version row for each contact - sql = "SELECT contactId FROM contacts"; - ps = txn.prepareStatement(sql); - rs = ps.executeQuery(); - Collection<Integer> contacts = new ArrayList<Integer>(); - while (rs.next()) contacts.add(rs.getInt(1)); - rs.close(); - ps.close(); - if (contacts.isEmpty()) return true; - sql = "INSERT INTO transportVersions (contactId, transportId," - + " localVersion, localAcked, expiry, txCount)" - + " VALUES (?, ?, 1, 0, 0, 0)"; - ps = txn.prepareStatement(sql); - ps.setString(2, t.getString()); - for (Integer c : contacts) { - ps.setInt(1, c); - ps.addBatch(); - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != contacts.size()) - throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } return true; } catch (SQLException e) { tryToClose(ps); @@ -1415,62 +1300,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public Map<TransportId, TransportProperties> getLocalProperties( - Connection txn) throws DbException { - PreparedStatement ps = null; - ResultSet rs = null; - try { - String sql = "SELECT transportId, key, value" - + " FROM transportProperties" - + " ORDER BY transportId"; - ps = txn.prepareStatement(sql); - rs = ps.executeQuery(); - Map<TransportId, TransportProperties> properties = - new HashMap<TransportId, TransportProperties>(); - TransportId lastId = null; - TransportProperties p = null; - while (rs.next()) { - TransportId id = new TransportId(rs.getString(1)); - String key = rs.getString(2), value = rs.getString(3); - if (!id.equals(lastId)) { - p = new TransportProperties(); - properties.put(id, p); - lastId = id; - } - p.put(key, value); - } - rs.close(); - ps.close(); - return Collections.unmodifiableMap(properties); - } catch (SQLException e) { - tryToClose(rs); - tryToClose(ps); - throw new DbException(e); - } - } - - public TransportProperties getLocalProperties(Connection txn, TransportId t) - throws DbException { - PreparedStatement ps = null; - ResultSet rs = null; - try { - String sql = "SELECT key, value FROM transportProperties" - + " WHERE transportId = ?"; - ps = txn.prepareStatement(sql); - ps.setString(1, t.getString()); - rs = ps.executeQuery(); - TransportProperties p = new TransportProperties(); - while (rs.next()) p.put(rs.getString(1), rs.getString(2)); - rs.close(); - ps.close(); - return p; - } catch (SQLException e) { - tryToClose(rs); - tryToClose(ps); - throw new DbException(e); - } - } - public Map<MessageId, Metadata> getMessageMetadata(Connection txn, GroupId g) throws DbException { PreparedStatement ps = null; @@ -1773,42 +1602,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public Map<ContactId, TransportProperties> getRemoteProperties( - Connection txn, TransportId t) throws DbException { - PreparedStatement ps = null; - ResultSet rs = null; - try { - String sql = "SELECT contactId, key, value" - + " FROM contactTransportProperties" - + " WHERE transportId = ?" - + " ORDER BY contactId"; - ps = txn.prepareStatement(sql); - ps.setString(1, t.getString()); - rs = ps.executeQuery(); - Map<ContactId, TransportProperties> properties = - new HashMap<ContactId, TransportProperties>(); - ContactId lastId = null; - TransportProperties p = null; - while (rs.next()) { - ContactId id = new ContactId(rs.getInt(1)); - String key = rs.getString(2), value = rs.getString(3); - if (!id.equals(lastId)) { - p = new TransportProperties(); - properties.put(id, p); - lastId = id; - } - p.put(key, value); - } - rs.close(); - ps.close(); - return Collections.unmodifiableMap(properties); - } catch (SQLException e) { - tryToClose(rs); - tryToClose(ps); - throw new DbException(e); - } - } - public Collection<MessageId> getRequestedMessagesToSend(Connection txn, ContactId c, int maxLength) throws DbException { long now = clock.currentTimeMillis(); @@ -1996,48 +1789,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public Collection<TransportAck> getTransportAcks(Connection txn, - ContactId c) throws DbException { - PreparedStatement ps = null; - ResultSet rs = null; - try { - String sql = "SELECT transportId, remoteVersion" - + " FROM contactTransportVersions" - + " WHERE contactId = ? AND remoteAcked = FALSE"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - rs = ps.executeQuery(); - List<TransportAck> acks = new ArrayList<TransportAck>(); - while (rs.next()) { - TransportId id = new TransportId(rs.getString(1)); - acks.add(new TransportAck(id, rs.getLong(2))); - } - rs.close(); - ps.close(); - if (acks.isEmpty()) return null; - sql = "UPDATE contactTransportVersions SET remoteAcked = TRUE" - + " WHERE contactId = ? AND transportId = ?"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - for (TransportAck a : acks) { - ps.setString(2, a.getId().getString()); - ps.addBatch(); - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != acks.size()) - throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } - ps.close(); - return Collections.unmodifiableList(acks); - } catch (SQLException e) { - tryToClose(ps); - tryToClose(rs); - throw new DbException(e); - } - } - public Map<ContactId, TransportKeys> getTransportKeys(Connection txn, TransportId t) throws DbException { PreparedStatement ps = null; @@ -2123,72 +1874,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public Collection<TransportUpdate> getTransportUpdates(Connection txn, - ContactId c, int maxLatency) throws DbException { - long now = clock.currentTimeMillis(); - PreparedStatement ps = null; - ResultSet rs = null; - try { - String sql = "SELECT tp.transportId, key, value, localVersion," - + " txCount" - + " FROM transportProperties AS tp" - + " JOIN transportVersions AS tv" - + " ON tp.transportId = tv.transportId" - + " WHERE tv.contactId = ?" - + " AND localVersion > localAcked" - + " AND expiry < ?" - + " ORDER BY tp.transportId"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - ps.setLong(2, now); - rs = ps.executeQuery(); - List<TransportUpdate> updates = new ArrayList<TransportUpdate>(); - TransportId lastId = null; - TransportProperties p = null; - List<Integer> txCounts = new ArrayList<Integer>(); - while (rs.next()) { - TransportId id = new TransportId(rs.getString(1)); - String key = rs.getString(2), value = rs.getString(3); - long version = rs.getLong(4); - int txCount = rs.getInt(5); - if (!id.equals(lastId)) { - p = new TransportProperties(); - updates.add(new TransportUpdate(id, p, version)); - txCounts.add(txCount); - lastId = id; - } - p.put(key, value); - } - rs.close(); - ps.close(); - if (updates.isEmpty()) return null; - sql = "UPDATE transportVersions" - + " SET expiry = ?, txCount = txCount + 1" - + " WHERE contactId = ? AND transportId = ?"; - ps = txn.prepareStatement(sql); - ps.setInt(2, c.getInt()); - int i = 0; - for (TransportUpdate u : updates) { - int txCount = txCounts.get(i++); - ps.setLong(1, calculateExpiry(now, maxLatency, txCount)); - ps.setString(3, u.getId().getString()); - ps.addBatch(); - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != updates.size()) - throw new DbStateException(); - for (i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } - ps.close(); - return Collections.unmodifiableList(updates); - } catch (SQLException e) { - tryToClose(ps); - tryToClose(rs); - throw new DbException(e); - } - } - public Collection<ContactId> getVisibility(Connection txn, GroupId g) throws DbException { PreparedStatement ps = null; @@ -2282,73 +1967,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public void mergeLocalProperties(Connection txn, TransportId t, - TransportProperties p) throws DbException { - // Merge the new properties with the existing ones - mergeStringMap(txn, t, p, "transportProperties"); - // Bump the transport version - PreparedStatement ps = null; - try { - String sql = "UPDATE transportVersions" - + " SET localVersion = localVersion + 1, expiry = 0" - + " WHERE transportId = ?"; - ps = txn.prepareStatement(sql); - ps.setString(1, t.getString()); - ps.executeUpdate(); - ps.close(); - } catch (SQLException e) { - tryToClose(ps); - throw new DbException(e); - } - } - - private void mergeStringMap(Connection txn, TransportId t, - Map<String, String> m, String tableName) throws DbException { - PreparedStatement ps = null; - try { - // Update any properties that already exist - String sql = "UPDATE " + tableName + " SET value = ?" - + " WHERE transportId = ? AND key = ?"; - ps = txn.prepareStatement(sql); - ps.setString(2, t.getString()); - for (Entry<String, String> e : m.entrySet()) { - ps.setString(1, e.getValue()); - ps.setString(3, e.getKey()); - ps.addBatch(); - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != m.size()) throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] < 0) throw new DbStateException(); - if (batchAffected[i] > 1) throw new DbStateException(); - } - // Insert any properties that don't already exist - sql = "INSERT INTO " + tableName + " (transportId, key, value)" - + " VALUES (?, ?, ?)"; - ps = txn.prepareStatement(sql); - ps.setString(1, t.getString()); - int updateIndex = 0, inserted = 0; - for (Entry<String, String> e : m.entrySet()) { - if (batchAffected[updateIndex] == 0) { - ps.setString(2, e.getKey()); - ps.setString(3, e.getValue()); - ps.addBatch(); - inserted++; - } - updateIndex++; - } - batchAffected = ps.executeBatch(); - if (batchAffected.length != inserted) throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } - ps.close(); - } catch (SQLException e) { - tryToClose(ps); - throw new DbException(e); - } - } - public void mergeGroupMetadata(Connection txn, GroupId g, Metadata meta) throws DbException { mergeMetadata(txn, g.getBytes(), meta, "groupMetadata", "groupId"); @@ -2894,127 +2512,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public void setRemoteProperties(Connection txn, ContactId c, - Map<TransportId, TransportProperties> p) throws DbException { - PreparedStatement ps = null; - try { - // Delete the existing properties, if any - String sql = "DELETE FROM contactTransportProperties" - + " WHERE contactId = ?"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - ps.executeUpdate(); - ps.close(); - // Store the new properties - sql = "INSERT INTO contactTransportProperties" - + " (contactId, transportId, key, value)" - + " VALUES (?, ?, ?, ?)"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - int batchSize = 0; - for (Entry<TransportId, TransportProperties> e : p.entrySet()) { - ps.setString(2, e.getKey().getString()); - for (Entry<String, String> e1 : e.getValue().entrySet()) { - ps.setString(3, e1.getKey()); - ps.setString(4, e1.getValue()); - ps.addBatch(); - batchSize++; - } - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != batchSize) throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } - ps.close(); - } catch (SQLException e) { - tryToClose(ps); - throw new DbException(e); - } - } - - public boolean setRemoteProperties(Connection txn, ContactId c, - TransportId t, TransportProperties p, long version) - throws DbException { - PreparedStatement ps = null; - ResultSet rs = null; - try { - // Find the existing version, if any - String sql = "SELECT NULL FROM contactTransportVersions" - + " WHERE contactId = ? AND transportId = ?"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - ps.setString(2, t.getString()); - rs = ps.executeQuery(); - boolean found = rs.next(); - if (rs.next()) throw new DbStateException(); - rs.close(); - ps.close(); - // Mark the update as needing to be acked - if (found) { - // The row exists - update it - sql = "UPDATE contactTransportVersions" - + " SET remoteVersion = ?, remoteAcked = FALSE" - + " WHERE contactId = ? AND transportId = ?" - + " AND remoteVersion < ?"; - ps = txn.prepareStatement(sql); - ps.setLong(1, version); - ps.setInt(2, c.getInt()); - ps.setString(3, t.getString()); - ps.setLong(4, version); - int affected = ps.executeUpdate(); - if (affected < 0 || affected > 1) throw new DbStateException(); - ps.close(); - // Return false if the update is obsolete - if (affected == 0) return false; - } else { - // The row doesn't exist - create it - sql = "INSERT INTO contactTransportVersions (contactId," - + " transportId, remoteVersion, remoteAcked)" - + " VALUES (?, ?, ?, FALSE)"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - ps.setString(2, t.getString()); - ps.setLong(3, version); - int affected = ps.executeUpdate(); - if (affected != 1) throw new DbStateException(); - ps.close(); - } - // Delete the existing properties, if any - sql = "DELETE FROM contactTransportProperties" - + " WHERE contactId = ? AND transportId = ?"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - ps.setString(2, t.getString()); - ps.executeUpdate(); - ps.close(); - // Store the new properties, if any - if (p.isEmpty()) return true; - sql = "INSERT INTO contactTransportProperties" - + " (contactId, transportId, key, value)" - + " VALUES (?, ?, ?, ?)"; - ps = txn.prepareStatement(sql); - ps.setInt(1, c.getInt()); - ps.setString(2, t.getString()); - for (Entry<String, String> e : p.entrySet()) { - ps.setString(3, e.getKey()); - ps.setString(4, e.getValue()); - ps.addBatch(); - } - int[] batchAffected = ps.executeBatch(); - if (batchAffected.length != p.size()) throw new DbStateException(); - for (int i = 0; i < batchAffected.length; i++) { - if (batchAffected[i] != 1) throw new DbStateException(); - } - ps.close(); - return true; - } catch (SQLException e) { - tryToClose(ps); - tryToClose(rs); - throw new DbException(e); - } - } - public void setSubscriptionUpdateAcked(Connection txn, ContactId c, long version) throws DbException { PreparedStatement ps = null; @@ -3036,28 +2533,6 @@ abstract class JdbcDatabase implements Database<Connection> { } } - public void setTransportUpdateAcked(Connection txn, ContactId c, - TransportId t, long version) throws DbException { - PreparedStatement ps = null; - try { - String sql = "UPDATE transportVersions SET localAcked = ?" - + " WHERE contactId = ? AND transportId = ?" - + " AND localAcked < ? AND localVersion >= ?"; - ps = txn.prepareStatement(sql); - ps.setLong(1, version); - ps.setInt(2, c.getInt()); - ps.setString(3, t.getString()); - ps.setLong(4, version); - ps.setLong(5, version); - int affected = ps.executeUpdate(); - if (affected < 0 || affected > 1) throw new DbStateException(); - ps.close(); - } catch (SQLException e) { - tryToClose(ps); - throw new DbException(e); - } - } - public void setVisibleToAll(Connection txn, GroupId g, boolean all) throws DbException { PreparedStatement ps = null; diff --git a/briar-core/src/org/briarproject/property/TransportPropertyManagerImpl.java b/briar-core/src/org/briarproject/property/TransportPropertyManagerImpl.java index 355ee55f18e8f689e5b67c7f5a95383cb8793354..1264591e6c86f3436ffe41f198ad70c18ded6346 100644 --- a/briar-core/src/org/briarproject/property/TransportPropertyManagerImpl.java +++ b/briar-core/src/org/briarproject/property/TransportPropertyManagerImpl.java @@ -9,6 +9,7 @@ import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.db.DbException; import org.briarproject.api.property.TransportPropertyManager; +import java.util.Collections; import java.util.Map; // Temporary facade during sync protocol refactoring @@ -24,30 +25,33 @@ class TransportPropertyManagerImpl implements TransportPropertyManager { @Override public Map<TransportId, TransportProperties> getLocalProperties() throws DbException { - return db.getLocalProperties(); + // TODO + return Collections.emptyMap(); } @Override public TransportProperties getLocalProperties(TransportId t) throws DbException { - return db.getLocalProperties(t); + // TODO + return new TransportProperties(); } @Override public Map<ContactId, TransportProperties> getRemoteProperties( TransportId t) throws DbException { - return db.getRemoteProperties(t); + // TODO + return Collections.emptyMap(); } @Override public void mergeLocalProperties(TransportId t, TransportProperties p) throws DbException { - db.mergeLocalProperties(t, p); + // TODO } @Override public void setRemoteProperties(ContactId c, Map<TransportId, TransportProperties> p) throws DbException { - db.setRemoteProperties(c, p); + // TODO } } diff --git a/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java b/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java index 1d14d737875f9da93fe8ea72284270addb65b994..52528de6012720b86f5f6ee2d50190d4859569d8 100644 --- a/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java +++ b/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java @@ -9,13 +9,11 @@ import org.briarproject.api.event.Event; import org.briarproject.api.event.EventBus; import org.briarproject.api.event.EventListener; import org.briarproject.api.event.LocalSubscriptionsUpdatedEvent; -import org.briarproject.api.event.LocalTransportsUpdatedEvent; import org.briarproject.api.event.MessageRequestedEvent; import org.briarproject.api.event.MessageToAckEvent; import org.briarproject.api.event.MessageToRequestEvent; import org.briarproject.api.event.MessageValidatedEvent; import org.briarproject.api.event.RemoteSubscriptionsUpdatedEvent; -import org.briarproject.api.event.RemoteTransportsUpdatedEvent; import org.briarproject.api.event.ShutdownEvent; import org.briarproject.api.event.TransportRemovedEvent; import org.briarproject.api.sync.Ack; @@ -25,8 +23,6 @@ import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; import org.briarproject.api.sync.SyncSession; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.system.Clock; import java.io.IOException; @@ -91,8 +87,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener { eventBus.addListener(this); try { // Start a query for each type of packet, in order of urgency - dbExecutor.execute(new GenerateTransportAcks()); - dbExecutor.execute(new GenerateTransportUpdates()); dbExecutor.execute(new GenerateSubscriptionAck()); dbExecutor.execute(new GenerateSubscriptionUpdate()); dbExecutor.execute(new GenerateAck()); @@ -123,7 +117,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener { now = clock.currentTimeMillis(); if (now >= nextRetxQuery) { // Check for retransmittable packets - dbExecutor.execute(new GenerateTransportUpdates()); dbExecutor.execute(new GenerateSubscriptionUpdate()); dbExecutor.execute(new GenerateBatch()); dbExecutor.execute(new GenerateOffer()); @@ -171,8 +164,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener { dbExecutor.execute(new GenerateSubscriptionUpdate()); dbExecutor.execute(new GenerateOffer()); } - } else if (e instanceof LocalTransportsUpdatedEvent) { - dbExecutor.execute(new GenerateTransportUpdates()); } else if (e instanceof MessageRequestedEvent) { if (((MessageRequestedEvent) e).getContactId().equals(contactId)) dbExecutor.execute(new GenerateBatch()); @@ -189,11 +180,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener { dbExecutor.execute(new GenerateSubscriptionAck()); dbExecutor.execute(new GenerateOffer()); } - } else if (e instanceof RemoteTransportsUpdatedEvent) { - RemoteTransportsUpdatedEvent r = - (RemoteTransportsUpdatedEvent) e; - if (r.getContactId().equals(contactId)) - dbExecutor.execute(new GenerateTransportAcks()); } else if (e instanceof ShutdownEvent) { interrupt(); } else if (e instanceof TransportRemovedEvent) { @@ -414,76 +400,4 @@ class DuplexOutgoingSession implements SyncSession, EventListener { dbExecutor.execute(new GenerateSubscriptionUpdate()); } } - - // This task runs on the database thread - private class GenerateTransportAcks implements Runnable { - - public void run() { - if (interrupted) return; - try { - Collection<TransportAck> acks = - db.generateTransportAcks(contactId); - if (LOG.isLoggable(INFO)) - LOG.info("Generated transport acks: " + (acks != null)); - if (acks != null) writerTasks.add(new WriteTransportAcks(acks)); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - interrupt(); - } - } - } - - // This tasks runs on the writer thread - private class WriteTransportAcks implements ThrowingRunnable<IOException> { - - private final Collection<TransportAck> acks; - - private WriteTransportAcks(Collection<TransportAck> acks) { - this.acks = acks; - } - - public void run() throws IOException { - if (interrupted) return; - for (TransportAck a : acks) packetWriter.writeTransportAck(a); - LOG.info("Sent transport acks"); - dbExecutor.execute(new GenerateTransportAcks()); - } - } - - // This task runs on the database thread - private class GenerateTransportUpdates implements Runnable { - - public void run() { - if (interrupted) return; - try { - Collection<TransportUpdate> t = - db.generateTransportUpdates(contactId, maxLatency); - if (LOG.isLoggable(INFO)) - LOG.info("Generated transport updates: " + (t != null)); - if (t != null) writerTasks.add(new WriteTransportUpdates(t)); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - interrupt(); - } - } - } - - // This task runs on the writer thread - private class WriteTransportUpdates - implements ThrowingRunnable<IOException> { - - private final Collection<TransportUpdate> updates; - - private WriteTransportUpdates(Collection<TransportUpdate> updates) { - this.updates = updates; - } - - public void run() throws IOException { - if (interrupted) return; - for (TransportUpdate u : updates) - packetWriter.writeTransportUpdate(u); - LOG.info("Sent transport updates"); - dbExecutor.execute(new GenerateTransportUpdates()); - } - } } diff --git a/briar-core/src/org/briarproject/sync/IncomingSession.java b/briar-core/src/org/briarproject/sync/IncomingSession.java index 9e8bd2caa95e385b2c761858947b8d168e7cedcd..7c7444664ca84f99c426ab93dca6e8e333711dc0 100644 --- a/briar-core/src/org/briarproject/sync/IncomingSession.java +++ b/briar-core/src/org/briarproject/sync/IncomingSession.java @@ -19,8 +19,6 @@ import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; import org.briarproject.api.sync.SyncSession; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import java.io.IOException; import java.util.concurrent.Executor; @@ -77,12 +75,6 @@ class IncomingSession implements SyncSession, EventListener { } else if (packetReader.hasSubscriptionUpdate()) { SubscriptionUpdate u = packetReader.readSubscriptionUpdate(); dbExecutor.execute(new ReceiveSubscriptionUpdate(u)); - } else if (packetReader.hasTransportAck()) { - TransportAck a = packetReader.readTransportAck(); - dbExecutor.execute(new ReceiveTransportAck(a)); - } else if (packetReader.hasTransportUpdate()) { - TransportUpdate u = packetReader.readTransportUpdate(); - dbExecutor.execute(new ReceiveTransportUpdate(u)); } else { throw new FormatException(); } @@ -216,40 +208,4 @@ class IncomingSession implements SyncSession, EventListener { } } } - - private class ReceiveTransportAck implements Runnable { - - private final TransportAck ack; - - private ReceiveTransportAck(TransportAck ack) { - this.ack = ack; - } - - public void run() { - try { - db.receiveTransportAck(contactId, ack); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - interrupt(); - } - } - } - - private class ReceiveTransportUpdate implements Runnable { - - private final TransportUpdate update; - - private ReceiveTransportUpdate(TransportUpdate update) { - this.update = update; - } - - public void run() { - try { - db.receiveTransportUpdate(contactId, update); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - interrupt(); - } - } - } } diff --git a/briar-core/src/org/briarproject/sync/PacketReaderImpl.java b/briar-core/src/org/briarproject/sync/PacketReaderImpl.java index 2d1a8bfc7ce4f27ffe76bf69c15c57fc822f99e7..8c9a10ada622c317903e837b5cdbda11397e2b71 100644 --- a/briar-core/src/org/briarproject/sync/PacketReaderImpl.java +++ b/briar-core/src/org/briarproject/sync/PacketReaderImpl.java @@ -1,8 +1,6 @@ package org.briarproject.sync; import org.briarproject.api.FormatException; -import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.UniqueId; import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.data.BdfReader; @@ -17,8 +15,6 @@ import org.briarproject.api.sync.PacketReader; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.util.ByteUtils; import java.io.ByteArrayInputStream; @@ -26,21 +22,14 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT; -import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTY_LENGTH; -import static org.briarproject.api.TransportPropertyConstants.MAX_TRANSPORT_ID_LENGTH; import static org.briarproject.api.sync.PacketTypes.ACK; import static org.briarproject.api.sync.PacketTypes.MESSAGE; import static org.briarproject.api.sync.PacketTypes.OFFER; import static org.briarproject.api.sync.PacketTypes.REQUEST; import static org.briarproject.api.sync.PacketTypes.SUBSCRIPTION_ACK; import static org.briarproject.api.sync.PacketTypes.SUBSCRIPTION_UPDATE; -import static org.briarproject.api.sync.PacketTypes.TRANSPORT_ACK; -import static org.briarproject.api.sync.PacketTypes.TRANSPORT_UPDATE; import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH; import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH; import static org.briarproject.api.sync.SyncConstants.PACKET_HEADER_LENGTH; @@ -205,66 +194,4 @@ class PacketReaderImpl implements PacketReader { state = State.BUFFER_EMPTY; return u; } - - public boolean hasTransportAck() throws IOException { - return !eof() && header[1] == TRANSPORT_ACK; - } - - public TransportAck readTransportAck() throws IOException { - if (!hasTransportAck()) throw new FormatException(); - // Set up the reader - InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); - BdfReader r = bdfReaderFactory.createReader(bais); - // Read the start of the payload - r.readListStart(); - // Read the transport ID and version - String idString = r.readString(MAX_TRANSPORT_ID_LENGTH); - if (idString.length() == 0) throw new FormatException(); - TransportId id = new TransportId(idString); - long version = r.readInteger(); - if (version < 0) throw new FormatException(); - // Read the end of the payload - r.readListEnd(); - if (!r.eof()) throw new FormatException(); - state = State.BUFFER_EMPTY; - // Build and return the transport ack - return new TransportAck(id, version); - } - - public boolean hasTransportUpdate() throws IOException { - return !eof() && header[1] == TRANSPORT_UPDATE; - } - - public TransportUpdate readTransportUpdate() throws IOException { - if (!hasTransportUpdate()) throw new FormatException(); - // Set up the reader - InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); - BdfReader r = bdfReaderFactory.createReader(bais); - // Read the start of the payload - r.readListStart(); - // Read the transport ID - String idString = r.readString(MAX_TRANSPORT_ID_LENGTH); - if (idString.length() == 0) throw new FormatException(); - TransportId id = new TransportId(idString); - // Read the transport properties - Map<String, String> p = new HashMap<String, String>(); - r.readDictionaryStart(); - for (int i = 0; !r.hasDictionaryEnd(); i++) { - if (i == MAX_PROPERTIES_PER_TRANSPORT) - throw new FormatException(); - String key = r.readString(MAX_PROPERTY_LENGTH); - String value = r.readString(MAX_PROPERTY_LENGTH); - p.put(key, value); - } - r.readDictionaryEnd(); - // Read the version number - long version = r.readInteger(); - if (version < 0) throw new FormatException(); - // Read the end of the payload - r.readListEnd(); - if (!r.eof()) throw new FormatException(); - state = State.BUFFER_EMPTY; - // Build and return the transport update - return new TransportUpdate(id, new TransportProperties(p), version); - } } diff --git a/briar-core/src/org/briarproject/sync/PacketWriterImpl.java b/briar-core/src/org/briarproject/sync/PacketWriterImpl.java index 449d40f19e233a0ac03fb14562276dc6716f84ae..6ecc62eefd7607d2be9cb4c578720d1a36096fe8 100644 --- a/briar-core/src/org/briarproject/sync/PacketWriterImpl.java +++ b/briar-core/src/org/briarproject/sync/PacketWriterImpl.java @@ -12,8 +12,6 @@ import org.briarproject.api.sync.PacketWriter; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.util.ByteUtils; import java.io.ByteArrayOutputStream; @@ -25,8 +23,6 @@ import static org.briarproject.api.sync.PacketTypes.OFFER; import static org.briarproject.api.sync.PacketTypes.REQUEST; import static org.briarproject.api.sync.PacketTypes.SUBSCRIPTION_ACK; import static org.briarproject.api.sync.PacketTypes.SUBSCRIPTION_UPDATE; -import static org.briarproject.api.sync.PacketTypes.TRANSPORT_ACK; -import static org.briarproject.api.sync.PacketTypes.TRANSPORT_UPDATE; import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH; import static org.briarproject.api.sync.SyncConstants.PACKET_HEADER_LENGTH; import static org.briarproject.api.sync.SyncConstants.PROTOCOL_VERSION; @@ -125,27 +121,6 @@ class PacketWriterImpl implements PacketWriter { writePacket(SUBSCRIPTION_UPDATE); } - public void writeTransportAck(TransportAck a) throws IOException { - if (payload.size() != 0) throw new IllegalStateException(); - BdfWriter w = bdfWriterFactory.createWriter(payload); - w.writeListStart(); - w.writeString(a.getId().getString()); - w.writeInteger(a.getVersion()); - w.writeListEnd(); - writePacket(TRANSPORT_ACK); - } - - public void writeTransportUpdate(TransportUpdate u) throws IOException { - if (payload.size() != 0) throw new IllegalStateException(); - BdfWriter w = bdfWriterFactory.createWriter(payload); - w.writeListStart(); - w.writeString(u.getId().getString()); - w.writeDictionary(u.getProperties()); - w.writeInteger(u.getVersion()); - w.writeListEnd(); - writePacket(TRANSPORT_UPDATE); - } - public void flush() throws IOException { out.flush(); } diff --git a/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java b/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java index f1504b9c825c674a7b8a618165e008fca1cca708..68e319abd262ec2ba892fd84c9755fc2577d96d5 100644 --- a/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java +++ b/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java @@ -15,8 +15,6 @@ import org.briarproject.api.sync.PacketWriter; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; import org.briarproject.api.sync.SyncSession; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import java.io.IOException; import java.util.Collection; @@ -68,7 +66,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener { this.transportId = transportId; this.maxLatency = maxLatency; this.packetWriter = packetWriter; - outstandingQueries = new AtomicInteger(6); // One per type of packet + outstandingQueries = new AtomicInteger(4); // One per type of packet writerTasks = new LinkedBlockingQueue<ThrowingRunnable<IOException>>(); } @@ -76,8 +74,6 @@ class SimplexOutgoingSession implements SyncSession, EventListener { eventBus.addListener(this); try { // Start a query for each type of packet, in order of urgency - dbExecutor.execute(new GenerateTransportAcks()); - dbExecutor.execute(new GenerateTransportUpdates()); dbExecutor.execute(new GenerateSubscriptionAck()); dbExecutor.execute(new GenerateSubscriptionUpdate()); dbExecutor.execute(new GenerateAck()); @@ -264,78 +260,4 @@ class SimplexOutgoingSession implements SyncSession, EventListener { dbExecutor.execute(new GenerateSubscriptionUpdate()); } } - - // This task runs on the database thread - private class GenerateTransportAcks implements Runnable { - - public void run() { - if (interrupted) return; - try { - Collection<TransportAck> acks = - db.generateTransportAcks(contactId); - if (LOG.isLoggable(INFO)) - LOG.info("Generated transport acks: " + (acks != null)); - if (acks == null) decrementOutstandingQueries(); - else writerTasks.add(new WriteTransportAcks(acks)); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - interrupt(); - } - } - } - - // This tasks runs on the writer thread - private class WriteTransportAcks implements ThrowingRunnable<IOException> { - - private final Collection<TransportAck> acks; - - private WriteTransportAcks(Collection<TransportAck> acks) { - this.acks = acks; - } - - public void run() throws IOException { - if (interrupted) return; - for (TransportAck a : acks) packetWriter.writeTransportAck(a); - LOG.info("Sent transport acks"); - dbExecutor.execute(new GenerateTransportAcks()); - } - } - - // This task runs on the database thread - private class GenerateTransportUpdates implements Runnable { - - public void run() { - if (interrupted) return; - try { - Collection<TransportUpdate> t = - db.generateTransportUpdates(contactId, maxLatency); - if (LOG.isLoggable(INFO)) - LOG.info("Generated transport updates: " + (t != null)); - if (t == null) decrementOutstandingQueries(); - else writerTasks.add(new WriteTransportUpdates(t)); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - interrupt(); - } - } - } - - // This task runs on the writer thread - private class WriteTransportUpdates - implements ThrowingRunnable<IOException> { - - private final Collection<TransportUpdate> updates; - - private WriteTransportUpdates(Collection<TransportUpdate> updates) { - this.updates = updates; - } - - public void run() throws IOException { - if (interrupted) return; - for (TransportUpdate u : updates) - packetWriter.writeTransportUpdate(u); - LOG.info("Sent transport updates"); - dbExecutor.execute(new GenerateTransportUpdates()); - } - } } diff --git a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java index 98975f205f2e6cedebc0dff4c377aafe35e22e62..bcd2d4acb85402f78f8b2a4c454c497f88676439 100644 --- a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java +++ b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java @@ -4,7 +4,6 @@ import com.google.inject.Guice; import com.google.inject.Injector; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.ContactId; import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.sync.Ack; @@ -21,7 +20,6 @@ import org.briarproject.api.sync.PacketWriter; import org.briarproject.api.sync.PacketWriterFactory; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.transport.StreamContext; import org.briarproject.api.transport.StreamReaderFactory; import org.briarproject.api.transport.StreamWriterFactory; @@ -56,12 +54,11 @@ public class ProtocolIntegrationTest extends BriarTestCase { private final PacketWriterFactory packetWriterFactory; private final ContactId contactId; + private final TransportId transportId; private final SecretKey tagKey, headerKey; private final Group group; private final Message message, message1; private final Collection<MessageId> messageIds; - private final TransportId transportId; - private final TransportProperties transportProperties; public ProtocolIntegrationTest() throws Exception { Injector i = Guice.createInjector(new TestDatabaseModule(), @@ -74,6 +71,7 @@ public class ProtocolIntegrationTest extends BriarTestCase { packetReaderFactory = i.getInstance(PacketReaderFactory.class); packetWriterFactory = i.getInstance(PacketWriterFactory.class); contactId = new ContactId(234); + transportId = new TransportId("id"); // Create the transport keys tagKey = TestUtils.createSecretKey(); headerKey = TestUtils.createSecretKey(); @@ -91,10 +89,6 @@ public class ProtocolIntegrationTest extends BriarTestCase { message1 = messageFactory.createMessage(group.getId(), timestamp, messageBody.getBytes("UTF-8")); messageIds = Arrays.asList(message.getId(), message1.getId()); - // Create some transport properties - transportId = new TransportId("id"); - transportProperties = new TransportProperties(Collections.singletonMap( - "bar", "baz")); } @Test @@ -124,10 +118,6 @@ public class ProtocolIntegrationTest extends BriarTestCase { Collections.singletonList(group), 1); packetWriter.writeSubscriptionUpdate(su); - TransportUpdate tu = new TransportUpdate(transportId, - transportProperties, 1); - packetWriter.writeTransportUpdate(tu); - streamWriter.flush(); return out.toByteArray(); } @@ -174,13 +164,6 @@ public class ProtocolIntegrationTest extends BriarTestCase { assertEquals(Collections.singletonList(group), su.getGroups()); assertEquals(1, su.getVersion()); - // Read the transport update - assertTrue(packetReader.hasTransportUpdate()); - TransportUpdate tu = packetReader.readTransportUpdate(); - assertEquals(transportId, tu.getId()); - assertEquals(transportProperties, tu.getProperties()); - assertEquals(1, tu.getVersion()); - in.close(); } diff --git a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java index 4aa204bdd731af30a7529631b4a790bd235402bf..dae5884310c064bc7d125cf507992590c823060a 100644 --- a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java +++ b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java @@ -3,7 +3,6 @@ package org.briarproject.db; import org.briarproject.BriarTestCase; import org.briarproject.TestUtils; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.crypto.SecretKey; @@ -18,7 +17,6 @@ import org.briarproject.api.db.NoSuchTransportException; import org.briarproject.api.db.StorageStatus; import org.briarproject.api.event.EventBus; import org.briarproject.api.event.LocalSubscriptionsUpdatedEvent; -import org.briarproject.api.event.LocalTransportsUpdatedEvent; import org.briarproject.api.event.MessageAddedEvent; import org.briarproject.api.event.MessageRequestedEvent; import org.briarproject.api.event.MessageToAckEvent; @@ -42,8 +40,6 @@ import org.briarproject.api.sync.Offer; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionAck; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportAck; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.api.transport.IncomingKeys; import org.briarproject.api.transport.OutgoingKeys; import org.briarproject.api.transport.TransportKeys; @@ -60,7 +56,6 @@ import static org.briarproject.api.sync.SyncConstants.MAX_GROUP_DESCRIPTOR_LENGT import static org.briarproject.db.DatabaseConstants.MAX_OFFERED_MESSAGES; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; @@ -80,7 +75,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { private final Message message; private final Metadata metadata; private final TransportId transportId; - private final TransportProperties transportProperties; private final int maxLatency; private final ContactId contactId; private final Contact contact; @@ -88,7 +82,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { public DatabaseComponentImplTest() { clientId = new ClientId(TestUtils.getRandomId()); groupId = new GroupId(TestUtils.getRandomId()); - ClientId clientId = new ClientId(TestUtils.getRandomId()); byte[] descriptor = new byte[MAX_GROUP_DESCRIPTOR_LENGTH]; group = new Group(groupId, clientId, descriptor); authorId = new AuthorId(TestUtils.getRandomId()); @@ -106,8 +99,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { metadata = new Metadata(); metadata.put("foo", new byte[] {'b', 'a', 'r'}); transportId = new TransportId("id"); - transportProperties = new TransportProperties(Collections.singletonMap( - "bar", "baz")); maxLatency = Integer.MAX_VALUE; contactId = new ContactId(234); contact = new Contact(contactId, author, localAuthorId, @@ -128,9 +119,9 @@ public class DatabaseComponentImplTest extends BriarTestCase { final ShutdownManager shutdown = context.mock(ShutdownManager.class); final EventBus eventBus = context.mock(EventBus.class); context.checking(new Expectations() {{ - exactly(10).of(database).startTransaction(); + exactly(9).of(database).startTransaction(); will(returnValue(txn)); - exactly(10).of(database).commitTransaction(txn); + exactly(9).of(database).commitTransaction(txn); // open() oneOf(database).open(); will(returnValue(false)); @@ -150,9 +141,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { // getContacts() oneOf(database).getContacts(txn); will(returnValue(Collections.singletonList(contact))); - // getRemoteProperties() - oneOf(database).getRemoteProperties(txn, transportId); - will(returnValue(Collections.emptyMap())); // addGroup() oneOf(database).containsGroup(txn, groupId); will(returnValue(false)); @@ -194,8 +182,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { db.addLocalAuthor(localAuthor); assertEquals(contactId, db.addContact(author, localAuthorId)); assertEquals(Collections.singletonList(contact), db.getContacts()); - assertEquals(Collections.emptyMap(), - db.getRemoteProperties(transportId)); db.addGroup(group); // First time - listeners called db.addGroup(group); // Second time - not called assertEquals(Collections.singletonList(group), db.getGroups(clientId)); @@ -310,11 +296,11 @@ public class DatabaseComponentImplTest extends BriarTestCase { final EventBus eventBus = context.mock(EventBus.class); context.checking(new Expectations() {{ // Check whether the contact is in the DB (which it's not) - exactly(21).of(database).startTransaction(); + exactly(17).of(database).startTransaction(); will(returnValue(txn)); - exactly(21).of(database).containsContact(txn, contactId); + exactly(17).of(database).containsContact(txn, contactId); will(returnValue(false)); - exactly(21).of(database).abortTransaction(txn); + exactly(17).of(database).abortTransaction(txn); }}); DatabaseComponent db = createDatabaseComponent(database, eventBus, shutdown); @@ -361,20 +347,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { // Expected } - try { - db.generateTransportAcks(contactId); - fail(); - } catch (NoSuchContactException expected) { - // Expected - } - - try { - db.generateTransportUpdates(contactId, 123); - fail(); - } catch (NoSuchContactException expected) { - // Expected - } - try { db.getContact(contactId); fail(); @@ -443,23 +415,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { // Expected } - try { - TransportAck a = new TransportAck(transportId, 0); - db.receiveTransportAck(contactId, a); - fail(); - } catch (NoSuchContactException expected) { - // Expected - } - - try { - TransportUpdate u = new TransportUpdate(transportId, - transportProperties, 1); - db.receiveTransportUpdate(contactId, u); - fail(); - } catch (NoSuchContactException expected) { - // Expected - } - try { db.removeContact(contactId); fail(); @@ -677,13 +632,13 @@ public class DatabaseComponentImplTest extends BriarTestCase { will(returnValue(contactId)); oneOf(database).commitTransaction(txn); // Check whether the transport is in the DB (which it's not) - exactly(6).of(database).startTransaction(); + exactly(4).of(database).startTransaction(); will(returnValue(txn)); exactly(2).of(database).containsContact(txn, contactId); will(returnValue(true)); - exactly(6).of(database).containsTransport(txn, transportId); + exactly(4).of(database).containsTransport(txn, transportId); will(returnValue(false)); - exactly(6).of(database).abortTransaction(txn); + exactly(4).of(database).abortTransaction(txn); }}); DatabaseComponent db = createDatabaseComponent(database, eventBus, shutdown); @@ -691,13 +646,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { db.addLocalAuthor(localAuthor); assertEquals(contactId, db.addContact(author, localAuthorId)); - try { - db.getLocalProperties(transportId); - fail(); - } catch (NoSuchTransportException expected) { - // Expected - } - try { db.getTransportKeys(transportId); fail(); @@ -705,13 +653,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { // Expected } - try { - db.mergeLocalProperties(transportId, new TransportProperties()); - fail(); - } catch (NoSuchTransportException expected) { - // Expected - } - try { db.incrementStreamCounter(contactId, transportId, 0); fail(); @@ -952,62 +893,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { context.assertIsSatisfied(); } - @Test - public void testGenerateTransportUpdatesNoUpdatesDue() throws Exception { - Mockery context = new Mockery(); - @SuppressWarnings("unchecked") - final Database<Object> database = context.mock(Database.class); - final ShutdownManager shutdown = context.mock(ShutdownManager.class); - final EventBus eventBus = context.mock(EventBus.class); - context.checking(new Expectations() {{ - oneOf(database).startTransaction(); - will(returnValue(txn)); - oneOf(database).containsContact(txn, contactId); - will(returnValue(true)); - oneOf(database).getTransportUpdates(txn, contactId, maxLatency); - will(returnValue(null)); - oneOf(database).commitTransaction(txn); - }}); - DatabaseComponent db = createDatabaseComponent(database, eventBus, - shutdown); - - assertNull(db.generateTransportUpdates(contactId, maxLatency)); - - context.assertIsSatisfied(); - } - - @Test - public void testGenerateTransportUpdates() throws Exception { - Mockery context = new Mockery(); - @SuppressWarnings("unchecked") - final Database<Object> database = context.mock(Database.class); - final ShutdownManager shutdown = context.mock(ShutdownManager.class); - final EventBus eventBus = context.mock(EventBus.class); - context.checking(new Expectations() {{ - oneOf(database).startTransaction(); - will(returnValue(txn)); - oneOf(database).containsContact(txn, contactId); - will(returnValue(true)); - oneOf(database).getTransportUpdates(txn, contactId, maxLatency); - will(returnValue(Collections.singletonList(new TransportUpdate( - transportId, transportProperties, 1)))); - oneOf(database).commitTransaction(txn); - }}); - DatabaseComponent db = createDatabaseComponent(database, eventBus, - shutdown); - - Collection<TransportUpdate> updates = - db.generateTransportUpdates(contactId, maxLatency); - assertNotNull(updates); - assertEquals(1, updates.size()); - TransportUpdate u = updates.iterator().next(); - assertEquals(transportId, u.getId()); - assertEquals(transportProperties, u.getProperties()); - assertEquals(1, u.getVersion()); - - context.assertIsSatisfied(); - } - @Test public void testReceiveAck() throws Exception { Mockery context = new Mockery(); @@ -1253,116 +1138,6 @@ public class DatabaseComponentImplTest extends BriarTestCase { context.assertIsSatisfied(); } - @Test - public void testReceiveTransportAck() throws Exception { - Mockery context = new Mockery(); - @SuppressWarnings("unchecked") - final Database<Object> database = context.mock(Database.class); - final ShutdownManager shutdown = context.mock(ShutdownManager.class); - final EventBus eventBus = context.mock(EventBus.class); - context.checking(new Expectations() {{ - oneOf(database).startTransaction(); - will(returnValue(txn)); - oneOf(database).containsContact(txn, contactId); - will(returnValue(true)); - oneOf(database).containsTransport(txn, transportId); - will(returnValue(true)); - oneOf(database).setTransportUpdateAcked(txn, contactId, - transportId, 1); - oneOf(database).commitTransaction(txn); - }}); - DatabaseComponent db = createDatabaseComponent(database, eventBus, - shutdown); - - TransportAck a = new TransportAck(transportId, 1); - db.receiveTransportAck(contactId, a); - - context.assertIsSatisfied(); - } - - @Test - public void testReceiveTransportUpdate() throws Exception { - Mockery context = new Mockery(); - @SuppressWarnings("unchecked") - final Database<Object> database = context.mock(Database.class); - final ShutdownManager shutdown = context.mock(ShutdownManager.class); - final EventBus eventBus = context.mock(EventBus.class); - context.checking(new Expectations() {{ - oneOf(database).startTransaction(); - will(returnValue(txn)); - oneOf(database).containsContact(txn, contactId); - will(returnValue(true)); - oneOf(database).setRemoteProperties(txn, contactId, transportId, - transportProperties, 1); - oneOf(database).commitTransaction(txn); - }}); - DatabaseComponent db = createDatabaseComponent(database, eventBus, - shutdown); - - TransportUpdate u = new TransportUpdate(transportId, - transportProperties, 1); - db.receiveTransportUpdate(contactId, u); - - context.assertIsSatisfied(); - } - - @Test - public void testChangingLocalTransportPropertiesCallsListeners() - throws Exception { - final TransportProperties properties = - new TransportProperties(Collections.singletonMap("bar", "baz")); - Mockery context = new Mockery(); - @SuppressWarnings("unchecked") - final Database<Object> database = context.mock(Database.class); - final ShutdownManager shutdown = context.mock(ShutdownManager.class); - final EventBus eventBus = context.mock(EventBus.class); - context.checking(new Expectations() {{ - oneOf(database).startTransaction(); - will(returnValue(txn)); - oneOf(database).containsTransport(txn, transportId); - will(returnValue(true)); - oneOf(database).getLocalProperties(txn, transportId); - will(returnValue(new TransportProperties())); - oneOf(database).mergeLocalProperties(txn, transportId, properties); - oneOf(database).commitTransaction(txn); - oneOf(eventBus).broadcast(with(any( - LocalTransportsUpdatedEvent.class))); - }}); - DatabaseComponent db = createDatabaseComponent(database, eventBus, - shutdown); - - db.mergeLocalProperties(transportId, properties); - - context.assertIsSatisfied(); - } - - @Test - public void testNotChangingLocalTransportPropertiesDoesNotCallListeners() - throws Exception { - final TransportProperties properties = - new TransportProperties(Collections.singletonMap("bar", "baz")); - Mockery context = new Mockery(); - @SuppressWarnings("unchecked") - final Database<Object> database = context.mock(Database.class); - final ShutdownManager shutdown = context.mock(ShutdownManager.class); - final EventBus eventBus = context.mock(EventBus.class); - context.checking(new Expectations() {{ - oneOf(database).startTransaction(); - will(returnValue(txn)); - oneOf(database).containsTransport(txn, transportId); - will(returnValue(true)); - oneOf(database).getLocalProperties(txn, transportId); - will(returnValue(properties)); - oneOf(database).commitTransaction(txn); - }}); - DatabaseComponent db = createDatabaseComponent(database, eventBus, - shutdown); - - db.mergeLocalProperties(transportId, properties); - - context.assertIsSatisfied(); - } - @Test public void testChangingVisibilityCallsListeners() throws Exception { final ContactId contactId1 = new ContactId(123); diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java index d6ad4240f83c2cded1a3d866497525c569c2696e..069b7ed8a756f0ea13c3137728168218ee7a83d5 100644 --- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java +++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java @@ -5,7 +5,6 @@ import org.briarproject.TestDatabaseConfig; import org.briarproject.TestUtils; import org.briarproject.api.Settings; import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.contact.ContactId; import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.db.DbException; @@ -137,8 +136,6 @@ public class H2DatabaseTest extends BriarTestCase { db = open(true); txn = db.startTransaction(); assertFalse(db.containsContact(txn, contactId)); - assertEquals(Collections.emptyMap(), - db.getRemoteProperties(txn, transportId)); assertFalse(db.containsGroup(txn, groupId)); assertFalse(db.containsMessage(txn, messageId)); db.commitTransaction(txn); @@ -502,71 +499,6 @@ public class H2DatabaseTest extends BriarTestCase { assertFalse(error.get()); } - @Test - public void testUpdateRemoteTransportProperties() throws Exception { - Database<Connection> db = open(false); - Connection txn = db.startTransaction(); - - // Add a contact with a transport - db.addLocalAuthor(txn, localAuthor); - assertEquals(contactId, db.addContact(txn, author, localAuthorId)); - TransportProperties p = new TransportProperties( - Collections.singletonMap("foo", "bar")); - db.setRemoteProperties(txn, contactId, transportId, p, 1); - assertEquals(Collections.singletonMap(contactId, p), - db.getRemoteProperties(txn, transportId)); - - // Replace the transport properties - TransportProperties p1 = new TransportProperties( - Collections.singletonMap("baz", "bam")); - db.setRemoteProperties(txn, contactId, transportId, p1, 2); - assertEquals(Collections.singletonMap(contactId, p1), - db.getRemoteProperties(txn, transportId)); - - // Remove the transport properties - TransportProperties p2 = new TransportProperties(); - db.setRemoteProperties(txn, contactId, transportId, p2, 3); - assertEquals(Collections.emptyMap(), - db.getRemoteProperties(txn, transportId)); - - db.commitTransaction(txn); - db.close(); - } - - @Test - public void testUpdateLocalTransportProperties() throws Exception { - Database<Connection> db = open(false); - Connection txn = db.startTransaction(); - - // Add a transport to the database - db.addTransport(txn, transportId, 123); - - // Set the transport properties - TransportProperties p = new TransportProperties(); - p.put("foo", "foo"); - p.put("bar", "bar"); - db.mergeLocalProperties(txn, transportId, p); - assertEquals(p, db.getLocalProperties(txn, transportId)); - assertEquals(Collections.singletonMap(transportId, p), - db.getLocalProperties(txn)); - - // Update one of the properties and add another - TransportProperties p1 = new TransportProperties(); - p1.put("bar", "baz"); - p1.put("bam", "bam"); - db.mergeLocalProperties(txn, transportId, p1); - TransportProperties merged = new TransportProperties(); - merged.put("foo", "foo"); - merged.put("bar", "baz"); - merged.put("bam", "bam"); - assertEquals(merged, db.getLocalProperties(txn, transportId)); - assertEquals(Collections.singletonMap(transportId, merged), - db.getLocalProperties(txn)); - - db.commitTransaction(txn); - db.close(); - } - @Test public void testUpdateSettings() throws Exception { Database<Connection> db = open(false); @@ -597,42 +529,6 @@ public class H2DatabaseTest extends BriarTestCase { db.close(); } - @Test - public void testTransportsNotUpdatedIfVersionIsOld() throws Exception { - Database<Connection> db = open(false); - Connection txn = db.startTransaction(); - - // Add a contact - db.addLocalAuthor(txn, localAuthor); - assertEquals(contactId, db.addContact(txn, author, localAuthorId)); - - // Initialise the transport properties with version 1 - TransportProperties p = new TransportProperties( - Collections.singletonMap("foo", "bar")); - assertTrue(db.setRemoteProperties(txn, contactId, transportId, p, 1)); - assertEquals(Collections.singletonMap(contactId, p), - db.getRemoteProperties(txn, transportId)); - - // Replace the transport properties with version 2 - TransportProperties p1 = new TransportProperties( - Collections.singletonMap("baz", "bam")); - assertTrue(db.setRemoteProperties(txn, contactId, transportId, p1, 2)); - assertEquals(Collections.singletonMap(contactId, p1), - db.getRemoteProperties(txn, transportId)); - - // Try to replace the transport properties with version 1 - TransportProperties p2 = new TransportProperties( - Collections.singletonMap("quux", "etc")); - assertFalse(db.setRemoteProperties(txn, contactId, transportId, p2, 1)); - - // Version 2 of the properties should still be there - assertEquals(Collections.singletonMap(contactId, p1), - db.getRemoteProperties(txn, transportId)); - - db.commitTransaction(txn); - db.close(); - } - @Test public void testContainsVisibleMessageRequiresMessageInDatabase() throws Exception { diff --git a/briar-tests/src/org/briarproject/sync/ConstantsTest.java b/briar-tests/src/org/briarproject/sync/ConstantsTest.java index a67afd361459b5c2595134332aa5ce27e03016e2..4d0d498a4adcd5f3be7073ac41f9cb95af1c7504 100644 --- a/briar-tests/src/org/briarproject/sync/ConstantsTest.java +++ b/briar-tests/src/org/briarproject/sync/ConstantsTest.java @@ -8,8 +8,6 @@ import org.briarproject.TestDatabaseModule; import org.briarproject.TestLifecycleModule; import org.briarproject.TestSystemModule; import org.briarproject.TestUtils; -import org.briarproject.api.TransportId; -import org.briarproject.api.TransportProperties; import org.briarproject.api.UniqueId; import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.KeyPair; @@ -34,7 +32,6 @@ import org.briarproject.api.sync.PacketWriter; import org.briarproject.api.sync.PacketWriterFactory; import org.briarproject.api.sync.Request; import org.briarproject.api.sync.SubscriptionUpdate; -import org.briarproject.api.sync.TransportUpdate; import org.briarproject.contact.ContactModule; import org.briarproject.crypto.CryptoModule; import org.briarproject.data.DataModule; @@ -50,9 +47,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Random; -import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT; -import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTY_LENGTH; -import static org.briarproject.api.TransportPropertyConstants.MAX_TRANSPORT_ID_LENGTH; import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH; import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH; import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH; @@ -194,27 +188,6 @@ public class ConstantsTest extends BriarTestCase { testMessageIdsFitIntoRequest(1000); } - @Test - public void testPropertiesFitIntoTransportUpdate() throws Exception { - // Create the maximum number of properties with the maximum length - TransportProperties p = new TransportProperties(); - for (int i = 0; i < MAX_PROPERTIES_PER_TRANSPORT; i++) { - String key = TestUtils.createRandomString(MAX_PROPERTY_LENGTH); - String value = TestUtils.createRandomString(MAX_PROPERTY_LENGTH); - p.put(key, value); - } - // Create a maximum-length transport update - String idString = TestUtils.createRandomString(MAX_TRANSPORT_ID_LENGTH); - TransportId id = new TransportId(idString); - TransportUpdate u = new TransportUpdate(id, p, Long.MAX_VALUE); - // Serialise the update - ByteArrayOutputStream out = new ByteArrayOutputStream(); - PacketWriter writer = packetWriterFactory.createPacketWriter(out); - writer.writeTransportUpdate(u); - // Check the size of the serialised transport update - assertTrue(out.size() <= MAX_PACKET_PAYLOAD_LENGTH); - } - @Test public void testGroupsFitIntoSubscriptionUpdate() throws Exception { // Create the maximum number of maximum-length groups diff --git a/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java b/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java index 3cffb9feb6d3464170fe07b265c4be4b828c1d49..983946f22e634a51c405c6dee458b42d79ea9618 100644 --- a/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java +++ b/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java @@ -52,12 +52,6 @@ public class SimplexOutgoingSessionTest extends BriarTestCase { context.checking(new Expectations() {{ // Add listener oneOf(eventBus).addListener(session); - // No transport acks to send - oneOf(db).generateTransportAcks(contactId); - will(returnValue(null)); - // No transport updates to send - oneOf(db).generateTransportUpdates(contactId, maxLatency); - will(returnValue(null)); // No subscription ack to send oneOf(db).generateSubscriptionAck(contactId); will(returnValue(null)); @@ -92,12 +86,6 @@ public class SimplexOutgoingSessionTest extends BriarTestCase { context.checking(new Expectations() {{ // Add listener oneOf(eventBus).addListener(session); - // No transport acks to send - oneOf(db).generateTransportAcks(contactId); - will(returnValue(null)); - // No transport updates to send - oneOf(db).generateTransportUpdates(contactId, maxLatency); - will(returnValue(null)); // No subscription ack to send oneOf(db).generateSubscriptionAck(contactId); will(returnValue(null));