Examples of ProtocolDataUnit


Examples of org.jscsi.parser.ProtocolDataUnit

            // the command must fail

            LOGGER.debug("illegal field in Read CDB");

            // create and send error PDU and leave stage
            final ProtocolDataUnit responsePdu = createFixedFormatErrorPdu(cdb.getIllegalFieldPointers(),// senseKeySpecificData
                    initiatorTaskTag, parser.getExpectedDataTransferLength());
            connection.sendPdu(responsePdu);
            return;
        }

        final int totalTransferLength = VIRTUAL_BLOCK_SIZE * cdb.getTransferLength();
        final long storageOffset = VIRTUAL_BLOCK_SIZE * cdb.getLogicalBlockAddress();

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("cdb.getLogicalBlockAddress() = " + cdb.getLogicalBlockAddress());
            LOGGER.debug("blockSize = " + VIRTUAL_BLOCK_SIZE);
            LOGGER.debug("totalTransferLength = " + totalTransferLength);
            LOGGER.debug("expectedDataSegmentLength = " + parser.getExpectedDataTransferLength());
        }

        // *** start sending ***
        // initialize counters and data segment buffer
        int bytesSent = 0;
        int dataSequenceNumber = 0;
        byte[] dataSegmentArray = null;
        ByteBuffer dataSegment = null;
        ProtocolDataUnit responsePdu;

        // *** send up to last but one Data-In PDU ***
        // (with DataSegmentSize == MaxRecvDataSegmentLength)

        if (bytesSent < totalTransferLength - settings.getMaxRecvDataSegmentLength()) {
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

    // --------------------------------------------------------------------------

    /** {@inheritDoc} */
    public final void execute () throws InternetSCSIException {

        final ProtocolDataUnit protocolDataUnit = connection.receive();
        LOGGER.trace("1" + protocolDataUnit);
        if (protocolDataUnit.getBasicHeaderSegment().getParser() instanceof Ready2TransferParser) {
            LOGGER.trace("2");
            final Ready2TransferParser parser = (Ready2TransferParser) protocolDataUnit.getBasicHeaderSegment().getParser();

            final int targetTransferTag = parser.getTargetTransferTag();
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("R2T has TTT set to " + targetTransferTag);
            }

            final int desiredDataTransferLength = parser.getDesiredDataTransferLength();
            if (desiredDataTransferLength > connection.getSettingAsInt(OperationalTextKey.MAX_BURST_LENGTH)) {
                if (LOGGER.isErrorEnabled()) {
                    LOGGER.error("MaxBurstLength limit is exceed.");
                }
                throw new InternetSCSIException("MaxBurstLength limit is exceed.");
            }

            connection.nextState(new WriteSecondBurstState(connection, iterator, targetTransferTag, desiredDataTransferLength, dataSequenceNumber, bufferOffset));
            super.stateFollowing = true;
            // return true;
            return;
        } else if (protocolDataUnit.getBasicHeaderSegment().getParser() instanceof SCSIResponseParser) {
            final SCSIResponseParser parser = (SCSIResponseParser) protocolDataUnit.getBasicHeaderSegment().getParser();

            if (!iterator.hasNext() && parser.getStatus() == SCSIStatus.GOOD) {
                connection.getSession().incrementInitiatorTaskTag();
                // return false;
                super.stateFollowing = false;
                return;
            }
        }

        throw new RuntimeException(protocolDataUnit.getBasicHeaderSegment().getParser().toString());
    }
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

    public void execute (ProtocolDataUnit pdu) throws IOException , InterruptedException , InternetSCSIException , DigestException , SettingsException {

        final BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
        final SCSICommandParser parser = (SCSICommandParser) bhs.getParser();

        ProtocolDataUnit responsePDU = null;// the response PDU

        // get command details in CDB
        final RequestSenseCdb cdb = new RequestSenseCdb(parser.getCDB());
        final FieldPointerSenseKeySpecificData[] illegalFieldPointers = cdb.getIllegalFieldPointers();
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

    /** {@inheritDoc} */
    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);
        int bytes2Transfer = Math.min(connection.getSettingAsInt(OperationalTextKey.MAX_BURST_LENGTH), desiredDataTransferLength);

        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("bytes2Transfer: " + bytes2Transfer + " iterator.hasNext(): " + iterator.hasNext());
        }

        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;
        }

