package com.limegroup.gnutella.handshaking;
import java.net.Socket;
import java.net.SocketException;
import java.util.List;
import com.limegroup.gnutella.Constants;
import com.limegroup.gnutella.io.NIOMultiplexor;
public class AsyncIncomingHandshaker implements Handshaker {
private HandshakeSupport support;
private AsyncHandshaker shaker;
private Socket socket;
public AsyncIncomingHandshaker(HandshakeResponder responder,
Socket socket,
HandshakeObserver observer) {
this.socket = socket;
this.support = new HandshakeSupport(socket.getInetAddress().getHostAddress());
List states = HandshakeState.getIncomingHandshakeStates(support, responder);
shaker = new AsyncHandshaker(this, observer, states);
}
public void shake() throws SocketException {
socket.setSoTimeout(Constants.TIMEOUT);
((NIOMultiplexor)socket).setReadObserver(shaker);
((NIOMultiplexor)socket).setWriteObserver(shaker);
}
public HandshakeResponse getWrittenHeaders() {
return support.getWrittenHandshakeResponse();
}
public HandshakeResponse getReadHeaders() {
return support.getReadHandshakeResponse();
}
}