From 98e5908557a1638ac714f3fd40f5d7c59974fcea Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 10 Oct 2020 14:59:13 +0000 Subject: [PATCH] i2psnark: Cache length of metainfo --- .../java/src/org/klomp/snark/MagnetState.java | 2 +- .../java/src/org/klomp/snark/MetaInfo.java | 21 +++++++++++++++++-- .../java/src/org/klomp/snark/Peer.java | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/MagnetState.java b/apps/i2psnark/java/src/org/klomp/snark/MagnetState.java index 145d8224d..3597c436f 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/MagnetState.java +++ b/apps/i2psnark/java/src/org/klomp/snark/MagnetState.java @@ -49,7 +49,7 @@ class MagnetState { infohash = iHash; if (meta != null) { metainfo = meta; - initialize(meta.getInfoBytes().length); + initialize(meta.getInfoBytesLength()); complete = true; } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java index f4aeb21f4..434c794bd 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java +++ b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java @@ -68,6 +68,7 @@ public class MetaInfo private final String created_by; private final long creation_date; private Map infoMap; + private int infoBytesLength; /** * Called by Storage when creating a new torrent from local data @@ -622,11 +623,27 @@ public class MetaInfo return BEncoder.bencode(m); } - /** @since 0.8.4 */ + /** + * Side effect: Caches infoBytesLength. + * @since 0.8.4 + */ public synchronized byte[] getInfoBytes() { if (infoMap == null) createInfoMap(); - return BEncoder.bencode(infoMap); + byte[] rv = BEncoder.bencode(infoMap); + infoBytesLength = rv.length; + return rv; + } + + /** + * The size of getInfoBytes(). + * Cached. + * @since 0.9.48 + */ + public synchronized int getInfoBytesLength() { + if (infoBytesLength > 0) + return infoBytesLength; + return getInfoBytes().length; } /** @return an unmodifiable view of the Map */ diff --git a/apps/i2psnark/java/src/org/klomp/snark/Peer.java b/apps/i2psnark/java/src/org/klomp/snark/Peer.java index ba633cb18..b8c076365 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Peer.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Peer.java @@ -290,7 +290,7 @@ public class Peer implements Comparable if ((options & OPTION_EXTENSION) != 0) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Peer supports extensions, sending reply message"); - int metasize = metainfo != null ? metainfo.getInfoBytes().length : -1; + int metasize = metainfo != null ? metainfo.getInfoBytesLength() : -1; boolean pexAndMetadata = metainfo == null || !metainfo.isPrivate(); boolean dht = util.getDHT() != null; boolean comment = util.utCommentsEnabled();