package com.limegroup.gnutella.handshaking;
import java.net.Socket;
import java.net.SocketException;
import java.util.List;
import java.util.Properties;
import com.limegroup.gnutella.Constants;
import com.limegroup.gnutella.io.NIOMultiplexor;
public class AsyncOutgoingHandshaker implements Handshaker {
private HandshakeSupport support;
private AsyncHandshaker shaker;
private Socket socket;
public AsyncOutgoingHandshaker(Properties requestHeaders, HandshakeResponder responder,
Socket socket, HandshakeObserver observer) {
this.socket = socket;
this.support = new HandshakeSupport(socket.getInetAddress().getHostAddress());
List states = HandshakeState.getOutgoingHandshakeStates(support, requestHeaders, 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();
}
}