From 13c71cb9d038bc871883f55c3bc61392ed702161 Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Tue, 12 Nov 2024 22:23:49 +0100 Subject: [PATCH 1/8] refactor: split parsing peers into multiple steps The previous code nested too much error handling even though many parts are independent. --- src/freenet/node/PeerManager.java | 94 ++++++++++++++++--------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index 1d6a1a4c2e..024dfafe6a 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -238,58 +238,60 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open BufferedReader br = new BufferedReader(ris); File brokenPeersFile = new File(peersFile.getPath() + ".broken"); DroppedOldPeersUserAlert droppedOldPeers = new DroppedOldPeersUserAlert(brokenPeersFile); - try { // FIXME: no better way? - while(true) { - // Read a single NodePeer - SimpleFieldSet fs; - fs = new SimpleFieldSet(br, false, true); - try { - PeerNode pn = PeerNode.create(fs, node, crypto, opennet, this); - if(oldOpennetPeers) { - if(!(pn instanceof OpennetPeerNode)) - Logger.error(this, "Darknet node in old opennet peers?!: "+pn); - else - opennet.addOldOpennetNode((OpennetPeerNode)pn); - } else - addPeer(pn, true, false); - } catch(FSParseException e2) { - Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); - System.err.println("Cannot parse a friend from the peers file: "+e2); - someBroken = true; - continue; - } catch(PeerParseException e2) { - Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); - System.err.println("Cannot parse a friend from the peers file: "+e2); - someBroken = true; - continue; - } catch(ReferenceSignatureVerificationException e2) { - Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); - System.err.println("Cannot parse a friend from the peers file: "+e2); - someBroken = true; - continue; - } catch (RuntimeException e2) { - Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); - System.err.println("Cannot parse a friend from the peers file: "+e2); - someBroken = true; - continue; - // FIXME tell the user??? - } catch (PeerTooOldException e) { - if(crypto.isOpennet()) { - // Ignore. - Logger.error(this, "Dropping too-old opennet peer"); - } else { - // A lot more noisy! - droppedOldPeers.add(e, fs.get("myName")); - } - someBroken = true; - continue; - } + List peerEntries = new ArrayList<>(); + // read the peers file + try { + while (true) { + peerEntries.add(new SimpleFieldSet(br, false, true)); } } catch(EOFException e) { // End of file, fine } catch(IOException e1) { Logger.error(this, "Could not read peers file: " + e1, e1); } + + List createdNodes = new ArrayList<>(); + for (SimpleFieldSet fs : peerEntries) { + try { + createdNodes.add(PeerNode.create(fs, node, crypto, opennet, this)); + } catch(FSParseException e2) { + Logger.error(this, "Could not parse peer due to broken fieldset syntax: " + e2 + '\n' + fs.toString(), e2); + System.err.println("Cannot parse a friend from the peers file due to broken fieldset syntax: "+e2); + someBroken = true; + } catch(PeerParseException e2) { + Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); + System.err.println("Cannot parse a friend from the peers file: "+e2); + someBroken = true; + } catch(ReferenceSignatureVerificationException e2) { + Logger.error(this, "Could not verify signature of peer: " + e2 + '\n' + fs.toString(), e2); + System.err.println("Cannot verify signature of a friend from the peers file: "+e2); + someBroken = true; + } catch (RuntimeException e2) { + Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); + System.err.println("Cannot parse a friend from the peers file: " + e2); + someBroken = true; + // FIXME tell the user??? + } catch (PeerTooOldException e) { + someBroken = true; + if(crypto.isOpennet()) { + // Ignore. + Logger.error(this, "Dropping too-old opennet peer"); + } else { + // A lot more noisy + droppedOldPeers.add(e, fs.get("myName")); + } + } + } + + for (PeerNode pn : createdNodes) { + if(oldOpennetPeers) { + if(!(pn instanceof OpennetPeerNode)) + Logger.error(this, "Darknet node in old opennet peers?!: "+pn); + else + opennet.addOldOpennetNode((OpennetPeerNode)pn); + } else + addPeer(pn, true, false); + } try { br.close(); } catch(IOException e3) { From 3aad7eabb69f0ad3059a3e2f34f571814e37c2ed Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:31:51 +0100 Subject: [PATCH 2/8] Fix affected whitespace --- src/freenet/node/PeerManager.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index 024dfafe6a..14969d78d6 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -242,7 +242,7 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open // read the peers file try { while (true) { - peerEntries.add(new SimpleFieldSet(br, false, true)); + peerEntries.add(new SimpleFieldSet(br, false, true)); } } catch(EOFException e) { // End of file, fine @@ -311,13 +311,13 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open } } if(!droppedOldPeers.isEmpty()) { - try { - node.getClientCore().getAlerts().register(droppedOldPeers); - Logger.error(this, droppedOldPeers.getText()); - } catch (Throwable t) { - // Startup MUST complete, don't let client layer problems kill it. - Logger.error(this, "Caught error telling user about dropped peers", t); - } + try { + node.getClientCore().getAlerts().register(droppedOldPeers); + Logger.error(this, droppedOldPeers.getText()); + } catch (Throwable t) { + // Startup MUST complete, don't let client layer problems kill it. + Logger.error(this, "Caught error telling user about dropped peers", t); + } } return !someBroken; } From b5e927433d16cf89d7956c2db698bcd2ea5e633f Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:31:58 +0100 Subject: [PATCH 3/8] Add braces for if/else --- src/freenet/node/PeerManager.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index 14969d78d6..8c9bf68e1b 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -285,12 +285,14 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open for (PeerNode pn : createdNodes) { if(oldOpennetPeers) { - if(!(pn instanceof OpennetPeerNode)) + if(!(pn instanceof OpennetPeerNode)) { Logger.error(this, "Darknet node in old opennet peers?!: "+pn); - else + } else { opennet.addOldOpennetNode((OpennetPeerNode)pn); - } else + } + } else { addPeer(pn, true, false); + } } try { br.close(); From 2080c2dfdd65640f8e7b177da511bc3312a20ec2 Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:35:04 +0100 Subject: [PATCH 4/8] Add braces for if/else --- src/freenet/node/PeerManager.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index 8c9bf68e1b..42d0e7a948 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -209,19 +209,21 @@ void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager opennet, bo if(peersFile.exists()) if(readPeers(peersFile, crypto, opennet, oldOpennetPeers)) { String msg; - if(oldOpennetPeers) + if(oldOpennetPeers) { msg = "Read " + opennet.countOldOpennetPeers() + " old-opennet-peers from " + peersFile; - else if(isOpennet) + } else if(isOpennet) { msg = "Read " + getOpennetPeers().length + " opennet peers from " + peersFile; - else + } else { msg = "Read " + getDarknetPeers().length + " darknet peers from " + peersFile; + } Logger.normal(this, msg); System.out.println(msg); return; } } - if(!isOpennet) + if(!isOpennet) { System.out.println("No darknet peers file found."); + } // The other cases are less important. } From 338787c3c41faff7f5cbca05ad66e7634d7fb854 Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:35:33 +0100 Subject: [PATCH 5/8] Add space after if --- src/freenet/node/PeerManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index 42d0e7a948..f3934c453d 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -275,7 +275,7 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open // FIXME tell the user??? } catch (PeerTooOldException e) { someBroken = true; - if(crypto.isOpennet()) { + if (crypto.isOpennet()) { // Ignore. Logger.error(this, "Dropping too-old opennet peer"); } else { From 09bc3b4b3f4b63c6bc9ddfdde38b8e909c21deb9 Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:36:55 +0100 Subject: [PATCH 6/8] Tabifly + add space after if --- src/freenet/node/PeerManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index f3934c453d..c954046161 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -286,12 +286,12 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open } for (PeerNode pn : createdNodes) { - if(oldOpennetPeers) { + if (oldOpennetPeers) { if(!(pn instanceof OpennetPeerNode)) { Logger.error(this, "Darknet node in old opennet peers?!: "+pn); - } else { + } else { opennet.addOldOpennetNode((OpennetPeerNode)pn); - } + } } else { addPeer(pn, true, false); } From b126decf484725d79e6a9e54b55669624022450e Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:39:16 +0100 Subject: [PATCH 7/8] Add spaces before ( --- src/freenet/node/PeerManager.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index c954046161..a15d180b64 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -209,7 +209,7 @@ void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager opennet, bo if(peersFile.exists()) if(readPeers(peersFile, crypto, opennet, oldOpennetPeers)) { String msg; - if(oldOpennetPeers) { + if (oldOpennetPeers) { msg = "Read " + opennet.countOldOpennetPeers() + " old-opennet-peers from " + peersFile; } else if(isOpennet) { msg = "Read " + getOpennetPeers().length + " opennet peers from " + peersFile; @@ -221,7 +221,7 @@ void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager opennet, bo return; } } - if(!isOpennet) { + if (!isOpennet) { System.out.println("No darknet peers file found."); } // The other cases are less important. @@ -256,15 +256,15 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open for (SimpleFieldSet fs : peerEntries) { try { createdNodes.add(PeerNode.create(fs, node, crypto, opennet, this)); - } catch(FSParseException e2) { + } catch (FSParseException e2) { Logger.error(this, "Could not parse peer due to broken fieldset syntax: " + e2 + '\n' + fs.toString(), e2); System.err.println("Cannot parse a friend from the peers file due to broken fieldset syntax: "+e2); someBroken = true; - } catch(PeerParseException e2) { + } catch (PeerParseException e2) { Logger.error(this, "Could not parse peer: " + e2 + '\n' + fs.toString(), e2); System.err.println("Cannot parse a friend from the peers file: "+e2); someBroken = true; - } catch(ReferenceSignatureVerificationException e2) { + } catch (ReferenceSignatureVerificationException e2) { Logger.error(this, "Could not verify signature of peer: " + e2 + '\n' + fs.toString(), e2); System.err.println("Cannot verify signature of a friend from the peers file: "+e2); someBroken = true; From 04dacb02b045036df9132024538ffeffa0bc31a9 Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Sun, 1 Dec 2024 09:40:22 +0100 Subject: [PATCH 8/8] Add spaces before ( --- src/freenet/node/PeerManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/freenet/node/PeerManager.java b/src/freenet/node/PeerManager.java index a15d180b64..4e8074f078 100644 --- a/src/freenet/node/PeerManager.java +++ b/src/freenet/node/PeerManager.java @@ -287,7 +287,7 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open for (PeerNode pn : createdNodes) { if (oldOpennetPeers) { - if(!(pn instanceof OpennetPeerNode)) { + if (!(pn instanceof OpennetPeerNode)) { Logger.error(this, "Darknet node in old opennet peers?!: "+pn); } else { opennet.addOldOpennetNode((OpennetPeerNode)pn); @@ -301,7 +301,7 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open } catch(IOException e3) { Logger.error(this, "Ignoring " + e3 + " caught reading " + peersFile, e3); } - if(someBroken) { + if (someBroken) { try { brokenPeersFile.delete(); FileOutputStream fos = new FileOutputStream(brokenPeersFile); @@ -314,7 +314,7 @@ private boolean readPeers(File peersFile, NodeCrypto crypto, OpennetManager open System.err.println("Unable to copy broken peers file."); } } - if(!droppedOldPeers.isEmpty()) { + if (!droppedOldPeers.isEmpty()) { try { node.getClientCore().getAlerts().register(droppedOldPeers); Logger.error(this, droppedOldPeers.getText());