package org.jscsi.target.connection.stage.fullfeature;
import java.io.IOException;
import java.security.DigestException;
import org.jscsi.exception.InternetSCSIException;
import org.jscsi.parser.BasicHeaderSegment;
import org.jscsi.parser.ProtocolDataUnit;
import org.jscsi.parser.logout.LogoutResponse;
import org.jscsi.target.connection.TargetPduFactory;
import org.jscsi.target.connection.phase.TargetFullFeaturePhase;
import org.jscsi.target.settings.SettingsException;
/**
* A stage for processing logout requests.
* <p>
* Since <code>MaxConnections</code> is currently limited to <code>1</code>, all logout requests will be
* treated as requests to close the session.
*
* @author Andreas Ergenzinger
*/
public final class LogoutStage extends TargetFullFeatureStage {
public LogoutStage(TargetFullFeaturePhase targetFullFeaturePhase) {
super(targetFullFeaturePhase);
}
@Override
public void execute(ProtocolDataUnit pdu) throws IOException, InterruptedException,
InternetSCSIException, DigestException, SettingsException {
final BasicHeaderSegment bhs = pdu.getBasicHeaderSegment();
final int initiatorTaskTag = bhs.getInitiatorTaskTag();
final ProtocolDataUnit responsePDU =
TargetPduFactory.createLogoutResponsePdu(LogoutResponse.CONNECTION_CLOSED_SUCCESSFULLY,
initiatorTaskTag, (short)settings.getDefaultTime2Wait(),// time2Wait
(short)settings.getDefaultTime2Retain());// time2Retain
connection.sendPdu(responsePDU);
}
}