/** * Called when a transfer is finished from setEndOfTransfer * * @return True if it was already called before * @throws FtpNoTransferException */ private boolean checkFtpTransferStatus() throws FtpNoTransferException { if (isCheckAlreadyCalled) { logger.warn("Check: ALREADY CALLED"); return true; } if (isExecutingCommandFinished) { // already done logger.warn("Check: already Finished"); if (commandFinishing != null) { commandFinishing.cancel(); } throw new FtpNoTransferException("No transfer running"); } if (!isDataNetworkHandlerReady) { // already done logger.warn("Check: already DNH not ready"); throw new FtpNoTransferException("No connection"); } isCheckAlreadyCalled = true; FtpTransfer executedTransfer = getExecutingFtpTransfer(); // logger.debug("Check: command {}", executedTransfer.getCommand()); // DNH is ready and Transfer is running if (FtpCommandCode.isListLikeCommand(executedTransfer.getCommand())) { if (executedTransfer.getStatus()) { // Special status for List Like command // logger.debug("Check: List OK"); closeTransfer(); return false; } // logger.debug("Check: List Ko"); abortTransfer(); return false; } else if (FtpCommandCode.isRetrLikeCommand(executedTransfer.getCommand())) { FtpFile file = null; try { file = executedTransfer.getFtpFile(); } catch (FtpNoFileException e) { // logger.debug("Check: Retr no FtpFile for Retr"); abortTransfer(); return false; } try { if (file.isInReading()) { logger.debug("Check: Retr FtpFile still in reading KO"); abortTransfer(); } else { logger.debug("Check: Retr FtpFile no more in reading OK"); closeTransfer(); } } catch (CommandAbstractException e) { logger.warn("Retr Test is in Reading problem", e); closeTransfer(); } return false; } else if (FtpCommandCode.isStoreLikeCommand(executedTransfer.getCommand())) { // logger.debug("Check: Store OK"); closeTransfer(); return false; } else { logger.warn("Check: Unknown command"); abortTransfer(); } return false; }