View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

                break;
            default :
                break;
        }

        final ProtocolDataUnit responsePDU = TargetPduFactory.createTMResponsePdu(responseCode, initiatorTaskTag);
        connection.sendPdu(responsePDU);

    }
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

     * @throws IOException
     * @throws SettingsException
     * @throws InterruptedException
     */
    protected final String receivePduSequence () throws DigestException , InternetSCSIException , IOException , SettingsException , InterruptedException {
        final ProtocolDataUnit pdu = connection.receivePdu();
        return receivePduSequence(pdu);
    }
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

     * @throws DigestException
     */
    protected final void sendPduSequence (final String keyValuePairs, final LoginStage nextStage) throws SettingsException , InterruptedException , IOException , InternetSCSIException , DigestException {

        // some variables
        ProtocolDataUnit pdu;
        BasicHeaderSegment bhs;
        LoginRequestParser parser;
        boolean continueFlag = true;
        boolean transitFlag = false;

        // split input string into text data segments
        final ByteBuffer[] dataSegments = ReadWrite.stringToTextDataSegments(keyValuePairs,// string
                settings.getMaxRecvDataSegmentLength());// bufferSize

        // send all data segments (and receive confirmations)
        for (int i = 0; i < dataSegments.length; ++i) {

            // adjust flags
            if (i == dataSegments.length - 1) {
                continueFlag = false;
                if (stageNumber != nextStage) transitFlag = true;
            }

            // create and send PDU
            pdu = TargetPduFactory.createLoginResponsePdu(transitFlag,// transitFlag
                    continueFlag,// continueFlag
                    stageNumber,// currentStage
                    nextStage,// nextStage
                    session.getInitiatorSessionID(),// initiatorSessionID
                    session.getTargetSessionIdentifyingHandle(),// targetSessionIdentifyingHandle
                    initiatorTaskTag, LoginStatus.SUCCESS,// status
                    dataSegments[i]);// dataSegment
            connection.sendPdu(pdu);

            // receive confirmation
            if (continueFlag) {
                // receive and check
                pdu = connection.receivePdu();
                bhs = pdu.getBasicHeaderSegment();
                parser = (LoginRequestParser) bhs.getParser();
                if (!checkPdu(pdu) || parser.isContinueFlag()) {
                    // send login reject and leave stage
                    sendRejectPdu(LoginStatus.INITIATOR_ERROR);
                    throw new InternetSCSIException();
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

     * @throws InterruptedException
     * @throws IOException
     * @throws InternetSCSIException
     */
    protected final void sendRejectPdu (final LoginStatus errorStatus) throws InterruptedException , IOException , InternetSCSIException {
        final ProtocolDataUnit rejectPDU = TargetPduFactory.createLoginResponsePdu(false,// transit flag
                false,// continueFlag
                stageNumber,// currentStage
                stageNumber,// nextStage
                session.getInitiatorSessionID(),// initiatorSessionID
                session.getTargetSessionIdentifyingHandle(),// targetSessionIdentifyingHandle
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

     * @throws DigestException if a mismatch of the digest exists.
     * @throws SettingsException
     */
    ProtocolDataUnit receiveFromWire () throws DigestException , InternetSCSIException , IOException , SettingsException {

        ProtocolDataUnit pdu;
        if (initialPdu) {
            /*
             * The connection's ConnectionSettingsNegotiator has not been initialized, hence getSettings() would throw a
             * NullPointerException. Initialize PDU with default values, i.e. no digests.
             */
            pdu = protocolDataUnitFactory.create(TextKeyword.NONE,// header
                                                                  // digest
                    TextKeyword.NONE);// data digest
        } else {
            // use negotiated or (now available) default settings
            final Settings settings = connection.getSettings();
            pdu = protocolDataUnitFactory.create(settings.getHeaderDigest(), settings.getDataDigest());
        }

        try {
            pdu.read(socketChannel);
        } catch (ClosedChannelException e) {
            throw new InternetSCSIException(e);
        }

        if (LOGGER.isDebugEnabled()) LOGGER.debug("Receiving this PDU:\n" + pdu);

        // parse sequence counters
        final BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
        final InitiatorMessageParser parser = (InitiatorMessageParser) bhs.getParser();
        // final int commandSequenceNumber = parser.getCommandSequenceNumber();
        // final int expectedStatusSequenceNumber = parser.getExpectedStatusSequenceNumber();

        if (LOGGER.isDebugEnabled()) {
View Full Code Here

Examples of org.jscsi.parser.ProtocolDataUnit

     */
    private static final ProtocolDataUnitFactory factory = new ProtocolDataUnitFactory();

    public static final ProtocolDataUnit createDataInPdu (boolean finalFlag, boolean acknowledgeFlag, boolean residualOverflowFlag, boolean residualUnderflowFlag, boolean statusFlag, SCSIStatus status, long logicalUnitNumber, int initiatorTaskTag, int targetTransferTag, int dataSequenceNumber,//
            int bufferOffset, int residualCount, ByteBuffer dataSegment) {
        final ProtocolDataUnit pdu = factory.create(false, finalFlag, OperationCode.SCSI_DATA_IN, "None", "None");
        final BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
        final DataInParser parser = (DataInParser) bhs.getParser();
        parser.setAcknowledgeFlag(acknowledgeFlag);
        parser.setResidualOverflowFlag(residualOverflowFlag);
        parser.setResidualUnderflowFlag(residualUnderflowFlag);
        parser.setStatusFlag(statusFlag);
        parser.setStatus(status);
        parser.setLogicalUnitNumber(logicalUnitNumber);
        bhs.setInitiatorTaskTag(initiatorTaskTag);
        parser.setTargetTransferTag(targetTransferTag);
        parser.setDataSequenceNumber(dataSequenceNumber);
        parser.setBufferOffset(bufferOffset);
        parser.setResidualCount(residualCount);
        pdu.setDataSegment(dataSegment);
        return pdu;
    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.