Package org.jscsi.parser.login

Examples of org.jscsi.parser.login.LoginRequestParser


                    final ProtocolDataUnit pdu = connection.receivePdu();
                    // confirm OpCode-
                    if (pdu.getBasicHeaderSegment().getOpCode() != OperationCode.LOGIN_REQUEST) throw new InternetSCSIException();
                    // get initiatorSessionID
                   
                    LoginRequestParser parser = (LoginRequestParser) pdu.getBasicHeaderSegment().getParser();
                    ISID initiatorSessionID = parser.getInitiatorSessionID();

                    /*
                     * TODO get (new or existing) session based on TSIH But since we don't do session reinstatement and
                     * MaxConnections=1, we can just create a new one.
                     */
                    TargetSession session = new TargetSession(this, connection, initiatorSessionID, parser.getCommandSequenceNumber(),// set
                                                                                                                                      // ExpCmdSN
                                                                                                                                      // (PDU
                                                                                                                                      // is
                                                                                                                                      // immediate,
                                                                                                                                      // hence
                                                                                                                                      // no
                                                                                                                                      // ++)
                    parser.getExpectedStatusSequenceNumber());

                    sessions.add(session);
                    // threadPool.submit(connection);// ignore returned Future
                    connection.call();
                } catch (DigestException | InternetSCSIException | SettingsException e) {
View Full Code Here


     */
    private static final AbstractMessageParser createParser (final ProtocolDataUnit protocolDataUnit, final OperationCode operationCode) {

        switch (operationCode) {
            case LOGIN_REQUEST :
                return new LoginRequestParser(protocolDataUnit);
            case LOGIN_RESPONSE :
                return new LoginResponseParser(protocolDataUnit);
            case LOGOUT_REQUEST :
                return new LogoutRequestParser(protocolDataUnit);
            case LOGOUT_RESPONSE :
View Full Code Here

                                       // committed

        try {
            // if possible, enter LOPN Stage
            BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
            LoginRequestParser parser = (LoginRequestParser) bhs.getParser();

            LoginStage nextStageNumber;// will store return value from the last
                                       // login stage

            // Security Negotiation Stage (optional)
            if (parser.getCurrentStageNumber() == LoginStage.SECURITY_NEGOTIATION) {
                // complete SNS
                stage = new SecurityNegotiationStage(this);
                stage.execute(pdu);
                nextStageNumber = stage.getNextStageNumber();

                if (nextStageNumber != null)
                    authenticated = true;
                else {
                    loginSuccessful = false;
                    return false;
                }

                if (nextStageNumber == LoginStage.LOGIN_OPERATIONAL_NEGOTIATION) {
                    // receive first PDU from LOPNS
                    pdu = connection.receivePdu();
                    bhs = pdu.getBasicHeaderSegment();
                    parser = (LoginRequestParser) bhs.getParser();
                } else if (nextStageNumber == LoginStage.FULL_FEATURE_PHASE) {
                    // we are done here
                    return true;
                } else {
                    // should be unreachable, since SNS may not return NSG==SNS
                    loginSuccessful = false;
                    return false;
                }
            }

            // Login Operational Parameter Negotiation Stage (also optional, but
            // either SNS or LOPNS must be passed before proceeding to FFP)
            if (parser != null && authenticated && parser.getCurrentStageNumber() == LoginStage.LOGIN_OPERATIONAL_NEGOTIATION) {
                stage = new LoginOperationalParameterNegotiationStage(this);
                stage.execute(pdu);
                nextStageNumber = stage.getNextStageNumber();
                if (nextStageNumber == LoginStage.FULL_FEATURE_PHASE) return true;
            }
View Full Code Here

        LOGGER.info("Sending these login parameters:\n" + loginParameters);

        final int maxRecvDataSegmentLength = connection.getSettingAsInt(OperationalTextKey.MAX_RECV_DATA_SEGMENT_LENGTH);
        final ISID isid = ISID.createRandom(System.currentTimeMillis());

        LoginRequestParser loginRequest;
        boolean continueFlag;
        // here the finalFlag represents the transitFlag
        boolean finalFlag;
        final IDataSegment dataSegment = DataSegmentFactory.create(loginParameters.asByteBuffer(), DataSegmentFormat.TEXT, maxRecvDataSegmentLength);
        final IDataSegmentIterator iterator = dataSegment.iterator();
        final Queue<ProtocolDataUnit> protocolDataUnits = new LinkedList<ProtocolDataUnit>();

        IDataSegmentChunk dataSegmentChunk;
        ProtocolDataUnit protocolDataUnit;
        int bytes2Transfer = dataSegment.getLength();

        while (bytes2Transfer > 0 && iterator.hasNext()) {

            if (bytes2Transfer <= maxRecvDataSegmentLength) {
                // last PDU to send...
                dataSegmentChunk = iterator.next(bytes2Transfer);
                continueFlag = false;
            } else {
                dataSegmentChunk = iterator.next(maxRecvDataSegmentLength);
                continueFlag = true;
            }

            finalFlag = !continueFlag;
            protocolDataUnit = protocolDataUnitFactory.create(true, finalFlag, OperationCode.LOGIN_REQUEST, "None", "None");
            loginRequest = (LoginRequestParser) protocolDataUnit.getBasicHeaderSegment().getParser();

            loginRequest.setContinueFlag(continueFlag);
            loginRequest.setCurrentStageNumber(connection.getSession().getPhase());
            LOGGER.debug("Phase:\n" + loginRequest.getCurrentStageNumber());
            if (finalFlag) {
                loginRequest.setNextStageNumber(nextStage);
            }
            loginRequest.setMaxVersion(MAXIMUM_VERSION);
            loginRequest.setMinVersion(MINIMUM_VERSION);

            loginRequest.setInitiatorSessionID(isid);
            loginRequest.setTargetSessionIdentifyingHandle(connection.getSession().getTargetSessionIdentifyingHandle());

            protocolDataUnit.setDataSegment(dataSegmentChunk);

            protocolDataUnits.offer(protocolDataUnit);
            bytes2Transfer -= maxRecvDataSegmentLength;
View Full Code Here

     * @param pdu the PDU to check
     * @return <code>true</code> if the PDU checks out
     */
    protected boolean checkPdu (ProtocolDataUnit pdu) {
        final BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
        final LoginRequestParser parser = (LoginRequestParser) bhs.getParser();
        if (bhs.getOpCode() == OperationCode.LOGIN_REQUEST && parser.getCurrentStageNumber() == stageNumber && bhs.getInitiatorTaskTag() == initiatorTaskTag) return true;
        return false;
    }
View Full Code Here

        // StringBuilder for the key-value pairs received during this sequence
        final StringBuilder stringBuilder = new StringBuilder();

        // for accessing the fields of the last received PDU
        BasicHeaderSegment bhs;
        LoginRequestParser parser;

        // begin sequence
        int sequenceLength = 1;
        while (sequenceLength <= session.getTargetServer().getConfig().getInMaxRecvTextPduSequenceLength()) {
            bhs = pdu.getBasicHeaderSegment();
            parser = (LoginRequestParser) bhs.getParser();

            // check PDU
            if (!checkPdu(pdu)) {
                // send login reject and leave stage
                sendRejectPdu(LoginStatus.INVALID_DURING_LOGIN);
                throw new InternetSCSIException("Wrong PDU in TargetLoginStage");
            }

            // PDU is okay, so append text data segment to stringBuilder
            ReadWrite.appendTextDataSegmentToStringBuffer(pdu.getDataSegment(), stringBuilder);

            // remember what stage the initiator wants to transition to
            requestedNextStageNumber = parser.getNextStageNumber();

            // continue?
            if (parser.isContinueFlag()) {
                // send reception confirmation
                pdu = TargetPduFactory.createLoginResponsePdu(false,// transitFlag
                        false,// continueFlag
                        stageNumber,// currentStage
                        stageNumber,// nextStage
View Full Code Here

    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

TOP

Related Classes of org.jscsi.parser.login.LoginRequestParser

Copyright © 2018 www.massapicom. 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.