package com.limegroup.gnutella.handshaking; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.limewire.nio.statemachine.IOState; /** Outlines all the states an asynchronous handshake can be in. */ class HandshakeState { /** * Returns a new set of HandshakeStates for doing an asynchronous incoming handshake. * * @param support The HandshakeSupport supporter that'll keep track of what we're doing. * @param responder The responder to use when we write a response. * @return */ static List<IOState> getIncomingHandshakeStates(HandshakeSupport support, HandshakeResponder responder) { List<IOState> list = new ArrayList<IOState>(3); list.add(new ReadHandshakeState.ReadRequestState(support)); list.add(new WriteHandshakeState.WriteResponseState(support, responder, false)); list.add(new ReadHandshakeState.ReadResponseState(support)); return list; } /** * Returns a new set of HandshakeStates for doing an asynchronous outgoing handshake. * * @param support The HandshakeSupport supporter that'll keep track of what we're doing. * @param request The initial set of request headers to send. * @param responder The responder to use when we write a response. * @return */ static List<IOState> getOutgoingHandshakeStates(HandshakeSupport support, Properties request, HandshakeResponder responder) { List<IOState> list = new ArrayList<IOState>(3); list.add(new WriteHandshakeState.WriteRequestState(support, request)); list.add(new ReadHandshakeState.ReadResponseState(support)); list.add(new WriteHandshakeState.WriteResponseState(support, responder, true)); return list; } private HandshakeState() {} }