forked from I2P_Developers/i2p.i2p
Util: Consolidate FileFilters
This commit is contained in:
@ -34,6 +34,7 @@ import net.i2p.data.Base64;
|
|||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.update.*;
|
import net.i2p.update.*;
|
||||||
import net.i2p.util.ConcurrentHashSet;
|
import net.i2p.util.ConcurrentHashSet;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.I2PAppThread;
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
@ -2577,14 +2578,14 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
|||||||
*/
|
*/
|
||||||
private boolean monitorTorrents(File dir) {
|
private boolean monitorTorrents(File dir) {
|
||||||
boolean rv = true;
|
boolean rv = true;
|
||||||
String fileNames[] = dir.list(TorrentFilenameFilter.instance());
|
File files[] = dir.listFiles(new FileSuffixFilter(".torrent"));
|
||||||
List<String> foundNames = new ArrayList<String>(0);
|
List<String> foundNames = new ArrayList<String>(0);
|
||||||
if (fileNames != null) {
|
if (files != null) {
|
||||||
for (int i = 0; i < fileNames.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
try {
|
try {
|
||||||
foundNames.add(new File(dir, fileNames[i]).getCanonicalPath());
|
foundNames.add(files[i].getCanonicalPath());
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
_log.error("Error resolving '" + fileNames[i] + "' in '" + dir, ioe);
|
_log.error("Error resolving '" + files[i] + "' in '" + dir, ioe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2731,14 +2732,6 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
|||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class TorrentFilenameFilter implements FilenameFilter {
|
|
||||||
private static final TorrentFilenameFilter _filter = new TorrentFilenameFilter();
|
|
||||||
public static TorrentFilenameFilter instance() { return _filter; }
|
|
||||||
public boolean accept(File dir, String name) {
|
|
||||||
return (name != null) && (name.endsWith(".torrent"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If not connected, thread it, otherwise inline
|
* If not connected, thread it, otherwise inline
|
||||||
* @throws RuntimeException via Snark.fatal()
|
* @throws RuntimeException via Snark.fatal()
|
||||||
|
@ -19,6 +19,7 @@ import net.i2p.data.Base64;
|
|||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.data.Hash;
|
import net.i2p.data.Hash;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.SecureDirectory;
|
import net.i2p.util.SecureDirectory;
|
||||||
import net.i2p.util.SecureFileOutputStream;
|
import net.i2p.util.SecureFileOutputStream;
|
||||||
|
|
||||||
@ -98,13 +99,11 @@ class PersistNews {
|
|||||||
Log log = ctx.logManager().getLog(PersistNews.class);
|
Log log = ctx.logManager().getLog(PersistNews.class);
|
||||||
File dir = new File(ctx.getConfigDir(), DIR);
|
File dir = new File(ctx.getConfigDir(), DIR);
|
||||||
List<NewsEntry> rv = new ArrayList<NewsEntry>();
|
List<NewsEntry> rv = new ArrayList<NewsEntry>();
|
||||||
File[] files = dir.listFiles();
|
File[] files = dir.listFiles(new FileSuffixFilter(PFX, SFX));
|
||||||
if (files == null)
|
if (files == null)
|
||||||
return rv;
|
return rv;
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
String name = file.getName();
|
String name = file.getName();
|
||||||
if (!name.startsWith(PFX) || !name.endsWith(SFX))
|
|
||||||
continue;
|
|
||||||
XMLParser parser = new XMLParser(ctx);
|
XMLParser parser = new XMLParser(ctx);
|
||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
Node node;
|
Node node;
|
||||||
|
@ -30,6 +30,7 @@ import net.i2p.router.startup.LoadClientAppsJob;
|
|||||||
import net.i2p.router.update.ConsoleUpdateManager;
|
import net.i2p.router.update.ConsoleUpdateManager;
|
||||||
import static net.i2p.update.UpdateType.*;
|
import static net.i2p.update.UpdateType.*;
|
||||||
import net.i2p.util.ConcurrentHashSet;
|
import net.i2p.util.ConcurrentHashSet;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.I2PAppThread;
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
@ -415,13 +416,14 @@ public class PluginStarter implements Runnable {
|
|||||||
File consoleDir = new File(pluginDir, "console");
|
File consoleDir = new File(pluginDir, "console");
|
||||||
Properties wprops = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath());
|
Properties wprops = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath());
|
||||||
File webappDir = new File(consoleDir, "webapps");
|
File webappDir = new File(consoleDir, "webapps");
|
||||||
String fileNames[] = webappDir.list(RouterConsoleRunner.WarFilenameFilter.instance());
|
File files[] = webappDir.listFiles(RouterConsoleRunner.WAR_FILTER);
|
||||||
if (fileNames != null) {
|
if (files != null) {
|
||||||
if(!pluginWars.containsKey(appName))
|
if(!pluginWars.containsKey(appName))
|
||||||
pluginWars.put(appName, new ConcurrentHashSet<String>());
|
pluginWars.put(appName, new ConcurrentHashSet<String>());
|
||||||
for (int i = 0; i < fileNames.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
try {
|
try {
|
||||||
String warName = fileNames[i].substring(0, fileNames[i].lastIndexOf(".war"));
|
String warName = files[i].getName();
|
||||||
|
warName = warName.substring(0, warName.lastIndexOf(".war"));
|
||||||
//log.error("Found webapp: " + warName);
|
//log.error("Found webapp: " + warName);
|
||||||
// check for duplicates in $I2P
|
// check for duplicates in $I2P
|
||||||
if (Arrays.asList(STANDARD_WEBAPPS).contains(warName)) {
|
if (Arrays.asList(STANDARD_WEBAPPS).contains(warName)) {
|
||||||
@ -432,12 +434,12 @@ public class PluginStarter implements Runnable {
|
|||||||
if (! "false".equals(enabled)) {
|
if (! "false".equals(enabled)) {
|
||||||
if (log.shouldLog(Log.INFO))
|
if (log.shouldLog(Log.INFO))
|
||||||
log.info("Starting webapp: " + warName);
|
log.info("Starting webapp: " + warName);
|
||||||
String path = new File(webappDir, fileNames[i]).getCanonicalPath();
|
String path = files[i].getCanonicalPath();
|
||||||
WebAppStarter.startWebApp(ctx, server, warName, path);
|
WebAppStarter.startWebApp(ctx, server, warName, path);
|
||||||
pluginWars.get(appName).add(warName);
|
pluginWars.get(appName).add(warName);
|
||||||
}
|
}
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
log.error("Error resolving '" + fileNames[i] + "' in '" + webappDir, ioe);
|
log.error("Error resolving '" + files[i] + "' in '" + webappDir, ioe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check for iconfile in plugin.properties
|
// Check for iconfile in plugin.properties
|
||||||
@ -460,12 +462,11 @@ public class PluginStarter implements Runnable {
|
|||||||
// later in the classpath.
|
// later in the classpath.
|
||||||
File localeDir = new File(pluginDir, "console/locale");
|
File localeDir = new File(pluginDir, "console/locale");
|
||||||
if (localeDir.exists() && localeDir.isDirectory()) {
|
if (localeDir.exists() && localeDir.isDirectory()) {
|
||||||
File[] files = localeDir.listFiles();
|
File[] files = localeDir.listFiles(new FileSuffixFilter(".jar"));
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
boolean added = false;
|
boolean added = false;
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
File f = files[i];
|
File f = files[i];
|
||||||
if (f.getName().endsWith(".jar")) {
|
|
||||||
try {
|
try {
|
||||||
addPath(f.toURI().toURL());
|
addPath(f.toURI().toURL());
|
||||||
log.info("INFO: Adding translation plugin to classpath: " + f);
|
log.info("INFO: Adding translation plugin to classpath: " + f);
|
||||||
@ -478,7 +479,6 @@ public class PluginStarter implements Runnable {
|
|||||||
log.error("Plugin " + appName + " bad classpath element: " + f, e);
|
log.error("Plugin " + appName + " bad classpath element: " + f, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (added)
|
if (added)
|
||||||
Translate.clearCache();
|
Translate.clearCache();
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package net.i2p.router.web;
|
|||||||
|
|
||||||
import java.awt.GraphicsEnvironment;
|
import java.awt.GraphicsEnvironment;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FilenameFilter;
|
import java.io.FileFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
@ -35,6 +35,7 @@ import net.i2p.router.app.RouterApp;
|
|||||||
import net.i2p.router.news.NewsManager;
|
import net.i2p.router.news.NewsManager;
|
||||||
import net.i2p.router.update.ConsoleUpdateManager;
|
import net.i2p.router.update.ConsoleUpdateManager;
|
||||||
import net.i2p.util.Addresses;
|
import net.i2p.util.Addresses;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.I2PAppThread;
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.PortMapper;
|
import net.i2p.util.PortMapper;
|
||||||
@ -140,6 +141,8 @@ public class RouterConsoleRunner implements RouterApp {
|
|||||||
private static final String THREAD_NAME = "RouterConsole Jetty";
|
private static final String THREAD_NAME = "RouterConsole Jetty";
|
||||||
public static final String PROP_DTG_ENABLED = "desktopgui.enabled";
|
public static final String PROP_DTG_ENABLED = "desktopgui.enabled";
|
||||||
static final String PROP_ALLOWED_HOSTS = "routerconsole.allowedHosts";
|
static final String PROP_ALLOWED_HOSTS = "routerconsole.allowedHosts";
|
||||||
|
/** @since 0.9.34 */
|
||||||
|
static final FileFilter WAR_FILTER = new WarFilenameFilter();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
@ -763,10 +766,11 @@ public class RouterConsoleRunner implements RouterApp {
|
|||||||
List<String> notStarted = new ArrayList<String>();
|
List<String> notStarted = new ArrayList<String>();
|
||||||
if (_server.isRunning()) {
|
if (_server.isRunning()) {
|
||||||
File dir = new File(_webAppsDir);
|
File dir = new File(_webAppsDir);
|
||||||
String fileNames[] = dir.list(WarFilenameFilter.instance());
|
File files[] = dir.listFiles(WAR_FILTER);
|
||||||
if (fileNames != null) {
|
if (files != null) {
|
||||||
for (int i = 0; i < fileNames.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
String appName = fileNames[i].substring(0, fileNames[i].lastIndexOf(".war"));
|
String appName = files[i].getName();
|
||||||
|
appName = appName.substring(0, appName.lastIndexOf(".war"));
|
||||||
String enabled = props.getProperty(PREFIX + appName + ENABLED);
|
String enabled = props.getProperty(PREFIX + appName + ENABLED);
|
||||||
if (appName.equals("addressbook")) {
|
if (appName.equals("addressbook")) {
|
||||||
// addressbook.war is now empty, thread is started by SusiDNS
|
// addressbook.war is now empty, thread is started by SusiDNS
|
||||||
@ -776,7 +780,7 @@ public class RouterConsoleRunner implements RouterApp {
|
|||||||
}
|
}
|
||||||
} else if (! "false".equals(enabled)) {
|
} else if (! "false".equals(enabled)) {
|
||||||
try {
|
try {
|
||||||
String path = new File(dir, fileNames[i]).getCanonicalPath();
|
String path = files[i].getCanonicalPath();
|
||||||
WebAppStarter.startWebApp(_context, chColl, appName, path);
|
WebAppStarter.startWebApp(_context, chColl, appName, path);
|
||||||
if (enabled == null) {
|
if (enabled == null) {
|
||||||
// do this so configclients.jsp knows about all apps from reading the config
|
// do this so configclients.jsp knows about all apps from reading the config
|
||||||
@ -1115,11 +1119,13 @@ public class RouterConsoleRunner implements RouterApp {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class WarFilenameFilter implements FilenameFilter {
|
private static class WarFilenameFilter extends FileSuffixFilter {
|
||||||
private static final WarFilenameFilter _filter = new WarFilenameFilter();
|
private static final String RCWAR = ROUTERCONSOLE + ".war";
|
||||||
public static WarFilenameFilter instance() { return _filter; }
|
|
||||||
public boolean accept(File dir, String name) {
|
public WarFilenameFilter() { super(".war"); }
|
||||||
return (name != null) && (name.endsWith(".war") && !name.equals(ROUTERCONSOLE + ".war"));
|
|
||||||
|
public boolean accept(File file) {
|
||||||
|
return super.accept(file) && !file.getName().equals(RCWAR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import java.util.Set;
|
|||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
|
|
||||||
import org.apache.tomcat.SimpleInstanceManager;
|
import org.apache.tomcat.SimpleInstanceManager;
|
||||||
import org.eclipse.jetty.webapp.Configuration;
|
import org.eclipse.jetty.webapp.Configuration;
|
||||||
@ -180,11 +181,11 @@ public class WebAppConfiguration implements Configuration {
|
|||||||
// Java 9 - assume everything in lib/ is in the classpath
|
// Java 9 - assume everything in lib/ is in the classpath
|
||||||
// except addressbook.jar
|
// except addressbook.jar
|
||||||
File libDir = new File(ctx.getBaseDir(), "lib");
|
File libDir = new File(ctx.getBaseDir(), "lib");
|
||||||
File[] files = libDir.listFiles();
|
File[] files = libDir.listFiles(new FileSuffixFilter(".jar"));
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
String name = files[i].getName();
|
String name = files[i].getName();
|
||||||
if (name.endsWith(".jar") && !name.equals("addressbook.jar"))
|
if (!name.equals("addressbook.jar"))
|
||||||
rv.add(files[i].toURI());
|
rv.add(files[i].toURI());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import java.io.IOException;
|
|||||||
|
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.router.crypto.FamilyKeyCrypto;
|
import net.i2p.router.crypto.FamilyKeyCrypto;
|
||||||
import net.i2p.router.web.HelperBase;
|
import net.i2p.router.web.HelperBase;
|
||||||
|
|
||||||
@ -37,17 +38,11 @@ public class CertHelper extends HelperBase {
|
|||||||
// i2ptunnel clients
|
// i2ptunnel clients
|
||||||
File tunnelDir = new File(_context.getConfigDir(), I2PTUNNEL_DIR);
|
File tunnelDir = new File(_context.getConfigDir(), I2PTUNNEL_DIR);
|
||||||
boolean hasTunnels = false;
|
boolean hasTunnels = false;
|
||||||
File[] tunnels = tunnelDir.listFiles();
|
File[] tunnels = tunnelDir.listFiles(new FileSuffixFilter("i2ptunnel-", ".local.crt"));
|
||||||
if (tunnels != null) {
|
if (tunnels != null) {
|
||||||
for (int i = 0; i < tunnels.length; i++) {
|
for (int i = 0; i < tunnels.length; i++) {
|
||||||
File f = tunnels[i];
|
File f = tunnels[i];
|
||||||
if (!f.isFile())
|
|
||||||
continue;
|
|
||||||
String name = f.getName();
|
String name = f.getName();
|
||||||
if (!name.endsWith(".local.crt"))
|
|
||||||
continue;
|
|
||||||
if (!name.startsWith("i2ptunnel-"))
|
|
||||||
continue;
|
|
||||||
String b32 = name.substring(10, name.length() - 10);
|
String b32 = name.substring(10, name.length() - 10);
|
||||||
output(_t("I2PTunnel") + ' ' + b32, f);
|
output(_t("I2PTunnel") + ' ' + b32, f);
|
||||||
hasTunnels = true;
|
hasTunnels = true;
|
||||||
@ -59,17 +54,10 @@ public class CertHelper extends HelperBase {
|
|||||||
// SAM
|
// SAM
|
||||||
tunnelDir = new File(dir, SAM_DIR);
|
tunnelDir = new File(dir, SAM_DIR);
|
||||||
hasTunnels = false;
|
hasTunnels = false;
|
||||||
tunnels = tunnelDir.listFiles();
|
tunnels = tunnelDir.listFiles(new FileSuffixFilter("sam-", ".local.crt"));
|
||||||
if (tunnels != null) {
|
if (tunnels != null) {
|
||||||
for (int i = 0; i < tunnels.length; i++) {
|
for (int i = 0; i < tunnels.length; i++) {
|
||||||
File f = tunnels[i];
|
File f = tunnels[i];
|
||||||
if (!f.isFile())
|
|
||||||
continue;
|
|
||||||
String name = f.getName();
|
|
||||||
if (!name.endsWith(".local.crt"))
|
|
||||||
continue;
|
|
||||||
if (!name.startsWith("sam-"))
|
|
||||||
continue;
|
|
||||||
output("SAM", f);
|
output("SAM", f);
|
||||||
hasTunnels = true;
|
hasTunnels = true;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import net.i2p.crypto.SHA256Generator;
|
|||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.router.web.HelperBase;
|
import net.i2p.router.web.HelperBase;
|
||||||
import net.i2p.router.web.PluginStarter;
|
import net.i2p.router.web.PluginStarter;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.SystemVersion;
|
import net.i2p.util.SystemVersion;
|
||||||
|
|
||||||
@ -97,12 +98,11 @@ public class FileDumpHelper extends HelperBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void dumpDir(StringBuilder buf, File dir, String suffix) {
|
private static void dumpDir(StringBuilder buf, File dir, String suffix) {
|
||||||
File[] files = dir.listFiles();
|
File[] files = dir.listFiles(new FileSuffixFilter(suffix));
|
||||||
if (files == null)
|
if (files == null)
|
||||||
return;
|
return;
|
||||||
Arrays.sort(files);
|
Arrays.sort(files);
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
if (files[i].getName().endsWith(suffix))
|
|
||||||
dumpFile(buf, files[i]);
|
dumpFile(buf, files[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import java.util.zip.GZIPOutputStream;
|
|||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.data.Base64;
|
import net.i2p.data.Base64;
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.I2PAppThread;
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.PasswordManager;
|
import net.i2p.util.PasswordManager;
|
||||||
import net.i2p.util.SecureDirectory;
|
import net.i2p.util.SecureDirectory;
|
||||||
@ -383,15 +384,11 @@ class PersistentMailCache {
|
|||||||
private void importMail() {
|
private void importMail() {
|
||||||
File importDir = new File(_cacheDir.getParentFile(), DIR_IMPORT);
|
File importDir = new File(_cacheDir.getParentFile(), DIR_IMPORT);
|
||||||
if (importDir.exists() && importDir.isDirectory()) {
|
if (importDir.exists() && importDir.isDirectory()) {
|
||||||
File[] files = importDir.listFiles();
|
File[] files = importDir.listFiles(new FileSuffixFilter(".eml"));
|
||||||
if (files == null)
|
if (files == null)
|
||||||
return;
|
return;
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
File f = files[i];
|
File f = files[i];
|
||||||
if (!f.isFile())
|
|
||||||
continue;
|
|
||||||
if (!f.getName().toLowerCase(Locale.US).endsWith(".eml"))
|
|
||||||
continue;
|
|
||||||
// Read in the headers to get the X-UIDL that Thunderbird stuck in there
|
// Read in the headers to get the X-UIDL that Thunderbird stuck in there
|
||||||
String uidl = Long.toString(_context.random().nextLong());
|
String uidl = Long.toString(_context.random().nextLong());
|
||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
|
@ -40,6 +40,7 @@ import net.i2p.I2PAppContext;
|
|||||||
import net.i2p.data.Base64;
|
import net.i2p.data.Base64;
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.SecureFileOutputStream;
|
import net.i2p.util.SecureFileOutputStream;
|
||||||
import net.i2p.util.SystemVersion;
|
import net.i2p.util.SystemVersion;
|
||||||
|
|
||||||
@ -486,13 +487,10 @@ public final class CertUtil {
|
|||||||
*/
|
*/
|
||||||
private static void loadCRLs(Set<X509CRL> crls, File dir) {
|
private static void loadCRLs(Set<X509CRL> crls, File dir) {
|
||||||
if (dir.exists() && dir.isDirectory()) {
|
if (dir.exists() && dir.isDirectory()) {
|
||||||
File[] files = dir.listFiles();
|
File[] files = dir.listFiles(new FileSuffixFilter(".crl"));
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
File f = files[i];
|
File f = files[i];
|
||||||
if (!f.isFile())
|
|
||||||
continue;
|
|
||||||
if (f.getName().endsWith(".crl")) {
|
|
||||||
try {
|
try {
|
||||||
X509CRL crl = loadCRL(f);
|
X509CRL crl = loadCRL(f);
|
||||||
crls.add(crl);
|
crls.add(crl);
|
||||||
@ -505,7 +503,6 @@ public final class CertUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a CRL.
|
* Load a CRL.
|
||||||
|
42
core/java/src/net/i2p/util/FileSuffixFilter.java
Normal file
42
core/java/src/net/i2p/util/FileSuffixFilter.java
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package net.i2p.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileFilter;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A FileFilter that accepts regular files
|
||||||
|
* with a suffix and optionally a prefix, case-insensitive.
|
||||||
|
*
|
||||||
|
* @since 0.9.34
|
||||||
|
*/
|
||||||
|
public class FileSuffixFilter implements FileFilter {
|
||||||
|
|
||||||
|
private final String begin, end;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A filter that accepts regular files that
|
||||||
|
* end with suffix, case-insensitive.
|
||||||
|
*/
|
||||||
|
public FileSuffixFilter(String suffix) {
|
||||||
|
begin = null;
|
||||||
|
end = suffix.toLowerCase(Locale.US);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A filter that accepts regular files that
|
||||||
|
* start with prefix and
|
||||||
|
* end with suffix, case-insensitive.
|
||||||
|
*/
|
||||||
|
public FileSuffixFilter(String prefix, String suffix) {
|
||||||
|
begin = prefix.toLowerCase(Locale.US);
|
||||||
|
end = suffix.toLowerCase(Locale.US);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean accept(File file) {
|
||||||
|
String name = file.getName().toLowerCase(Locale.US);
|
||||||
|
return name.endsWith(end) &&
|
||||||
|
(begin == null || name.startsWith(begin)) &&
|
||||||
|
file.isFile();
|
||||||
|
}
|
||||||
|
}
|
@ -123,7 +123,7 @@ public class BundleRouterInfos {
|
|||||||
List<File> toRead = new ArrayList<File>(2048);
|
List<File> toRead = new ArrayList<File>(2048);
|
||||||
for (int j = 0; j < Base64.ALPHABET_I2P.length(); j++) {
|
for (int j = 0; j < Base64.ALPHABET_I2P.length(); j++) {
|
||||||
File subdir = new File(dbDir, PersistentDataStore.DIR_PREFIX + Base64.ALPHABET_I2P.charAt(j));
|
File subdir = new File(dbDir, PersistentDataStore.DIR_PREFIX + Base64.ALPHABET_I2P.charAt(j));
|
||||||
File[] files = subdir.listFiles(PersistentDataStore.RouterInfoFilter.getInstance());
|
File[] files = subdir.listFiles(PersistentDataStore.RI_FILTER);
|
||||||
if (files == null)
|
if (files == null)
|
||||||
continue;
|
continue;
|
||||||
routerCount += files.length;
|
routerCount += files.length;
|
||||||
|
@ -11,8 +11,8 @@ package net.i2p.router.networkdb.kademlia;
|
|||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileFilter;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FilenameFilter;
|
|
||||||
import java.io.Flushable;
|
import java.io.Flushable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -34,6 +34,7 @@ import net.i2p.data.router.RouterInfo;
|
|||||||
import net.i2p.router.JobImpl;
|
import net.i2p.router.JobImpl;
|
||||||
import net.i2p.router.Router;
|
import net.i2p.router.Router;
|
||||||
import net.i2p.router.RouterContext;
|
import net.i2p.router.RouterContext;
|
||||||
|
import net.i2p.util.FileSuffixFilter;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.I2PThread;
|
import net.i2p.util.I2PThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
@ -392,7 +393,7 @@ public class PersistentDataStore extends TransientDataStore {
|
|||||||
private void readFiles() {
|
private void readFiles() {
|
||||||
int routerCount = 0;
|
int routerCount = 0;
|
||||||
|
|
||||||
File routerInfoFiles[] = _dbDir.listFiles(RouterInfoFilter.getInstance());
|
File routerInfoFiles[] = _dbDir.listFiles(RI_FILTER);
|
||||||
if (_flat) {
|
if (_flat) {
|
||||||
if (routerInfoFiles != null) {
|
if (routerInfoFiles != null) {
|
||||||
routerCount = routerInfoFiles.length;
|
routerCount = routerInfoFiles.length;
|
||||||
@ -421,7 +422,7 @@ public class PersistentDataStore extends TransientDataStore {
|
|||||||
List<File> toRead = new ArrayList<File>(2048);
|
List<File> toRead = new ArrayList<File>(2048);
|
||||||
for (int j = 0; j < B64.length(); j++) {
|
for (int j = 0; j < B64.length(); j++) {
|
||||||
File subdir = new File(_dbDir, DIR_PREFIX + B64.charAt(j));
|
File subdir = new File(_dbDir, DIR_PREFIX + B64.charAt(j));
|
||||||
File[] files = subdir.listFiles(RouterInfoFilter.getInstance());
|
File[] files = subdir.listFiles(RI_FILTER);
|
||||||
if (files == null)
|
if (files == null)
|
||||||
continue;
|
continue;
|
||||||
long lastMod = subdir.lastModified();
|
long lastMod = subdir.lastModified();
|
||||||
@ -583,7 +584,7 @@ public class PersistentDataStore extends TransientDataStore {
|
|||||||
if (!subdir.exists())
|
if (!subdir.exists())
|
||||||
subdir.mkdir();
|
subdir.mkdir();
|
||||||
}
|
}
|
||||||
File routerInfoFiles[] = f.listFiles(RouterInfoFilter.getInstance());
|
File routerInfoFiles[] = f.listFiles(RI_FILTER);
|
||||||
if (routerInfoFiles != null)
|
if (routerInfoFiles != null)
|
||||||
migrate(f, routerInfoFiles);
|
migrate(f, routerInfoFiles);
|
||||||
}
|
}
|
||||||
@ -597,7 +598,7 @@ public class PersistentDataStore extends TransientDataStore {
|
|||||||
private static void unmigrate(File dbdir) {
|
private static void unmigrate(File dbdir) {
|
||||||
for (int j = 0; j < B64.length(); j++) {
|
for (int j = 0; j < B64.length(); j++) {
|
||||||
File subdir = new File(dbdir, DIR_PREFIX + B64.charAt(j));
|
File subdir = new File(dbdir, DIR_PREFIX + B64.charAt(j));
|
||||||
File[] files = subdir.listFiles(RouterInfoFilter.getInstance());
|
File[] files = subdir.listFiles(RI_FILTER);
|
||||||
if (files == null)
|
if (files == null)
|
||||||
continue;
|
continue;
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
@ -628,6 +629,9 @@ public class PersistentDataStore extends TransientDataStore {
|
|||||||
private final static String ROUTERINFO_PREFIX = "routerInfo-";
|
private final static String ROUTERINFO_PREFIX = "routerInfo-";
|
||||||
private final static String ROUTERINFO_SUFFIX = ".dat";
|
private final static String ROUTERINFO_SUFFIX = ".dat";
|
||||||
|
|
||||||
|
/** @since 0.9.34 */
|
||||||
|
public static final FileFilter RI_FILTER = new FileSuffixFilter(ROUTERINFO_PREFIX, ROUTERINFO_SUFFIX);
|
||||||
|
|
||||||
private static String getLeaseSetName(Hash hash) {
|
private static String getLeaseSetName(Hash hash) {
|
||||||
return LEASESET_PREFIX + hash.toBase64() + LEASESET_SUFFIX;
|
return LEASESET_PREFIX + hash.toBase64() + LEASESET_SUFFIX;
|
||||||
}
|
}
|
||||||
@ -693,14 +697,4 @@ public class PersistentDataStore extends TransientDataStore {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static class RouterInfoFilter implements FilenameFilter {
|
|
||||||
private static final FilenameFilter _instance = new RouterInfoFilter();
|
|
||||||
public static final FilenameFilter getInstance() { return _instance; }
|
|
||||||
public boolean accept(File dir, String name) {
|
|
||||||
if (name == null) return false;
|
|
||||||
name = name.toUpperCase(Locale.US);
|
|
||||||
return (name.startsWith(ROUTERINFO_PREFIX.toUpperCase(Locale.US)) && name.endsWith(ROUTERINFO_SUFFIX.toUpperCase(Locale.US)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user