diff --git a/src/main/java/com/ning/http/client/AsyncHttpClient.java b/src/main/java/com/ning/http/client/AsyncHttpClient.java index 18e65847d8..b90ceced51 100755 --- a/src/main/java/com/ning/http/client/AsyncHttpClient.java +++ b/src/main/java/com/ning/http/client/AsyncHttpClient.java @@ -202,6 +202,11 @@ public AsyncHttpClient(String providerClass, AsyncHttpClientConfig config) { this.httpProvider = loadDefaultProvider(providerClass,config); } + // LQ + public String toString() { + return httpProvider.toString(); + } + public class BoundRequestBuilder extends RequestBuilderBase { /** * Calculator used for calculating request signature for the request being diff --git a/src/main/java/com/ning/http/client/providers/jdk/JDKAsyncHttpProvider.java b/src/main/java/com/ning/http/client/providers/jdk/JDKAsyncHttpProvider.java index e19f7012fc..07534d406f 100644 --- a/src/main/java/com/ning/http/client/providers/jdk/JDKAsyncHttpProvider.java +++ b/src/main/java/com/ning/http/client/providers/jdk/JDKAsyncHttpProvider.java @@ -317,7 +317,7 @@ public T call() throws Exception { int byteToRead = urlConnection.getContentLength(); InputStream stream = is; - if (byteToRead <= 0) { + /* if (byteToRead <= 0) */ { // content-length is not always defined properly by servers int[] lengthWrapper = new int[1]; byte[] bytes = AsyncHttpProviderUtils.readFully(is, lengthWrapper); stream = new ByteArrayInputStream(bytes, 0, lengthWrapper[0]); diff --git a/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java b/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java index e2d31e3441..c846327145 100644 --- a/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java +++ b/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java @@ -147,8 +147,12 @@ public class NettyAsyncHttpProvider extends SimpleChannelUpstreamHandler impleme CleanupChannelGroup("asyncHttpClient") { @Override public boolean remove(Object o) { - maxConnections.decrementAndGet(); - return super.remove(o); + boolean removed = super.remove(o); // LQ + if( removed ) { + // decrement maxConnections only if the channel has been removed. + maxConnections.decrementAndGet(); + } + return removed; } }; @@ -202,6 +206,14 @@ public NettyAsyncHttpProvider(AsyncHttpClientConfig config) { trackConnections = (config.getMaxTotalConnections() != -1); } + // LQ + public String toString() { + return String.format("NettyAsyncHttpProvider:\n\t- maxConnections: %d\n\t- openChannels: %s\n\t- connectionPools: %s", + maxConnections.get(), + openChannels.toString(), + connectionsPool.toString()); + } + void configureNetty() { if (asyncHttpProviderConfig != null) { for (Entry entry : asyncHttpProviderConfig.propertiesSet()) { diff --git a/src/main/java/com/ning/http/util/AsyncHttpProviderUtils.java b/src/main/java/com/ning/http/util/AsyncHttpProviderUtils.java index e291910503..eaaaf40d3a 100644 --- a/src/main/java/com/ning/http/util/AsyncHttpProviderUtils.java +++ b/src/main/java/com/ning/http/util/AsyncHttpProviderUtils.java @@ -433,6 +433,11 @@ public static Cookie parseCookie(String value) { } } + // Normalization of maxAge (LQ) + if( maxAge < -1 ) { + maxAge = -1; + } + return new Cookie(domain, cookieName, cookieValue, path, maxAge, secure); } diff --git a/src/main/java/com/ning/http/util/UTF8UrlEncoder.java b/src/main/java/com/ning/http/util/UTF8UrlEncoder.java index 9077a783ed..e06d9ee08b 100644 --- a/src/main/java/com/ning/http/util/UTF8UrlEncoder.java +++ b/src/main/java/com/ning/http/util/UTF8UrlEncoder.java @@ -74,6 +74,11 @@ public static StringBuilder appendEncoded(StringBuilder sb, String input) private final static void appendSingleByteEncoded(StringBuilder sb, int value) { + // The space char must be converted into a + (some servers doesn't support the %20 notation for space) + if (value == 32) { + sb.append('+'); + return; + } sb.append('%'); sb.append(HEX[value >> 4]); sb.append(HEX[value & 0xF]);