From 681789004dab5cf5460c31b064edd2d6a510817e Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Wed, 10 Sep 2014 14:44:45 -0700 Subject: AsyncServer: Catch all selector exceptions. Various firmwares seem to throw all sorts of insane exceptions. Conflicts: AndroidAsync/src/com/koushikdutta/async/AsyncServer.java --- AndroidAsync/src/com/koushikdutta/async/AsyncServer.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java index be4a363..251132a 100644 --- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java @@ -20,7 +20,6 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.channels.CancelledKeyException; import java.nio.channels.ClosedChannelException; -import java.nio.channels.ClosedSelectorException; import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.ServerSocketChannel; @@ -586,7 +585,9 @@ public class AsyncServer { try { runLoop(this, selector, queue); } - catch (ClosedSelectorException e) { + catch (AsyncSelectorException e) { + Log.e(LOGTAG, "Selector exception", e); + StreamUtility.closeQuietly(selector.getSelector()); } return; } @@ -607,10 +608,8 @@ public class AsyncServer { try { runLoop(server, selector, queue); } - catch (ClosedSelectorException e) { - StreamUtility.closeQuietly(selector.getSelector()); - } catch (AsyncSelectorException e) { + Log.e(LOGTAG, "Selector exception", e); StreamUtility.closeQuietly(selector.getSelector()); } // see if we keep looping, this must be in a synchronized block since the queue is accessed. @@ -690,7 +689,7 @@ public class AsyncServer { return wait; } - private static class AsyncSelectorException extends RuntimeException { + private static class AsyncSelectorException extends IOException { public AsyncSelectorException(Exception e) { super(e); } @@ -731,10 +730,7 @@ public class AsyncServer { } } } - catch (NullPointerException e) { - throw new AsyncSelectorException(e); - } - catch (IOException e) { + catch (Exception e) { throw new AsyncSelectorException(e); } -- cgit v1.2.3 From e3eafe47c267e537e71053a3d9e01c3aa26528b7 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Wed, 10 Sep 2014 15:12:09 -0700 Subject: AsyncServer: *actually* use the resolved address. --- AndroidAsync/src/com/koushikdutta/async/AsyncServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java index 251132a..6488dcc 100644 --- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java @@ -386,7 +386,7 @@ public class AsyncServer { return; } - ret.setComplete(connectResolvedInetSocketAddress(new InetSocketAddress(remote.getHostName(), remote.getPort()), callback)); + ret.setComplete(connectResolvedInetSocketAddress(new InetSocketAddress(result, remote.getPort()), callback)); } }); return ret; -- cgit v1.2.3 From 52064191814fe744ae85e640cb869e122e4d61a3 Mon Sep 17 00:00:00 2001 From: Florian Vallee Date: Thu, 11 Sep 2014 16:20:24 +0200 Subject: Revert "Added protected API for WebSocket creation" This reverts commit 4ee0ae0e6206f90a07f3a2269abc6c655a0289df. --- .../src/com/koushikdutta/async/http/server/AsyncHttpServer.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java index 4259d1d..b1b393d 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java @@ -318,15 +318,11 @@ public class AsyncHttpServer { response.end(); return; } - callback.onConnected(createWebSocket(request, response), request.getHeaders()); + callback.onConnected(new WebSocketImpl(request, response), request.getHeaders()); } }); } - protected WebSocket createWebSocket(final AsyncHttpServerRequest request, final AsyncHttpServerResponse response) { - return new WebSocketImpl(request, response); - } - public void get(String regex, HttpServerRequestCallback callback) { addAction(AsyncHttpGet.METHOD, regex, callback); } -- cgit v1.2.3 From ba1c1d1c31116357139d584196559dfd5a26896c Mon Sep 17 00:00:00 2001 From: Florian Vallee Date: Fri, 12 Sep 2014 11:17:12 +0200 Subject: expose initial http request to WebSocket handlers replace headers object with the complete AsyncHttpServerRequest in callback see #232 --- .../src/com/koushikdutta/async/http/server/AsyncHttpServer.java | 4 ++-- AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java | 3 ++- README.md | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java index b1b393d..41bbfe0 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java @@ -285,7 +285,7 @@ public class AsyncHttpServer { } public static interface WebSocketRequestCallback { - public void onConnected(WebSocket webSocket, RequestHeaders headers); + public void onConnected(WebSocket webSocket, AsyncHttpServerRequest request); } public void websocket(String regex, final WebSocketRequestCallback callback) { @@ -318,7 +318,7 @@ public class AsyncHttpServer { response.end(); return; } - callback.onConnected(new WebSocketImpl(request, response), request.getHeaders()); + callback.onConnected(new WebSocketImpl(request, response), request); } }); } diff --git a/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java b/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java index a5a7f92..5784e38 100644 --- a/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java +++ b/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java @@ -9,6 +9,7 @@ import com.koushikdutta.async.http.WebSocket.StringCallback; import com.koushikdutta.async.http.libcore.RequestHeaders; import com.koushikdutta.async.http.server.AsyncHttpServer; import com.koushikdutta.async.http.server.AsyncHttpServer.WebSocketRequestCallback; +import com.koushikdutta.async.http.server.AsyncHttpServerRequest; import junit.framework.TestCase; @@ -34,7 +35,7 @@ public class WebSocketTests extends TestCase { httpServer.websocket("/ws", new WebSocketRequestCallback() { @Override - public void onConnected(final WebSocket webSocket, RequestHeaders headers) { + public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) { webSocket.setStringCallback(new StringCallback() { @Override public void onStringAvailable(String s) { diff --git a/README.md b/README.md index 042c091..9fed2d4 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,7 @@ server.listen(5000); ```java server.websocket("/live", new WebSocketRequestCallback() { @Override - public void onConnected(final WebSocket webSocket, RequestHeaders headers) { + public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) { _sockets.add(webSocket); //Use this to clean up any references to your websocket -- cgit v1.2.3 From 0f0cdf011febb97bacde87771c452b9cf757bcce Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Wed, 17 Sep 2014 10:18:35 -0700 Subject: fix https://github.com/koush/AndroidAsync/issues/244 --- AndroidAsync/src/com/koushikdutta/async/AsyncServer.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java index 6488dcc..4503964 100644 --- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java @@ -587,7 +587,12 @@ public class AsyncServer { } catch (AsyncSelectorException e) { Log.e(LOGTAG, "Selector exception", e); - StreamUtility.closeQuietly(selector.getSelector()); + try { + // StreamUtility.closeQuiety is throwing ArrayStoreException? + selector.getSelector().close(); + } + catch (Exception ex) { + } } return; } @@ -610,7 +615,12 @@ public class AsyncServer { } catch (AsyncSelectorException e) { Log.e(LOGTAG, "Selector exception", e); - StreamUtility.closeQuietly(selector.getSelector()); + try { + // StreamUtility.closeQuiety is throwing ArrayStoreException? + selector.getSelector().close(); + } + catch (Exception ex) { + } } // see if we keep looping, this must be in a synchronized block since the queue is accessed. synchronized (server) { -- cgit v1.2.3 From 53b7a417290ce4f8ab3528ef76480ee5ac76d18f Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Wed, 17 Sep 2014 10:48:24 +0200 Subject: more debug about invalid URI not recognized by any middleware --- AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java index 0034dbe..5da94b2 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java @@ -420,6 +420,7 @@ public class AsyncHttpClient { // set up the system default proxy and connect setupAndroidProxy(request); + final Exception unsupportedURI; synchronized (mMiddleware) { for (AsyncHttpClientMiddleware middleware: mMiddleware) { Cancellable socketCancellable = middleware.getSocket(data); @@ -429,8 +430,9 @@ public class AsyncHttpClient { return; } } + unsupportedURI = new IllegalArgumentException("invalid uri="+uri+" middlewares="+mMiddleware); } - reportConnectedCompleted(cancel, new IllegalArgumentException("invalid uri"), null, request, callback); + reportConnectedCompleted(cancel, unsupportedURI, null, request, callback); } public static abstract class RequestCallbackBase implements RequestCallback { -- cgit v1.2.3 From c265454f54a752b47f5f6139b11c8737f56f4201 Mon Sep 17 00:00:00 2001 From: Amin Cheloh Date: Thu, 25 Sep 2014 19:43:38 +0700 Subject: fix charset from utf8 to utf-8 --- .../src/com/koushikdutta/async/http/body/UrlEncodedFormBody.java | 2 +- .../koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/http/body/UrlEncodedFormBody.java b/AndroidAsync/src/com/koushikdutta/async/http/body/UrlEncodedFormBody.java index 7bceceb..1c9cbc6 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/body/UrlEncodedFormBody.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/body/UrlEncodedFormBody.java @@ -59,7 +59,7 @@ public class UrlEncodedFormBody implements AsyncHttpRequestBody { public static final String CONTENT_TYPE = "application/x-www-form-urlencoded"; @Override public String getContentType() { - return CONTENT_TYPE + "; charset=utf8"; + return CONTENT_TYPE + "; charset=utf-8"; } @Override diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java index bd7211b..9faa365 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java @@ -206,13 +206,13 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse { responseCode(200); String contentType = mRawHeaders.get("Content-Type"); if (contentType == null) - contentType = "text/html; charset=utf8"; + contentType = "text/html; charset=utf-8"; send(contentType, string); } @Override public void send(JSONObject json) { - send("application/json; charset=utf8", json.toString()); + send("application/json; charset=utf-8", json.toString()); } @Override -- cgit v1.2.3