diff --git a/core/java/src/net/i2p/client/I2CPSSLSocketFactory.java b/core/java/src/net/i2p/client/I2CPSSLSocketFactory.java index 41da015a792f4ee10b34456d84184bf7263db404..8eb8422b9fa409d5c2c8931e9d2356ca91abea20 100644 --- a/core/java/src/net/i2p/client/I2CPSSLSocketFactory.java +++ b/core/java/src/net/i2p/client/I2CPSSLSocketFactory.java @@ -31,7 +31,6 @@ class I2CPSSLSocketFactory { private static final Object _initLock = new Object(); private static SSLSocketFactory _factory; - private static Log _log; private static final String CERT_DIR = "certificates"; @@ -45,11 +44,10 @@ class I2CPSSLSocketFactory { public static Socket createSocket(I2PAppContext ctx, String host, int port) throws IOException { synchronized(_initLock) { if (_factory == null) { - _log = ctx.logManager().getLog(I2CPSSLSocketFactory.class); initSSLContext(ctx); if (_factory == null) throw new IOException("Unable to create SSL Context for I2CP Client"); - _log.info("I2CP Client-side SSL Context initialized"); + info(ctx, "I2CP Client-side SSL Context initialized"); } } return _factory.createSocket(host, port); @@ -65,34 +63,33 @@ class I2CPSSLSocketFactory { ks = KeyStore.getInstance(KeyStore.getDefaultType()); ks.load(null, "".toCharArray()); } catch (GeneralSecurityException gse) { - _log.error("Key Store init error", gse); + error(context, "Key Store init error", gse); return; } catch (IOException ioe) { - _log.error("Key Store init error", ioe); + error(context, "Key Store init error", ioe); return; } File dir = new File(context.getConfigDir(), CERT_DIR); int adds = addCerts(dir, ks); int totalAdds = adds; - if (adds > 0 && _log.shouldLog(Log.INFO)) - _log.info("Loaded " + adds + " trusted certificates from " + dir.getAbsolutePath()); + if (adds > 0) + info(context, "Loaded " + adds + " trusted certificates from " + dir.getAbsolutePath()); File dir2 = new File(System.getProperty("user.dir"), CERT_DIR); if (!dir.getAbsolutePath().equals(dir2.getAbsolutePath())) { adds = addCerts(dir2, ks); totalAdds += adds; - if (adds > 0 && _log.shouldLog(Log.INFO)) - _log.info("Loaded " + adds + " trusted certificates from " + dir.getAbsolutePath()); + if (adds > 0) + info(context, "Loaded " + adds + " trusted certificates from " + dir.getAbsolutePath()); } if (totalAdds > 0) { - if (_log.shouldLog(Log.INFO)) - _log.info("Loaded total of " + totalAdds + " new trusted certificates"); + info(context, "Loaded total of " + totalAdds + " new trusted certificates"); } else { - _log.error("No trusted certificates loaded (looked in " + + error(context, "No trusted certificates loaded (looked in " + dir.getAbsolutePath() + (dir.getAbsolutePath().equals(dir2.getAbsolutePath()) ? "" : (" and " + dir2.getAbsolutePath())) + ", I2CP SSL client connections will fail. " + - "Copy the file certificates/i2cp.local.crt from the router to the directory."); + "Copy the file certificates/i2cp.local.crt from the router to the directory.", null); // don't continue, since we didn't load the system keystore, we have nothing. return; } @@ -104,7 +101,7 @@ class I2CPSSLSocketFactory { sslc.init(null, tmf.getTrustManagers(), context.random()); _factory = sslc.getSocketFactory(); } catch (GeneralSecurityException gse) { - _log.error("SSL context init error", gse); + error(context, "SSL context init error", gse); } } @@ -115,8 +112,7 @@ class I2CPSSLSocketFactory { * @return number successfully added */ private static int addCerts(File dir, KeyStore ks) { - if (_log.shouldLog(Log.INFO)) - _log.info("Looking for X509 Certificates in " + dir.getAbsolutePath()); + info("Looking for X509 Certificates in " + dir.getAbsolutePath()); int added = 0; if (dir.exists() && dir.isDirectory()) { File[] files = dir.listFiles(); @@ -148,33 +144,56 @@ class I2CPSSLSocketFactory { fis = new FileInputStream(file); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(fis); - if (_log.shouldLog(Log.INFO)) { - _log.info("Read X509 Certificate from " + file.getAbsolutePath() + + info("Read X509 Certificate from " + file.getAbsolutePath() + " Issuer: " + cert.getIssuerX500Principal() + "; Valid From: " + cert.getNotBefore() + " To: " + cert.getNotAfter()); - } try { cert.checkValidity(); } catch (CertificateExpiredException cee) { - _log.error("Rejecting expired X509 Certificate: " + file.getAbsolutePath(), cee); + error("Rejecting expired X509 Certificate: " + file.getAbsolutePath(), cee); return false; } catch (CertificateNotYetValidException cnyve) { - _log.error("Rejecting X509 Certificate not yet valid: " + file.getAbsolutePath(), cnyve); + error("Rejecting X509 Certificate not yet valid: " + file.getAbsolutePath(), cnyve); return false; } ks.setCertificateEntry(alias, cert); - if (_log.shouldLog(Log.INFO)) - _log.info("Now trusting X509 Certificate, Issuer: " + cert.getIssuerX500Principal()); + info("Now trusting X509 Certificate, Issuer: " + cert.getIssuerX500Principal()); } catch (GeneralSecurityException gse) { - _log.error("Error reading X509 Certificate: " + file.getAbsolutePath(), gse); + error("Error reading X509 Certificate: " + file.getAbsolutePath(), gse); return false; } catch (IOException ioe) { - _log.error("Error reading X509 Certificate: " + file.getAbsolutePath(), ioe); + error("Error reading X509 Certificate: " + file.getAbsolutePath(), ioe); return false; } finally { try { if (fis != null) fis.close(); } catch (IOException foo) {} } return true; } + + /** @since 0.9.8 */ + private static void info(String msg) { + log(I2PAppContext.getGlobalContext(), Log.INFO, msg, null); + } + + /** @since 0.9.8 */ + private static void error(String msg, Throwable t) { + log(I2PAppContext.getGlobalContext(), Log.ERROR, msg, t); + } + + /** @since 0.9.8 */ + private static void info(I2PAppContext ctx, String msg) { + log(ctx, Log.INFO, msg, null); + } + + /** @since 0.9.8 */ + private static void error(I2PAppContext ctx, String msg, Throwable t) { + log(ctx, Log.ERROR, msg, t); + } + + /** @since 0.9.8 */ + private static void log(I2PAppContext ctx, int level, String msg, Throwable t) { + Log l = ctx.logManager().getLog(I2CPSSLSocketFactory.class); + l.log(level, msg, t); + } }