/** * Checks if address can be reached using one argument InetAddress.isReachable() version or ping * command if failed. * * @param addr Address to check. * @param reachTimeout Timeout for the check. * @return {@code True} if address is reachable. */ public static boolean reachableByPing(InetAddress addr, int reachTimeout) { try { if (addr.isReachable(reachTimeout)) return true; String cmd = String.format("ping -%s 1 %s", U.isWindows() ? "n" : "c", addr.getHostAddress()); Process myProc = Runtime.getRuntime().exec(cmd); myProc.waitFor(); return myProc.exitValue() == 0; } catch (IOException ignore) { return false; } catch (InterruptedException ignored) { Thread.currentThread().interrupt(); return false; } }
/** * This method is called when a whole download file has been finished downloading. It updates main * application window and starts the decoding thread. * * @param dlFile The DownloadFile object that is finished */ private void handleFinishedDlFile(final DownloadFile dlFile) { final String filename = dlFile.getFilename(); logger.msg("File downloading finished: " + filename, MyLogger.SEV_INFO); // notify application that download has finished SwingUtilities.invokeLater( new Runnable() { public void run() { mainApp.fileDownloadFinished(filename); mainApp.setProgBarToDecoding(filename, dlFile.getSegCount()); } }); // create result vector Vector<byte[]> articleData = new Vector<byte[]>(); Vector<RspHandler> rspHandlers = dlFileRspHandlerMap.get(dlFile); for (int i = 0; i < rspHandlers.size(); i++) { byte[] tmpArray = removeFirstLine(rspHandlers.get(i).getData(true)); articleData.add(tmpArray); rspHandlers.set(i, null); // free some memory } // call garbage collector rspHandlers = null; dlFileRspHandlerMap.remove(dlFile); Runtime.getRuntime().gc(); logger.msg( "First line(s) dump:\n" + HelloNzbToolkit.firstLineFromByteData(articleData.get(0), 2), MyLogger.SEV_DEBUG); // determine data encoding (yenc or UU) String encoding = null; boolean bHasData = false; for (int i = 0; i < articleData.size(); i++) { byte[] abyteHelp = articleData.get(i); if (abyteHelp.length > 0) { bHasData = true; if (bytesEqualsString(abyteHelp, "=ybegin")) { encoding = "yenc"; break; } else if (bytesEqualsString(abyteHelp, "begin ")) { encoding = "uu"; break; } } } if (encoding == null) { if (bHasData) { encoding = "yenc"; logger.msg( "No suitable decoder (no data) found for downloaded file: " + dlFile.getFilename() + " -- Assuming yenc.", MyLogger.SEV_WARNING); } else { // too bad, no decoder found for this file :( logger.msg( "No suitable decoder found for downloaded file (no data): " + dlFile.getFilename(), MyLogger.SEV_ERROR); // update main application window SwingUtilities.invokeLater( new Runnable() { public void run() { mainApp.fileDecodingFinished(dlFile.getFilename()); } }); return; } } /* * // determine data encoding String encoding = null; * if(bytesEqualsString(articleData.get(0), "=ybegin")) encoding = * "yenc"; else if(bytesEqualsString(articleData.get(0), "begin ")) * encoding = "uu"; else { // too bad, no decoder found for this file :( * logger.msg("No suitable decoder found for downloaded file: " + * dlFile.getFilename(), MyLogger.SEV_ERROR); * * // update main application window SwingUtilities.invokeLater(new * Runnable() { public void run() { * mainApp.fileDecodingFinished(dlFile.getFilename()); } } ); * * return; } */ // start data decoding background thread FileDecoder fileDecoder = new FileDecoder(mainApp, dlDir, dlFile, articleData, encoding); Thread t = new Thread(fileDecoder); t.start(); }