Пример #1
0
  /*
   * 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;
  }
Пример #2
0
  public void OpenDir(DvrDirectory poDir) {
    if (poDir.m_bIsOpen) return;

    Lock();
    try {
      Calendar loCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
      byte[] laGetDir = new byte[] // Command
          {Header.PT_GETDIR, 0, (byte) (poDir.m_oParent == null ? 0 : 1)};
      write(laGetDir); // Send
      readack();

      if (poDir.m_oParent != null) {
        write(poDir.m_cRemoteName);
        readbyte();
        ping();
      }

      short lnAnzElements = readshort();
      short lnIndex = 0;
      String lcFileName = "";
      long lnSize = 0;
      int lnTimeStamp = 0;
      while (lnAnzElements > 0) {
        loCalendar.set(1999, 12, 01, 00, 00, 00);
        byte lbType = readbyte();
        byte lbIsDir = 0;
        switch (lbType) {
          case 0: // Directory
            lbIsDir = readbyte();
            lcFileName = readstring();
            poDir.m_oDirectorys.add(new DvrDirectory(poDir, lcFileName, lcFileName, null));
            break;
          case 1: // Binary
            lcFileName = readstring();
            lnSize = readlong();
            lnTimeStamp = readint();
            loCalendar.add(Calendar.SECOND, lnTimeStamp);
            poDir.m_oFiles.add(
                new DvrFile(poDir, lcFileName, lnSize, (short) -1, lbType, loCalendar.getTime()));
            break;
          case 3: // TS Radio
          case 4: // TS File Record SD Quality
          case 7: // TS File Record HD Quality
            lbIsDir = readbyte();
            lnIndex = readbyte();
            lcFileName = readstring();
            lnSize = readlong();
            lnTimeStamp = readint();
            loCalendar.add(Calendar.SECOND, lnTimeStamp);
            poDir.m_oFiles.add(
                new DvrFile(poDir, lcFileName, lnSize, lnIndex, lbType, loCalendar.getTime()));
            break;
          case 9: // USB Memory Stick
            lbIsDir = readbyte();
            String lcDescription = readstring();
            String lcName = readstring();
            poDir.m_oDirectorys.add(
                new DvrDirectory(poDir, lcName, lcName.substring(1), lcDescription));
            break;
          default:
            throw new IOException("Unknown RecordType " + lbType);
        }
        lnAnzElements--;
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      Unlock();
    }
    poDir.m_bIsOpen = true;
  }