diff options
author | Koushik Dutta <koushd@gmail.com> | 2014-08-03 15:38:56 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2014-08-03 15:38:56 -0700 |
commit | 23d8da866a0b9c04d740ea76ffd65b85bfecd443 (patch) | |
tree | 2bcddaf4d0bad2074ccd3b07c199fed51f07cee2 /AndroidAsync | |
parent | aa77649d29788a755958f407d542be31f1ccd3b0 (diff) | |
parent | 86079517f2a9b1c5e509e504c2a8ff96bf3fbc76 (diff) | |
download | AndroidAsync-23d8da866a0b9c04d740ea76ffd65b85bfecd443.tar.gz AndroidAsync-23d8da866a0b9c04d740ea76ffd65b85bfecd443.tar.bz2 AndroidAsync-23d8da866a0b9c04d740ea76ffd65b85bfecd443.zip |
Merge branch 'master' into spdy
Conflicts:
AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
Diffstat (limited to 'AndroidAsync')
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/AsyncServer.java | 3 | ||||
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/util/FileCache.java | 43 |
2 files changed, 38 insertions, 8 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java index 6d5e557..450dc5b 100644 --- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java @@ -727,6 +727,9 @@ public class AsyncServer { } } } + catch (NullPointerException e) { + throw new AsyncSelectorException(e); + } catch (IOException e) { throw new AsyncSelectorException(e); } diff --git a/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java b/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java index 3ce4b97..d117108 100644 --- a/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java +++ b/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java @@ -6,6 +6,8 @@ import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.security.Provider; +import java.security.Security; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -41,17 +43,42 @@ public class FileCache { } } + private static String hashAlgorithm = "MD5"; + + private static MessageDigest findAlternativeMessageDigest() { + if ("MD5".equals(hashAlgorithm)) { + for (Provider provider : Security.getProviders()) { + for (Provider.Service service : provider.getServices()) { + hashAlgorithm = service.getAlgorithm(); + try { + MessageDigest messageDigest = MessageDigest.getInstance(hashAlgorithm); + if (messageDigest != null) + return messageDigest; + } catch (NoSuchAlgorithmException ignored) { + } + } + } + } + return null; + } + public static String toKeyString(Object... parts) { - try { - MessageDigest messageDigest = MessageDigest.getInstance("MD5"); - for (Object part: parts) { - messageDigest.update(part.toString().getBytes()); + MessageDigest messageDigest; + synchronized (FileCache.class) { + try { + messageDigest = MessageDigest.getInstance(hashAlgorithm); + } catch (NoSuchAlgorithmException e) { + messageDigest = findAlternativeMessageDigest(); + if (null == messageDigest) + throw new RuntimeException(e); } - byte[] md5bytes = messageDigest.digest(); - return new BigInteger(1, md5bytes).toString(16); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); } + + for (Object part : parts) { + messageDigest.update(part.toString().getBytes()); + } + byte[] md5bytes = messageDigest.digest(); + return new BigInteger(1, md5bytes).toString(16); } boolean loadAsync; |