From c72128ba30a386704244322c15146a1b4a609a12 Mon Sep 17 00:00:00 2001 From: Alex Clayton Date: Thu, 14 Jan 2016 11:28:44 +0000 Subject: More Changes to Networks Some more changes to the Networks classes. Based on comments on the last patch. Test-information: No longer see crash I was seeing when I ran the updated Stroke against MLC. Ran unit tests. Change-Id: Id577e5322bab0ec48f0353907f82e72bc93b848a diff --git a/src/com/isode/stroke/network/DummyTimerFactory.java b/src/com/isode/stroke/network/DummyTimerFactory.java index f3d083f..b4695f0 100644 --- a/src/com/isode/stroke/network/DummyTimerFactory.java +++ b/src/com/isode/stroke/network/DummyTimerFactory.java @@ -19,7 +19,7 @@ public class DummyTimerFactory implements TimerFactory { private int currentTime; private List timers = new ArrayList(); - public class DummyTimer extends Timer { + public static class DummyTimer extends Timer { public DummyTimer(long timeout, DummyTimerFactory factory) { this.timeout = timeout; diff --git a/src/com/isode/stroke/network/EnvironmentProxyProvider.java b/src/com/isode/stroke/network/EnvironmentProxyProvider.java index b12fe98..b36d567 100644 --- a/src/com/isode/stroke/network/EnvironmentProxyProvider.java +++ b/src/com/isode/stroke/network/EnvironmentProxyProvider.java @@ -43,9 +43,13 @@ public class EnvironmentProxyProvider implements ProxyProvider { proxyProtocol += "://"; address = envVar != null ? envVar : "0.0.0.0"; - if(envVar != null && address.substring(0, proxyProtocol.length()).equals(proxyProtocol)) { + if(envVar != null && address.startsWith(proxyProtocol)) { address = address.substring(proxyProtocol.length(), address.length()); - port = Integer.parseInt(address.substring(address.indexOf(':') + 1, address.length())); + try { + port = Integer.parseInt(address.substring(address.indexOf(':') + 1, address.length())); + } catch (NumberFormatException e) { + port = 0; + } address = address.substring(0, address.indexOf(':')); } diff --git a/src/com/isode/stroke/network/HTTPConnectProxiedConnection.java b/src/com/isode/stroke/network/HTTPConnectProxiedConnection.java index d9a6cee..a85758c 100644 --- a/src/com/isode/stroke/network/HTTPConnectProxiedConnection.java +++ b/src/com/isode/stroke/network/HTTPConnectProxiedConnection.java @@ -18,6 +18,8 @@ package com.isode.stroke.network; import com.isode.stroke.base.SafeByteArray; import com.isode.stroke.stringcodecs.Base64; + +import java.util.Scanner; import java.util.Vector; public class HTTPConnectProxiedConnection extends ProxiedConnection { @@ -69,8 +71,7 @@ public class HTTPConnectProxiedConnection extends ProxiedConnection { String dataString = data.toString(); //SWIFT_LOG(debug) << data << std::endl; httpResponseBuffer_.append(dataString); - - String statusLine = ""; + Vector headerFields = new Vector(); int headerEnd = httpResponseBuffer_.indexOf("\r\n\r\n", 0); @@ -81,7 +82,7 @@ public class HTTPConnectProxiedConnection extends ProxiedConnection { return; } - parseHTTPHeader(httpResponseBuffer_.substring(0, headerEnd), statusLine, headerFields); + String statusLine = parseHTTPHeader(httpResponseBuffer_.substring(0, headerEnd), headerFields); if (trafficFilter_ != null) { Vector newHeaderFields = trafficFilter_.filterHTTPResponseHeader(headerFields); @@ -128,21 +129,29 @@ public class HTTPConnectProxiedConnection extends ProxiedConnection { write(new SafeByteArray(request.toString())); } - private void parseHTTPHeader(final String data, String statusLine, Vector headerFields) { - StringBuffer dataStream = new StringBuffer(data); + private String parseHTTPHeader(final String data, Vector headerFields) { + Scanner dataScanner = new Scanner(data); + String statusLine = ""; // parse status line - statusLine = dataStream.toString(); + if (dataScanner.hasNext()) { + statusLine = dataScanner.nextLine(); + } + // parse fields - String headerLine = dataStream.toString(); - int splitIndex; - while (headerLine != null && !headerLine.equals("\r")) { - splitIndex = headerLine.indexOf(':', 0); + while (dataScanner.hasNext()) { + String headerLine = dataScanner.nextLine(); + if (headerLine.equals("\r")) { + break; + } + int splitIndex = headerLine.indexOf(':', 0); if (splitIndex != -1) { headerFields.add(new Pair(headerLine.substring(0, splitIndex), headerLine.substring(splitIndex + 1))); } } + + return statusLine; } } \ No newline at end of file diff --git a/src/com/isode/stroke/network/JavaProxyProvider.java b/src/com/isode/stroke/network/JavaProxyProvider.java index e2804a3..024efa7 100644 --- a/src/com/isode/stroke/network/JavaProxyProvider.java +++ b/src/com/isode/stroke/network/JavaProxyProvider.java @@ -13,7 +13,7 @@ package com.isode.stroke.network; public class JavaProxyProvider implements ProxyProvider { - private EnvironmentProxyProvider environmentProxyProvider; + private EnvironmentProxyProvider environmentProxyProvider = new EnvironmentProxyProvider(); public JavaProxyProvider() { diff --git a/src/com/isode/stroke/network/TLSConnection.java b/src/com/isode/stroke/network/TLSConnection.java index 16c6617..a67f20d 100644 --- a/src/com/isode/stroke/network/TLSConnection.java +++ b/src/com/isode/stroke/network/TLSConnection.java @@ -86,10 +86,18 @@ public class TLSConnection extends Connection { protected void finalize() throws Throwable { try { - onConnectFinishedConnection.disconnect(); - onDataReadConnection.disconnect(); - onDataWrittenConnection.disconnect(); - onDisconnectedConnection.disconnect(); + if (onConnectFinished != null) { + onConnectFinishedConnection.disconnect(); + } + if (onDataReadConnection != null) { + onDataReadConnection.disconnect(); + } + if (onDataWrittenConnection != null) { + onDataWrittenConnection.disconnect(); + } + if (onDisconnectedConnection != null) { + onDisconnectedConnection.disconnect(); + } } finally { super.finalize(); @@ -117,7 +125,9 @@ public class TLSConnection extends Connection { } private void handleRawConnectFinished(boolean error) { - onConnectFinishedConnection.disconnect(); + if (onConnectFinished != null) { + onConnectFinishedConnection.disconnect(); + } if (error) { onConnectFinished.emit(true); } -- cgit v0.10.2-6-g49f6