aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Apresian <dmitry.apresian@jivesoftware.com>2014-01-23 22:45:23 -0800
committerDmitry Apresian <dmitry.apresian@jivesoftware.com>2014-01-23 22:45:23 -0800
commitcc4ccd52099e5e0721d90dfdba0bddbc0a5809c7 (patch)
tree275ce10e7e5769b8c595322728cdbc86533a25cc
parentddd14033524fdc24d92b572cbad0836083da763a (diff)
downloadAndroidAsync-cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7.tar.gz
AndroidAsync-cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7.tar.bz2
AndroidAsync-cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7.zip
Use custom exception classes to facilitate better error reporting on the client side
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/AsyncServer.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/HostnameResolutionException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java4
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncSocketMiddleware.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/BodyDecoderException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/ConnectionClosedException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/ConnectionFailedException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/RedirectLimitExceededException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/WebSocketHandshakeException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedDataException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedInputFilter.java6
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/filter/ContentLengthFilter.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/filter/DataRemainingException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/filter/InflaterInputFilter.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/filter/PrematureDataEndException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java4
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/BoundaryEmitter.java10
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/MalformedRangeException.java4
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/MimeEncodingException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/StreamSkipException.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/socketio/SocketIOConnection.java4
23 files changed, 101 insertions, 20 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java
index 6fb0336..abc57e0 100644
--- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java
+++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java
@@ -395,7 +395,7 @@ public class AsyncServer {
try {
final InetAddress[] result = InetAddress.getAllByName(host);
if (result == null || result.length == 0)
- throw new Exception("no addresses for host");
+ throw new HostnameResolutionException("no addresses for host");
post(new Runnable() {
@Override
public void run() {
diff --git a/AndroidAsync/src/com/koushikdutta/async/HostnameResolutionException.java b/AndroidAsync/src/com/koushikdutta/async/HostnameResolutionException.java
new file mode 100644
index 0000000..6a84241
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/HostnameResolutionException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async;
+
+public class HostnameResolutionException extends Exception {
+ public HostnameResolutionException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java
index 37a8372..1b89489 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java
@@ -152,7 +152,7 @@ public class AsyncHttpClient {
private void executeAffinity(final AsyncHttpRequest request, final int redirectCount, final FutureAsyncHttpResponse cancel, final HttpConnectCallback callback) {
assert mServer.isAffinityThread();
if (redirectCount > 15) {
- reportConnectedCompleted(cancel, new Exception("too many redirects"), null, request, callback);
+ reportConnectedCompleted(cancel, new RedirectLimitExceededException("too many redirects"), null, request, callback);
return;
}
final URI uri = request.getUri();
@@ -677,7 +677,7 @@ public class AsyncHttpClient {
}
WebSocket ws = WebSocketImpl.finishHandshake(req.getHeaders().getHeaders(), response);
if (ws == null) {
- if (!ret.setComplete(new Exception("Unable to complete websocket handshake")))
+ if (!ret.setComplete(new WebSocketHandshakeException("Unable to complete websocket handshake")))
return;
}
else {
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
index 7b8e4ce..aa08189 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
@@ -92,7 +92,7 @@ abstract class AsyncHttpResponseImpl extends FilteredDataEmitter implements Asyn
@Override
public void onCompleted(Exception error) {
if (error != null && !mCompleted) {
- report(new Exception("connection closed before response completed."));
+ report(new ConnectionClosedException("connection closed before response completed."));
}
else {
report(error);
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncSocketMiddleware.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncSocketMiddleware.java
index b512c90..a38c60e 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncSocketMiddleware.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncSocketMiddleware.java
@@ -213,7 +213,7 @@ public class AsyncSocketMiddleware extends SimpleMiddleware {
public void onCompleted(Exception ex) {
// if it completed, that means that the connection failed
if (lastException == null)
- lastException = new Exception("Unable to connect to remote address");
+ lastException = new ConnectionFailedException("Unable to connect to remote address");
setComplete(lastException);
}
});
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/BodyDecoderException.java b/AndroidAsync/src/com/koushikdutta/async/http/BodyDecoderException.java
new file mode 100644
index 0000000..20fb0e7
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/BodyDecoderException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http;
+
+public class BodyDecoderException extends Exception {
+ public BodyDecoderException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/ConnectionClosedException.java b/AndroidAsync/src/com/koushikdutta/async/http/ConnectionClosedException.java
new file mode 100644
index 0000000..bb6a07d
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/ConnectionClosedException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http;
+
+public class ConnectionClosedException extends Exception {
+ public ConnectionClosedException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/ConnectionFailedException.java b/AndroidAsync/src/com/koushikdutta/async/http/ConnectionFailedException.java
new file mode 100644
index 0000000..1da9c43
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/ConnectionFailedException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http;
+
+public class ConnectionFailedException extends Exception {
+ public ConnectionFailedException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java b/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java
index 42a6f67..797e070 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java
@@ -72,7 +72,7 @@ public class HttpUtil {
final int contentLength = _contentLength;
if (-1 != contentLength) {
if (contentLength < 0) {
- EndEmitter ender = EndEmitter.create(emitter.getServer(), new Exception("not using chunked encoding, and no content-length found."));
+ EndEmitter ender = EndEmitter.create(emitter.getServer(), new BodyDecoderException("not using chunked encoding, and no content-length found."));
ender.setDataEmitter(emitter);
emitter = ender;
return emitter;
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/RedirectLimitExceededException.java b/AndroidAsync/src/com/koushikdutta/async/http/RedirectLimitExceededException.java
new file mode 100644
index 0000000..42921bb
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/RedirectLimitExceededException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http;
+
+public class RedirectLimitExceededException extends Exception {
+ public RedirectLimitExceededException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/WebSocketHandshakeException.java b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketHandshakeException.java
new file mode 100644
index 0000000..4aee069
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketHandshakeException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http;
+
+public class WebSocketHandshakeException extends Exception {
+ public WebSocketHandshakeException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedDataException.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedDataException.java
new file mode 100644
index 0000000..faf7022
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedDataException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http.filter;
+
+public class ChunkedDataException extends Exception {
+ public ChunkedDataException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedInputFilter.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedInputFilter.java
index 7a9766b..652e907 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedInputFilter.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/ChunkedInputFilter.java
@@ -22,7 +22,7 @@ public class ChunkedInputFilter extends FilteredDataEmitter {
private boolean checkByte(char b, char value) {
if (b != value) {
- report(new Exception(value + " was expeceted, got " + (char)b));
+ report(new ChunkedDataException(value + " was expected, got " + (char)b));
return false;
}
return true;
@@ -39,7 +39,7 @@ public class ChunkedInputFilter extends FilteredDataEmitter {
@Override
protected void report(Exception e) {
if (e == null && mState != State.COMPLETE)
- e = new Exception("chunked input ended before final chunk");
+ e = new ChunkedDataException("chunked input ended before final chunk");
super.report(e);
}
@@ -62,7 +62,7 @@ public class ChunkedInputFilter extends FilteredDataEmitter {
else if (c >= 'A' && c <= 'F')
mChunkLength += (c - 'A' + 10);
else {
- report(new Exception("invalid chunk length: " + c));
+ report(new ChunkedDataException("invalid chunk length: " + c));
return;
}
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/ContentLengthFilter.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/ContentLengthFilter.java
index 5ca2489..b3c5372 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/filter/ContentLengthFilter.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/ContentLengthFilter.java
@@ -12,7 +12,7 @@ public class ContentLengthFilter extends FilteredDataEmitter {
@Override
protected void report(Exception e) {
if (e == null && totalRead != contentLength)
- e = new Exception("End of data reached before content length was read");
+ e = new PrematureDataEndException("End of data reached before content length was read");
super.report(e);
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/DataRemainingException.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/DataRemainingException.java
new file mode 100644
index 0000000..f7d79a1
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/DataRemainingException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http.filter;
+
+public class DataRemainingException extends Exception {
+ public DataRemainingException(String message, Exception cause) {
+ super(message, cause);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/InflaterInputFilter.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/InflaterInputFilter.java
index 479b116..e96f284 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/filter/InflaterInputFilter.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/InflaterInputFilter.java
@@ -15,7 +15,7 @@ public class InflaterInputFilter extends FilteredDataEmitter {
@Override
protected void report(Exception e) {
if (e != null && mInflater.getRemaining() > 0) {
- e = new Exception("data still remaining in inflater", e);
+ e = new DataRemainingException("data still remaining in inflater", e);
}
super.report(e);
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/PrematureDataEndException.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/PrematureDataEndException.java
new file mode 100644
index 0000000..94798f8
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/PrematureDataEndException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http.filter;
+
+public class PrematureDataEndException extends Exception {
+ public PrematureDataEndException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java
index 048b108..bba9f3a 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java
@@ -227,7 +227,7 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse {
parts = parts[1].split("-");
try {
if (parts.length > 2)
- throw new Exception();
+ throw new MalformedRangeException();
if (!TextUtils.isEmpty(parts[0]))
start = Integer.parseInt(parts[0]);
if (parts.length == 2 && !TextUtils.isEmpty(parts[1]))
@@ -246,7 +246,7 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse {
}
try {
if (start != inputStream.skip(start))
- throw new Exception("skip failed to skip requested amount");
+ throw new StreamSkipException("skip failed to skip requested amount");
mContentLength = end - start + 1;
mRawHeaders.set("Content-Length", "" + mContentLength);
mRawHeaders.set("Accept-Ranges", "bytes");
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/BoundaryEmitter.java b/AndroidAsync/src/com/koushikdutta/async/http/server/BoundaryEmitter.java
index 41753bd..3eab5e2 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/server/BoundaryEmitter.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/BoundaryEmitter.java
@@ -108,7 +108,7 @@ public class BoundaryEmitter extends FilteredDataEmitter {
state = -2;
}
else {
- report(new Exception("Invalid multipart/form-data. Expected \r or -"));
+ report(new MimeEncodingException("Invalid multipart/form-data. Expected \r or -"));
return;
}
}
@@ -117,7 +117,7 @@ public class BoundaryEmitter extends FilteredDataEmitter {
state = -3;
}
else {
- report(new Exception("Invalid multipart/form-data. Expected -"));
+ report(new MimeEncodingException("Invalid multipart/form-data. Expected -"));
return;
}
}
@@ -133,7 +133,7 @@ public class BoundaryEmitter extends FilteredDataEmitter {
onBoundaryEnd();
}
else {
- report(new Exception("Invalid multipart/form-data. Expected \r"));
+ report(new MimeEncodingException("Invalid multipart/form-data. Expected \r"));
return;
}
}
@@ -143,12 +143,12 @@ public class BoundaryEmitter extends FilteredDataEmitter {
state = 0;
}
else {
- report(new Exception("Invalid multipart/form-data. Expected \n"));
+ report(new MimeEncodingException("Invalid multipart/form-data. Expected \n"));
}
}
else {
assert false;
- report(new Exception("Invalid multipart/form-data. Unknown state?"));
+ report(new MimeEncodingException("Invalid multipart/form-data. Unknown state?"));
}
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/MalformedRangeException.java b/AndroidAsync/src/com/koushikdutta/async/http/server/MalformedRangeException.java
new file mode 100644
index 0000000..55d4221
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/MalformedRangeException.java
@@ -0,0 +1,4 @@
+package com.koushikdutta.async.http.server;
+
+public class MalformedRangeException extends Exception {
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/MimeEncodingException.java b/AndroidAsync/src/com/koushikdutta/async/http/server/MimeEncodingException.java
new file mode 100644
index 0000000..6af71a2
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/MimeEncodingException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http.server;
+
+public class MimeEncodingException extends Exception {
+ public MimeEncodingException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/StreamSkipException.java b/AndroidAsync/src/com/koushikdutta/async/http/server/StreamSkipException.java
new file mode 100644
index 0000000..a0d1a29
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/StreamSkipException.java
@@ -0,0 +1,7 @@
+package com.koushikdutta.async.http.server;
+
+public class StreamSkipException extends Exception {
+ public StreamSkipException(String message) {
+ super(message);
+ }
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/socketio/SocketIOConnection.java b/AndroidAsync/src/com/koushikdutta/async/http/socketio/SocketIOConnection.java
index 3789e42..2b5d62e 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/socketio/SocketIOConnection.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/socketio/SocketIOConnection.java
@@ -121,7 +121,7 @@ class SocketIOConnection {
String[] transports = transportsLine.split(",");
HashSet<String> set = new HashSet<String>(Arrays.asList(transports));
if (!set.contains("websocket"))
- throw new Exception("websocket not supported");
+ throw new SocketIOException("websocket not supported");
final String sessionUrl = request.getUri().toString() + "websocket/" + session + "/";
@@ -399,7 +399,7 @@ class SocketIOConnection {
// noop
break;
default:
- throw new Exception("unknown code");
+ throw new SocketIOException("unknown code");
}
}
catch (Exception ex) {