code: public final void execute () throws InternetSCSIException {
  
          final Queue<ProtocolDataUnit> protocolDataUnits = new LinkedList<ProtocolDataUnit>();
  
          ProtocolDataUnit protocolDataUnit;
          DataOutParser dataOut;
          IDataSegmentChunk dataSegmentChunk;
          boolean finalFlag = false;
          final int maxRecvDataSegmentLength = connection.getSettingAsInt(OperationalTextKey.MAX_RECV_DATA_SEGMENT_LENGTH);
          // the remaining bytes to send (do not forget the immediately send
          // data!)
          int bytes2Transfer = connection.getSettingAsInt(OperationalTextKey.FIRST_BURST_LENGTH) - bufferOffset;
  
          while (bytes2Transfer > 0 && iterator.hasNext()) {
              if (bytes2Transfer <= maxRecvDataSegmentLength) {
                  dataSegmentChunk = iterator.next(bytes2Transfer);
                  finalFlag = true;
              } else {
                  dataSegmentChunk = iterator.next(maxRecvDataSegmentLength);
                  finalFlag = false;
              }
  
              protocolDataUnit = protocolDataUnitFactory.create(false, finalFlag, OperationCode.SCSI_DATA_OUT, connection.getSetting(OperationalTextKey.HEADER_DIGEST), connection.getSetting(OperationalTextKey.DATA_DIGEST));
              protocolDataUnit.getBasicHeaderSegment().setInitiatorTaskTag(connection.getSession().getInitiatorTaskTag());
  
              dataOut = (DataOutParser) protocolDataUnit.getBasicHeaderSegment().getParser();
  
              dataOut.setTargetTransferTag(targetTransferTag);
              dataOut.setDataSequenceNumber(dataSequenceNumber++);
              dataOut.setBufferOffset(bufferOffset);
              bufferOffset += maxRecvDataSegmentLength;
  
              protocolDataUnit.setDataSegment(dataSegmentChunk);
  
              protocolDataUnits.offer(protocolDataUnit);
              bytes2Transfer -= maxRecvDataSegmentLength;
          }
  
          connection.send(protocolDataUnits);
  
          connection.nextState(new WriteSecondResponseState(connection, iterator, dataSequenceNumber, bufferOffset));
          super.stateFollowing = true;
          // return true;
      }
docs: {@inheritDoc}