diff options
author | Dmitry Apresian <dmitry.apresian@jivesoftware.com> | 2014-01-23 22:45:23 -0800 |
---|---|---|
committer | Dmitry Apresian <dmitry.apresian@jivesoftware.com> | 2014-01-23 22:45:23 -0800 |
commit | cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7 (patch) | |
tree | 275ce10e7e5769b8c595322728cdbc86533a25cc | |
parent | ddd14033524fdc24d92b572cbad0836083da763a (diff) | |
download | AndroidAsync-cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7.tar.gz AndroidAsync-cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7.tar.bz2 AndroidAsync-cc4ccd52099e5e0721d90dfdba0bddbc0a5809c7.zip |
Use custom exception classes to facilitate better error reporting on the client side
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) { |