private Packet readFromPacket(Packet packet) {
      Packet newPacket = new Packet();
      ByteBuffer buffer = ByteBuffer.allocate(4096);
      boolean writeDone;
      boolean readDone;
      do {
        writeDone = packet.writeTo(buffer);
        buffer.flip();
        readDone = newPacket.readFrom(buffer);
        if (buffer.hasRemaining()) {
          throw new IllegalStateException("Buffer should be empty! " + buffer);
        }
        buffer.clear();
      } while (!writeDone);

      if (!readDone) {
        throw new IllegalStateException("Read should be completed!");
      }

      newPacket.setConn(localConnection);
      return newPacket;
    }