public int read(byte[] b, int off, int len) throws InterruptedIOException, IOException {
    int result = super.read(b, off, len);

    if (result != -1) {
      _uploadState.fileProgressedDelta(off + result);
    }
    return result;
  }
  public int read() throws InterruptedIOException, IOException {
    int result = super.read();

    if (result != -1) {
      _uploadState.fileProgressedDelta(1);
    }
    return result;
  }
 public void reset() throws IOException {
   super.reset();
   _uploadState.fileProgressed(_markedPosition);
 }
 public void mark(int readlimit) {
   super.mark(readlimit);
   _markedPosition = _uploadState.getFileBytesSent();
 }
  public long skip(long n) throws IOException {
    long result = super.skip(n);

    _uploadState.fileProgressedDelta(result);
    return result;
  }