* get an answer.
*/
private ReplServerStartDSMsg performECLPhaseOneHandshake(String server,
boolean keepConnection)
{
ReplServerStartDSMsg replServerStartDSMsg = null;
// Parse server string.
int separator = server.lastIndexOf(':');
String port = server.substring(separator + 1);
String hostname = server.substring(0, separator);
ProtocolSession localSession = null;
boolean error = false;
try
{
/*
* Open a socket connection to the next candidate.
*/
int intPort = Integer.parseInt(port);
InetSocketAddress serverAddr = new InetSocketAddress(
InetAddress.getByName(hostname), intPort);
Socket socket = new Socket();
socket.setReceiveBufferSize(1000000);
socket.setTcpNoDelay(true);
socket.connect(serverAddr, 500);
localSession = replSessionSecurity.createClientSession(server, socket,
ReplSessionSecurity.HANDSHAKE_TIMEOUT);
boolean isSslEncryption =
replSessionSecurity.isSslEncryption(server);
// Send our start msg.
ServerStartECLMsg serverStartECLMsg = new ServerStartECLMsg(
baseDn, 0, 0, 0, 0,
maxRcvWindow, heartbeatInterval, state,
ProtocolVersion.getCurrentVersion(), this.getGenerationID(),
isSslEncryption,
groupId);
localSession.publish(serverStartECLMsg);
// Read the ReplServerStartMsg that should come back.
replServerStartDSMsg = (ReplServerStartDSMsg) localSession.receive();
if (debugEnabled())
{
debugInfo("In RB for " + baseDn +
"\nRB HANDSHAKE SENT:\n" + serverStartECLMsg.toString() +
"\nAND RECEIVED:\n" + replServerStartDSMsg.toString());
}
// Sanity check
String repDn = replServerStartDSMsg.getBaseDn();
if (!(this.baseDn.equals(repDn)))
{
Message message = ERR_DS_DN_DOES_NOT_MATCH.get(repDn.toString(),
this.baseDn);
logError(message);
error = true;
}
/*
* We have sent our own protocol version to the replication server.
* The replication server will use the same one (or an older one
* if it is an old replication server).
*/
if (keepConnection)
protocolVersion = ProtocolVersion.minWithCurrent(
replServerStartDSMsg.getVersion());
localSession.setProtocolVersion(protocolVersion);
if (!isSslEncryption)
{
localSession.stopEncryption();