Improved connection management, preventing multiple connections to the same node, and improved broadcast handling.
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user