aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2014-08-03 15:38:56 -0700
committerKoushik Dutta <koushd@gmail.com>2014-08-03 15:38:56 -0700
commit23d8da866a0b9c04d740ea76ffd65b85bfecd443 (patch)
tree2bcddaf4d0bad2074ccd3b07c199fed51f07cee2 /AndroidAsync
parentaa77649d29788a755958f407d542be31f1ccd3b0 (diff)
parent86079517f2a9b1c5e509e504c2a8ff96bf3fbc76 (diff)
downloadAndroidAsync-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.java3
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/util/FileCache.java43
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;