private BufferedOutputStream createdstfile(String pcDstFile) throws IOException { File loTsFile = new File(pcDstFile); if (loTsFile.exists()) { if (Props.Get("SAFEITY").equals("1")) { Logfile.Write("Error File " + pcDstFile + " already exists!"); throw new IOException("Error File " + pcDstFile + " already exists!"); } } FileOutputStream loFileWriter = new FileOutputStream(pcDstFile); BufferedOutputStream loFastFileWriter = new BufferedOutputStream(loFileWriter); return loFastFileWriter; }
/* * Download a File from the Reciever to the * Destination File specified in pcDstFile */ public boolean Download(DvrFile poFile, String pcDstFile) { /* * Parameter Checks */ if (pcDstFile.endsWith("/")) { pcDstFile = pcDstFile + poFile.getUniqueFileName(); } String lcPostCopyAction = Props.Get("POSTCOPYSCRIPT"); int lnPostCopyThreads = Integer.parseInt(Props.Get("POSTCOPYTHREADCOUNT")); boolean lbStartDownload = false; boolean lbPostCopyAction = false; boolean lbReturn = false; if (lcPostCopyAction.equals("")) { Lock(); } else { lbPostCopyAction = true; do { Lock(); if (m_nActivePostCopyThreads < lnPostCopyThreads) { m_nActivePostCopyThreads++; lbStartDownload = true; } else { Unlock(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } while (!lbStartDownload); } /* * Socket Streams */ ByteArrayOutputStream loSocketWriteLow = new ByteArrayOutputStream(); DataOutputStream loSocketWrite = new DataOutputStream(loSocketWriteLow); String laDstFiles[]; try { Logfile.Write("Copy File " + poFile.getFileName() + " to " + pcDstFile); if (poFile.m_nType == 1) { write(new byte[] {Header.PT_GETFILE_BYNAME, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}); readbyte(); write(poFile.m_oParent.m_cRemoteName.getBytes("CP1252")); readbyte(); ping(); write(poFile.getFileName().getBytes("CP1252")); readbyte(); laDstFiles = new String[] {pcDstFile}; readstream_singlepart(createdstfile(pcDstFile)); } else { loSocketWrite.writeByte(Header.PT_GETFILE_BYRECNO); // Download Command; loSocketWrite.writeShort(poFile.getIndex()); // File Index loSocketWrite.writeLong(0); // Start Position (maybe!!) write(loSocketWriteLow.toByteArray()); // Send Message to DVR byte lbResponse = readbyte(); long lnFileSize = readlong(); byte lbFileCount = readbyte(); BufferedOutputStream[] laWrite = new BufferedOutputStream[lbFileCount]; laDstFiles = new String[lbFileCount]; for (int i = 0; i < laWrite.length; i++) { byte lbFileNo = readbyte(); laDstFiles[i] = pcDstFile + "." + readstring().toLowerCase(); laWrite[lbFileNo] = createdstfile(laDstFiles[i]); } write(Header.PT_ACK); readstream_multipart(laWrite); } Logfile.Write("Transfer Complete"); if (lbPostCopyAction) { PostCopy loPostCopy = new PostCopy(lcPostCopyAction, poFile, laDstFiles[0], this); loPostCopy.start(); } lbReturn = true; } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { Unlock(); } return lbReturn; }