diff --git a/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeManagerImpl.java index 2d41e67d2..cd7bf4380 100644 --- a/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeManagerImpl.java @@ -83,14 +83,21 @@ public class HandshakeKeyExchangeManagerImpl extends ConversationClientImpl @Override public void onDatabaseOpened(Transaction txn) throws DbException { - if (db.containsGroup(txn, localGroup.getId())) return; - db.addGroup(txn, localGroup); - // Get our own handshake public key handshakePublicKey = identityManager.getHandshakeKeys(txn).getPublic(); - // Set things up for any pre-existing contacts - for (Contact c : db.getContacts(txn)) addingContact(txn, c); + if (!db.containsGroup(txn, localGroup.getId())) { + db.addGroup(txn, localGroup); + + // Set things up for any pre-existing contacts + for (Contact c : db.getContacts(txn)) addingContact(txn, c); + } else { + for (Contact c : db.getContacts(txn)) { + if (c.getHandshakePublicKey() == null) { + sendHandshakePublicKey(txn, c); + } + } + } } @Override @@ -192,7 +199,7 @@ public class HandshakeKeyExchangeManagerImpl extends ConversationClientImpl private void sendHandshakePublicKey(Transaction txn, Contact c) throws DbException { - LOG.info("Sending our handshake public key to " + c.getAlias()); + LOG.info("Sending our handshake public key to " + c.getAuthor().getName()); Group group = getContactGroup(c); GroupId g = group.getId(); if (!db.containsGroup(txn, g)) db.addGroup(txn, group); diff --git a/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeModule.java b/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeModule.java index 925b80e7c..e1cb335f9 100644 --- a/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeModule.java @@ -1,8 +1,11 @@ package org.briarproject.briar.handshakekeyexchange; +import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.contact.ContactManager; +import org.briarproject.bramble.api.data.MetadataEncoder; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.sync.validation.ValidationManager; +import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.handshakekeyexchange.HandshakeKeyExchangeManager; @@ -18,6 +21,9 @@ public class HandshakeKeyExchangeModule { public static class EagerSingletons { @Inject HandshakeKeyExchangeManager handshakeKeyExchangeManager; + + @Inject + HandshakeKeyExchangeValidator handshakeKeyExchangeValidator; } @Provides @@ -41,4 +47,18 @@ public class HandshakeKeyExchangeModule { conversationManager.registerConversationClient(handshakeKeyExchangeManager); return handshakeKeyExchangeManager; } + + @Provides + @Singleton + HandshakeKeyExchangeValidator handshakeKeyExchangeValidator( + ValidationManager validationManager, + ClientHelper clientHelper, + MetadataEncoder metadataEncoder, + Clock clock) { + HandshakeKeyExchangeValidator validator = + new HandshakeKeyExchangeValidator(clientHelper, metadataEncoder, clock); + validationManager.registerMessageValidator(HandshakeKeyExchangeManager.CLIENT_ID, HandshakeKeyExchangeManager.MAJOR_VERSION, + validator); + return validator; + } } diff --git a/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeValidator.java b/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeValidator.java index a030013a2..1a26694c7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeValidator.java +++ b/briar-core/src/main/java/org/briarproject/briar/handshakekeyexchange/HandshakeKeyExchangeValidator.java @@ -4,12 +4,17 @@ import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.client.BdfMessageContext; import org.briarproject.bramble.api.client.BdfMessageValidator; import org.briarproject.bramble.api.client.ClientHelper; +import org.briarproject.bramble.api.data.BdfDictionary; +import org.briarproject.bramble.api.data.BdfEntry; import org.briarproject.bramble.api.data.BdfList; import org.briarproject.bramble.api.data.MetadataEncoder; import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.InvalidMessageException; import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.system.Clock; +import static org.briarproject.briar.handshakekeyexchange.HandshakeKeyExchangeConstants.MSG_KEY_LOCAL; + +import static org.briarproject.bramble.util.ValidationUtils.checkSize; import javax.inject.Inject; @@ -26,6 +31,10 @@ public class HandshakeKeyExchangeValidator extends BdfMessageValidator { @Override protected BdfMessageContext validateMessage(Message m, Group g, BdfList body) throws InvalidMessageException, FormatException { - return null; + checkSize(body,1); + BdfDictionary meta = BdfDictionary.of( + new BdfEntry(MSG_KEY_LOCAL, false) + ); + return new BdfMessageContext(meta); } }