1 package org.jscsi.target.connection.stage.fullfeature;
2
3
4 import java.io.IOException;
5 import java.security.DigestException;
6
7 import org.jscsi.exception.InternetSCSIException;
8 import org.jscsi.parser.BasicHeaderSegment;
9 import org.jscsi.parser.ProtocolDataUnit;
10 import org.jscsi.parser.scsi.SCSICommandParser;
11 import org.jscsi.parser.scsi.SCSIResponseParser;
12 import org.jscsi.parser.scsi.SCSIStatus;
13 import org.jscsi.target.connection.TargetPduFactory;
14 import org.jscsi.target.connection.phase.TargetFullFeaturePhase;
15 import org.jscsi.target.scsi.ScsiResponseDataSegment;
16 import org.jscsi.target.scsi.cdb.TestUnitReadyCdb;
17 import org.jscsi.target.scsi.sense.senseDataDescriptor.senseKeySpecific.FieldPointerSenseKeySpecificData;
18 import org.jscsi.target.settings.SettingsException;
19
20
21
22
23
24
25
26 public class TestUnitReadyStage extends TargetFullFeatureStage {
27
28 public TestUnitReadyStage (TargetFullFeaturePhase targetFullFeaturePhase) {
29 super(targetFullFeaturePhase);
30 }
31
32 @Override
33 public void execute (ProtocolDataUnit pdu) throws IOException , InterruptedException , InternetSCSIException , DigestException , SettingsException {
34
35 final BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
36 final SCSICommandParser parser = (SCSICommandParser) bhs.getParser();
37
38 ProtocolDataUnit responsePdu;
39
40
41 final TestUnitReadyCdb cdb = new TestUnitReadyCdb(parser.getCDB());
42 final FieldPointerSenseKeySpecificData[] illegalFieldPointers = cdb.getIllegalFieldPointers();
43
44 if (illegalFieldPointers != null) {
45
46
47 responsePdu = createFixedFormatErrorPdu(illegalFieldPointers,
48 bhs.getInitiatorTaskTag(),
49 parser.getExpectedDataTransferLength());
50
51 } else {
52
53
54
55 responsePdu = TargetPduFactory.createSCSIResponsePdu(false,
56 false,
57 false,
58 false,
59 SCSIResponseParser.ServiceResponse.COMMAND_COMPLETED_AT_TARGET,
60 SCSIStatus.GOOD,
61 bhs.getInitiatorTaskTag(),
62 0,
63 0,
64 0,
65 0,
66 ScsiResponseDataSegment.EMPTY_DATA_SEGMENT);
67
68 }
69
70
71 connection.sendPdu(responsePdu);
72 }
73
74 }