Implemented socket connect and read timeout.

This commit is contained in:
didfet
2015-03-24 11:38:19 +01:00
parent cb36f31dbd
commit af9ec174e2
2 changed files with 21 additions and 12 deletions

View File

@@ -45,6 +45,7 @@ public class Forwarder {
private static Logger logger = Logger.getLogger(Forwarder.class); private static Logger logger = Logger.getLogger(Forwarder.class);
private static int spoolSize = 1024; private static int spoolSize = 1024;
private static int idleTimeout = 5000; private static int idleTimeout = 5000;
private static int networkTimeout = 15000;
private static String config; private static String config;
private static ConfigurationManager configManager; private static ConfigurationManager configManager;
private static FileWatcher watcher; private static FileWatcher watcher;
@@ -91,7 +92,7 @@ public class Forwarder {
Thread.sleep(idleTimeout); Thread.sleep(idleTimeout);
} catch(AdapterException e) { } catch(AdapterException e) {
logger.error("Lost server connection"); logger.error("Lost server connection");
Thread.sleep(configManager.getConfig().getNetwork().getTimeout() * 1000); Thread.sleep(networkTimeout);
connectToServer(); connectToServer();
} }
} }
@@ -100,6 +101,7 @@ public class Forwarder {
private static void connectToServer() { private static void connectToServer() {
int randomServerIndex = 0; int randomServerIndex = 0;
List<String> serverList = configManager.getConfig().getNetwork().getServers(); List<String> serverList = configManager.getConfig().getNetwork().getServers();
networkTimeout = configManager.getConfig().getNetwork().getTimeout() * 1000;
if(adapter != null) { if(adapter != null) {
try { try {
adapter.close(); adapter.close();
@@ -114,7 +116,7 @@ public class Forwarder {
randomServerIndex = random.nextInt(serverList.size()); randomServerIndex = random.nextInt(serverList.size());
String[] serverAndPort = serverList.get(randomServerIndex).split(":"); String[] serverAndPort = serverList.get(randomServerIndex).split(":");
logger.info("Trying to connect to " + serverList.get(randomServerIndex)); logger.info("Trying to connect to " + serverList.get(randomServerIndex));
adapter = new LumberjackClient(configManager.getConfig().getNetwork().getSslCA(),serverAndPort[0],Integer.parseInt(serverAndPort[1])); adapter = new LumberjackClient(configManager.getConfig().getNetwork().getSslCA(),serverAndPort[0],Integer.parseInt(serverAndPort[1]), networkTimeout);
reader.setAdapter(adapter); reader.setAdapter(adapter);
} catch(Exception ex) { } catch(Exception ex) {
logger.error("Failed to connect to server " + serverList.get(randomServerIndex) + " : " + ex.getMessage()); logger.error("Failed to connect to server " + serverList.get(randomServerIndex) + " : " + ex.getMessage());

View File

@@ -27,16 +27,19 @@ import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ProtocolException; import java.net.ProtocolException;
import java.net.Socket;
import java.security.KeyStore; import java.security.KeyStore;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.zip.Deflater; import java.util.zip.Deflater;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.TrustManagerFactory;
import org.apache.commons.io.HexDump; import org.apache.commons.io.HexDump;
@@ -50,7 +53,8 @@ public class LumberjackClient implements ProtocolAdapter {
private final static byte FRAME_DATA = 0x44; private final static byte FRAME_DATA = 0x44;
private final static byte FRAME_COMPRESSED = 0x43; private final static byte FRAME_COMPRESSED = 0x43;
private SSLSocket socket; private Socket socket;
private SSLSocket sslSocket;
private KeyStore keyStore; private KeyStore keyStore;
private String server; private String server;
private int port; private int port;
@@ -58,7 +62,7 @@ public class LumberjackClient implements ProtocolAdapter {
private DataInputStream input; private DataInputStream input;
private int sequence = 1; private int sequence = 1;
public LumberjackClient(String keyStorePath, String server, int port) throws IOException { public LumberjackClient(String keyStorePath, String server, int port, int timeout) throws IOException {
this.server = server; this.server = server;
this.port = port; this.port = port;
@@ -72,13 +76,16 @@ public class LumberjackClient implements ProtocolAdapter {
SSLContext context = SSLContext.getInstance("TLS"); SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null); context.init(null, tmf.getTrustManagers(), null);
SocketFactory socketFactory = context.getSocketFactory(); SSLSocketFactory socketFactory = context.getSocketFactory();
socket = (SSLSocket)socketFactory.createSocket(this.server, this.port); socket = new Socket();
socket.setUseClientMode(true); socket.connect(new InetSocketAddress(InetAddress.getByName(server), port), timeout);
socket.startHandshake(); socket.setSoTimeout(timeout);
sslSocket = (SSLSocket)socketFactory.createSocket(socket, server, port, true);
sslSocket.setUseClientMode(true);
sslSocket.startHandshake();
output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); output = new DataOutputStream(new BufferedOutputStream(sslSocket.getOutputStream()));
input = new DataInputStream(socket.getInputStream()); input = new DataInputStream(sslSocket.getInputStream());
logger.info("Connected to " + server + ":" + port); logger.info("Connected to " + server + ":" + port);
} catch(IOException e) { } catch(IOException e) {
@@ -198,7 +205,7 @@ public class LumberjackClient implements ProtocolAdapter {
public void close() throws AdapterException { public void close() throws AdapterException {
try { try {
socket.close(); sslSocket.close();
} catch(Exception e) { } catch(Exception e) {
throw new AdapterException(e); throw new AdapterException(e);
} }