I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects

Fix for FileFilterDefinitionElement. Issue #349

Merged Zlatin Balevsky requested to merge zlatinb/i2p.i2p:filefilter-fix into master
1 file
+ 24
4
Compare changes
  • Side-by-side
  • Inline
package net.i2p.i2ptunnel.access;
package net.i2p.i2ptunnel.access;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Map;
import java.io.File;
import java.io.File;
@@ -18,6 +19,7 @@ import net.i2p.data.Hash;
@@ -18,6 +19,7 @@ import net.i2p.data.Hash;
class FileFilterDefinitionElement extends FilterDefinitionElement {
class FileFilterDefinitionElement extends FilterDefinitionElement {
private final File file;
private final File file;
 
private final Map<Hash, DestTracker> lastLoaded = new HashMap<>();
private volatile long lastLoading;
private volatile long lastLoading;
/**
/**
@@ -31,18 +33,36 @@ class FileFilterDefinitionElement extends FilterDefinitionElement {
@@ -31,18 +33,36 @@ class FileFilterDefinitionElement extends FilterDefinitionElement {
@Override
@Override
public void update(Map<Hash, DestTracker> map) throws IOException {
public void update(Map<Hash, DestTracker> map) throws IOException {
if (!(file.exists() && file.isFile() && file.lastModified() > lastLoading))
if (!(file.exists() && file.isFile()))
return;
return;
 
if (file.lastModified() <= lastLoading) {
 
synchronized (lastLoaded) {
 
for (Map.Entry<Hash, DestTracker> entry : lastLoaded.entrySet()) {
 
if (!map.containsKey(entry.getKey()))
 
map.put(entry.getKey(),entry.getValue());
 
}
 
}
 
return;
 
}
 
lastLoading = System.currentTimeMillis();
lastLoading = System.currentTimeMillis();
BufferedReader reader = null;
synchronized (lastLoaded) {
 
lastLoaded.clear();
 
}
 
 
BufferedReader reader = null;
try {
try {
reader = new BufferedReader(new FileReader(file));
reader = new BufferedReader(new FileReader(file));
String b32;
String b32;
while((b32 = reader.readLine()) != null) {
while((b32 = reader.readLine()) != null) {
Hash hash = fromBase32(b32);
Hash hash = fromBase32(b32);
if (map.containsKey(hash))
if (map.containsKey(hash))
continue;
continue;
map.put(hash, new DestTracker(hash, threshold));
DestTracker newTracker = new DestTracker(hash, threshold);
 
map.put(hash, newTracker);
 
synchronized (lastLoaded) {
 
lastLoaded.put(hash, newTracker);
 
}
}
}
} catch (InvalidDefinitionException bad32) {
} catch (InvalidDefinitionException bad32) {
throw new IOException("invalid access list entry", bad32);
throw new IOException("invalid access list entry", bad32);
Loading