From 85427d7bde13a64cc40e849fc94bad95f8f55404 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Thu, 12 Nov 2015 02:00:04 +0100 Subject: [PATCH] Fix authentication issues, store address --- .../java/io/bitsquare/storage/Storage.java | 33 +- .../trade/offer/OpenOfferManager.java | 6 +- .../io/bitsquare/gui/main/MainViewModel.java | 8 +- .../bitsquare/gui/main/market/MarketView.java | 14 +- .../settings/network/NetworkSettingsView.java | 4 +- gui/src/main/resources/logback.xml | 2 +- .../crypto/SealedAndSignedMessage.java | 8 +- .../main/java/io/bitsquare/p2p/Address.java | 10 +- .../java/io/bitsquare/p2p/P2PService.java | 384 +++++++++--------- .../io/bitsquare/p2p/network/Connection.java | 11 +- .../p2p/network/ConnectionsType.java | 8 + .../p2p/network/LocalhostNetworkNode.java | 4 +- .../io/bitsquare/p2p/network/NetworkNode.java | 18 +- .../p2p/peers/AuthenticationHandshake.java | 213 +++++----- .../p2p/peers/AuthenticationListener.java | 18 - .../io/bitsquare/p2p/peers/PeerGroup.java | 318 ++++++++------- .../io/bitsquare/p2p/peers/PeerListener.java | 16 - .../java/io/bitsquare/p2p/seed/SeedNode.java | 4 +- .../ProtectedExpirableDataStorage.java | 2 +- .../storage/messages/DataExchangeMessage.java | 48 --- .../java/io/bitsquare/p2p/P2PServiceTest.java | 2 +- .../bitsquare/p2p/routing/PeerGroupTest.java | 20 +- 22 files changed, 553 insertions(+), 598 deletions(-) create mode 100644 network/src/main/java/io/bitsquare/p2p/network/ConnectionsType.java delete mode 100644 network/src/main/java/io/bitsquare/p2p/peers/AuthenticationListener.java delete mode 100644 network/src/main/java/io/bitsquare/p2p/peers/PeerListener.java delete mode 100644 network/src/main/java/io/bitsquare/p2p/storage/messages/DataExchangeMessage.java diff --git a/common/src/main/java/io/bitsquare/storage/Storage.java b/common/src/main/java/io/bitsquare/storage/Storage.java index 044149f0a5..49f72d0bee 100644 --- a/common/src/main/java/io/bitsquare/storage/Storage.java +++ b/common/src/main/java/io/bitsquare/storage/Storage.java @@ -78,6 +78,15 @@ public class Storage { this.dir = dir; } + @Nullable + public T initAndGetPersisted(String fileName) { + this.fileName = fileName; + storageFile = new File(dir, fileName); + fileManager = new FileManager<>(dir, storageFile, 600, TimeUnit.MILLISECONDS); + + return getPersisted(); + } + @Nullable public T initAndGetPersisted(T serializable) { return initAndGetPersisted(serializable, serializable.getClass().getSimpleName()); @@ -90,15 +99,23 @@ public class Storage { storageFile = new File(dir, fileName); fileManager = new FileManager<>(dir, storageFile, 600, TimeUnit.MILLISECONDS); - return getPersisted(serializable); + return getPersisted(); + } + + public void queueUpForSave() { + queueUpForSave(serializable); } // Save delayed and on a background thread - public void queueUpForSave() { - log.trace("save " + fileName); - checkNotNull(storageFile, "storageFile = null. Call setupFileStorage before using read/write."); + public void queueUpForSave(T serializable) { + if (serializable != null) { + log.trace("save " + fileName); + checkNotNull(storageFile, "storageFile = null. Call setupFileStorage before using read/write."); - fileManager.saveLater(serializable); + fileManager.saveLater(serializable); + } else { + log.trace("queueUpForSave called but no serializable set"); + } } public void remove(String fileName) { @@ -113,17 +130,17 @@ public class Storage { // We do the file read on the UI thread to avoid problems from multi threading. // Data are small and read is done only at startup, so it is no performance issue. @Nullable - private T getPersisted(T serializable) { + private T getPersisted() { if (storageFile.exists()) { long now = System.currentTimeMillis(); try { T persistedObject = fileManager.read(storageFile); - log.trace("Read {} completed in {}msec", serializable.getClass().getSimpleName(), System.currentTimeMillis() - now); + log.trace("Read {} completed in {}msec", storageFile, System.currentTimeMillis() - now); // If we did not get any exception we can be sure the data are consistent so we make a backup now = System.currentTimeMillis(); fileManager.backupFile(fileName); - log.trace("Backup {} completed in {}msec", serializable.getClass().getSimpleName(), System.currentTimeMillis() - now); + log.trace("Backup {} completed in {}msec", storageFile, System.currentTimeMillis() - now); return persistedObject; } catch (ClassCastException | IOException e) { diff --git a/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java b/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java index 212da5f0f1..58c5393e2c 100644 --- a/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java +++ b/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java @@ -44,6 +44,7 @@ import org.reactfx.util.FxTimer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import javax.inject.Named; import java.io.File; import java.time.Duration; @@ -176,7 +177,7 @@ public class OpenOfferManager { shutDown(null); } - public void shutDown(Runnable completeHandler) { + public void shutDown(@Nullable Runnable completeHandler) { if (timer != null) timer.cancel(); @@ -188,7 +189,8 @@ public class OpenOfferManager { offerBookService.removeOfferAtShutDown(openOffer.getOffer()); } - FxTimer.runLater(Duration.ofMillis(500), completeHandler::run); + if (completeHandler != null) + FxTimer.runLater(Duration.ofMillis(500), completeHandler::run); } } diff --git a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java index 2b8cdb5632..306c927557 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -183,21 +183,23 @@ class MainViewModel implements ViewModel { private BooleanProperty initP2PNetwork() { final BooleanProperty initialDataReady = new SimpleBooleanProperty(); splashP2PNetworkInfo.set("Connecting to Tor network..."); + p2PService.start(new P2PServiceListener() { @Override public void onTorNodeReady() { splashP2PNetworkInfo.set("Publishing Tor Hidden Service..."); + p2PNetworkInfo.set(splashP2PNetworkInfo.get()); p2PNetworkIconId.set("image-connection-tor"); } @Override public void onHiddenServicePublished() { splashP2PNetworkInfo.set("Authenticating to a seed node..."); + p2PNetworkInfo.set(splashP2PNetworkInfo.get()); } @Override public void onRequestingDataCompleted() { - p2PNetworkInfo.set("Publishing Tor Hidden Service..."); initialDataReady.set(true); } @@ -340,14 +342,14 @@ class MainViewModel implements ViewModel { // update nr of peers in footer - p2PService.numAuthenticatedPeers.addListener((observable, oldValue, newValue) -> updateP2pNetworkInfo()); + p2PService.getNumAuthenticatedPeers().addListener((observable, oldValue, newValue) -> updateP2pNetworkInfo()); // now show app showAppScreen.set(true); } private void updateP2pNetworkInfo() { - p2PNetworkInfo.set("Nr. of authenticated connections: " + p2PService.numAuthenticatedPeers.get()); + p2PNetworkInfo.set("Nr. of authenticated connections: " + p2PService.getNumAuthenticatedPeers().get()); } private void displayAlertIfPresent(Alert alert) { diff --git a/gui/src/main/java/io/bitsquare/gui/main/market/MarketView.java b/gui/src/main/java/io/bitsquare/gui/main/market/MarketView.java index b0656a9db8..ee6bae15b9 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/market/MarketView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/market/MarketView.java @@ -17,6 +17,7 @@ package io.bitsquare.gui.main.market; +import io.bitsquare.common.UserThread; import io.bitsquare.common.util.Tuple2; import io.bitsquare.gui.common.view.ActivatableViewAndModel; import io.bitsquare.gui.common.view.FxmlView; @@ -134,7 +135,8 @@ public class MarketView extends ActivatableViewAndModel { String code = newValue.getCode(); areaChart.setTitle("Offer book for " + newValue.getName()); - xAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(xAxis, "", " " + code + "/BTC")); + xAxis.setLabel(priceColumnLabel.get()); + xAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(xAxis, "", "")); priceColumnLabel.set("Price (" + code + "/BTC)"); volumeColumnLabel.set("Volume (" + code + ")"); }); @@ -156,7 +158,7 @@ public class MarketView extends ActivatableViewAndModel tableView = new TableView(); // price - TableColumn priceColumn = new TableColumn<>("Price (EUR/BTC)"); + TableColumn priceColumn = new TableColumn<>(); priceColumn.textProperty().bind(priceColumnLabel); priceColumn.setMinWidth(120); priceColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue())); @@ -237,7 +239,7 @@ public class MarketView extends ActivatableViewAndModel titleLabel.prefWidthProperty().bind(tableView.widthProperty())); VBox vBox = new VBox(); vBox.setSpacing(10); @@ -252,13 +254,13 @@ public class MarketView extends ActivatableViewAndModel updateAuthenticatedPeersTextArea(); - p2PService.numAuthenticatedPeers.addListener(numAuthenticatedPeersChangeListener); + p2PService.getNumAuthenticatedPeers().addListener(numAuthenticatedPeersChangeListener); updateAuthenticatedPeersTextArea(); } @@ -136,7 +136,7 @@ public class NetworkSettingsView extends ActivatableViewAndModel - +