Improved connection management, preventing multiple connections to the same node, and improved broadcast handling.

This commit is contained in:
2015-06-12 06:57:20 +02:00
parent fe93c95f40
commit bd5bf76904
9 changed files with 172 additions and 20 deletions

View File

@ -75,6 +75,15 @@ public class JdbcAddressRepository extends JdbcHelper implements AddressReposito
return find("subscribed = '1'");
}
@Override
public List<BitmessageAddress> getSubscriptions(long broadcastVersion) {
if (broadcastVersion > 4) {
return find("subscribed = '1' AND version > 3");
} else {
return find("subscribed = '1' AND version <= 3");
}
}
@Override
public List<BitmessageAddress> getContacts() {
return find("private_key IS NULL");
@ -155,12 +164,13 @@ public class JdbcAddressRepository extends JdbcHelper implements AddressReposito
private void insert(BitmessageAddress address) throws IOException, SQLException {
try (Connection connection = config.getConnection()) {
PreparedStatement ps = connection.prepareStatement(
"INSERT INTO Address (address, alias, public_key, private_key, subscribed) VALUES (?, ?, ?, ?, ?)");
"INSERT INTO Address (address, version, alias, public_key, private_key, subscribed) VALUES (?, ?, ?, ?, ?, ?)");
ps.setString(1, address.getAddress());
ps.setString(2, address.getAlias());
writePubkey(ps, 3, address.getPubkey());
writeBlob(ps, 4, address.getPrivateKey());
ps.setBoolean(5, address.isSubscribed());
ps.setLong(2, address.getVersion());
ps.setString(3, address.getAlias());
writePubkey(ps, 4, address.getPubkey());
writeBlob(ps, 5, address.getPrivateKey());
ps.setBoolean(6, address.isSubscribed());
ps.executeUpdate();
}
}

View File

@ -1,5 +1,6 @@
CREATE TABLE Address (
address VARCHAR(40) NOT NULL PRIMARY KEY,
version BIGINT NOT NULL,
alias VARCHAR(255),
public_key BLOB,
private_key BLOB,

View File

@ -81,8 +81,26 @@ public class JdbcAddressRepositoryTest {
@Test
public void testGetSubscriptions() throws Exception {
addSubscription("BM-2cXxfcSetKnbHJX2Y85rSkaVpsdNUZ5q9h");
addSubscription("BM-2D9Vc5rFxxR5vTi53T9gkLfemViHRMVLQZ");
addSubscription("BM-2D9QKN4teYRvoq2fyzpiftPh9WP9qggtzh");
List<BitmessageAddress> subscriptions = repo.getSubscriptions();
assertEquals(0, subscriptions.size());
assertEquals(3, subscriptions.size());
}
@Test
public void testGetSubscriptionsForVersion() throws Exception {
addSubscription("BM-2cXxfcSetKnbHJX2Y85rSkaVpsdNUZ5q9h");
addSubscription("BM-2D9Vc5rFxxR5vTi53T9gkLfemViHRMVLQZ");
addSubscription("BM-2D9QKN4teYRvoq2fyzpiftPh9WP9qggtzh");
List<BitmessageAddress> subscriptions;
subscriptions = repo.getSubscriptions(5);
assertEquals(1, subscriptions.size());
subscriptions = repo.getSubscriptions(4);
assertEquals(2, subscriptions.size());
}
@Test
@ -123,4 +141,10 @@ public class JdbcAddressRepositoryTest {
assertNotNull(address);
assertNotNull(address.getPrivateKey());
}
private void addSubscription(String address) {
BitmessageAddress subscription = new BitmessageAddress(address);
subscription.setSubscribed(true);
repo.save(subscription);
}
}