diff --git a/apps/i2psnark/java/src/org/klomp/snark/Message.java b/apps/i2psnark/java/src/org/klomp/snark/Message.java
index bed8b9541..f70df76d6 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Message.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Message.java
@@ -49,6 +49,9 @@ class Message
final static byte REJECT = 16; // Fast (BEP 6)
final static byte ALLOWED_FAST = 17; // Fast (BEP 6)
final static byte EXTENSION = 20; // BEP 10
+ final static byte HASH_REQUEST = 21; // BEP 52
+ final static byte HASHES = 22; // BEP 52
+ final static byte HASH_REJECT = 23; // BEP 52
// Not all fields are used for every message.
// KEEP_ALIVE doesn't have a real wire representation
@@ -278,6 +281,13 @@ class Message
return "REJECT(" + piece + ',' + begin + ',' + length + ')';
case ALLOWED_FAST:
return "ALLOWED_FAST(" + piece + ')';
+ // BEP 52 below here
+ case HASH_REQUEST:
+ return "HASH_REQUEST";
+ case HASHES:
+ return "HASHES";
+ case HASH_REJECT:
+ return "HASH_REJECT";
default:
return "UNKNOWN (" + type + ')';
}
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 684ea62bf..416b98a47 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -1088,6 +1088,12 @@ public class I2PSnarkServlet extends BasicServlet {
// b32
newURL = newURL.toUpperCase(Locale.US);
addMagnet(MagnetURI.MAGNET_FULL + newURL, dir);
+ } else if (newURL.length() == 68 && newURL.startsWith("1220") &&
+ newURL.replaceAll("[a-fA-F0-9]", "").length() == 0) {
+ // hex v2 multihash
+ // TODO
+ _manager.addMessage("Version 2 info hashes are not supported");
+ //addMagnet(MagnetURI.MAGNET_FULL_V2 + newURL, dir);
} else {
// try as file path, hopefully we're on the same box
if (newURL.startsWith("file://"))
@@ -3282,6 +3288,7 @@ public class I2PSnarkServlet extends BasicServlet {
else
buf.append(_t("Complete")).append("");
buf.append("
");
+ // TODO adjust for padding files
buf.append("")
.append(_t("Size"))
.append(": ")
@@ -3300,6 +3307,7 @@ public class I2PSnarkServlet extends BasicServlet {
} else {
buf.append('0');
}
+ // TODO adjust for padding files
// not including skipped files, but -1 when not running
long needed = snark.getNeededLength();
if (needed < 0) {
@@ -3313,6 +3321,7 @@ public class I2PSnarkServlet extends BasicServlet {
.append(": ")
.append(formatSize(needed));
}
+ // TODO adjust for padding files
long skipped = snark.getSkippedLength();
if (skipped > 0) {
buf.append(" ");
@@ -3321,9 +3330,8 @@ public class I2PSnarkServlet extends BasicServlet {
.append(": ")
.append(formatSize(skipped));
}
- if (meta != null) {
- List> files = meta.getFiles();
- int fileCount = files != null ? files.size() : 1;
+ if (storage != null) {
+ int fileCount = storage.getFileCount();
buf.append(" ");
buf.append("")
.append(_t("Files"))
@@ -3455,7 +3463,16 @@ public class I2PSnarkServlet extends BasicServlet {
long[] remainingArray = (arrays != null) ? arrays[0] : null;
long[] previewArray = (arrays != null) ? arrays[1] : null;
for (int i = 0; i < ls.length; i++) {
- fileList.add(new Sorters.FileAndIndex(ls[i], storage, remainingArray, previewArray));
+ File f = ls[i];
+ if (isTopLevel) {
+ // Hide (assumed) padding directory if it's in the filesystem.
+ // Storage now will not create padding files, but
+ // may have been created by an old version or other client.
+ String n = f.getName();
+ if ((n.equals(".pad") || n.equals("_pad")) && f.isDirectory())
+ continue;
+ }
+ fileList.add(new Sorters.FileAndIndex(f, storage, remainingArray, previewArray));
}
boolean showSort = fileList.size() > 1;
@@ -3616,7 +3633,7 @@ public class I2PSnarkServlet extends BasicServlet {
}
String path = addPaths(decodedBase, item.getName());
- if (item.isDirectory() && !path.endsWith("/"))
+ if (fai.isDirectory && !path.endsWith("/"))
path=addPaths(path,"/");
path = encodePath(path);
String icon = toIcon(item);
@@ -3676,14 +3693,14 @@ public class I2PSnarkServlet extends BasicServlet {
if (preview != null)
buf.append(preview);
buf.append(" | ");
- if (!item.isDirectory())
+ if (!fai.isDirectory)
buf.append(formatSize(length));
buf.append(" | ");
buf.append(status);
buf.append(" | ");
if (showPriority) {
buf.append("");
- if ((!complete) && (!item.isDirectory())) {
+ if ((!complete) && (!fai.isDirectory)) {
if (!inOrder) {
buf.append(" |