summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/network/HTTPConnectProxiedConnection.java')
-rw-r--r--src/com/isode/stroke/network/HTTPConnectProxiedConnection.java29
1 files changed, 19 insertions, 10 deletions
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<Pair> headerFields = new Vector<Pair>();
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<Pair> 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<Pair> headerFields) {
- StringBuffer dataStream = new StringBuffer(data);
+ private String parseHTTPHeader(final String data, Vector<Pair> 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