|
@@ -7,10 +7,12 @@ import android.content.Intent;
|
7
|
7
|
import android.content.IntentFilter;
|
8
|
8
|
import android.database.Cursor;
|
9
|
9
|
import android.net.Uri;
|
|
10
|
+import android.os.Build;
|
10
|
11
|
import android.util.Base64;
|
11
|
12
|
|
12
|
13
|
import com.RNFetchBlob.Response.RNFetchBlobDefaultResp;
|
13
|
14
|
import com.RNFetchBlob.Response.RNFetchBlobFileResp;
|
|
15
|
+import com.facebook.common.logging.FLog;
|
14
|
16
|
import com.facebook.react.bridge.Arguments;
|
15
|
17
|
import com.facebook.react.bridge.Callback;
|
16
|
18
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
@@ -21,6 +23,7 @@ import com.facebook.react.bridge.WritableArray;
|
21
|
23
|
import com.facebook.react.bridge.WritableMap;
|
22
|
24
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
23
|
25
|
import com.facebook.react.modules.network.OkHttpClientProvider;
|
|
26
|
+import com.facebook.react.modules.network.TLSSocketFactory;
|
24
|
27
|
|
25
|
28
|
import java.io.File;
|
26
|
29
|
import java.io.FileOutputStream;
|
|
@@ -35,11 +38,14 @@ import java.nio.charset.CharacterCodingException;
|
35
|
38
|
import java.nio.charset.Charset;
|
36
|
39
|
import java.nio.charset.CharsetEncoder;
|
37
|
40
|
import java.util.ArrayList;
|
|
41
|
+import java.util.List;
|
38
|
42
|
import java.util.HashMap;
|
|
43
|
+
|
39
|
44
|
import java.util.concurrent.TimeUnit;
|
40
|
45
|
|
41
|
46
|
import okhttp3.Call;
|
42
|
47
|
import okhttp3.ConnectionPool;
|
|
48
|
+import okhttp3.ConnectionSpec;
|
43
|
49
|
import okhttp3.Headers;
|
44
|
50
|
import okhttp3.Interceptor;
|
45
|
51
|
import okhttp3.MediaType;
|
|
@@ -48,6 +54,8 @@ import okhttp3.Request;
|
48
|
54
|
import okhttp3.RequestBody;
|
49
|
55
|
import okhttp3.Response;
|
50
|
56
|
import okhttp3.ResponseBody;
|
|
57
|
+import okhttp3.TlsVersion;
|
|
58
|
+
|
51
|
59
|
|
52
|
60
|
public class RNFetchBlobReq extends BroadcastReceiver implements Runnable {
|
53
|
61
|
|
|
@@ -366,9 +374,10 @@ public class RNFetchBlobReq extends BroadcastReceiver implements Runnable {
|
366
|
374
|
clientBuilder.retryOnConnectionFailure(false);
|
367
|
375
|
clientBuilder.followRedirects(options.followRedirect);
|
368
|
376
|
clientBuilder.followSslRedirects(options.followRedirect);
|
|
377
|
+ clientBuilder.retryOnConnectionFailure(true);
|
369
|
378
|
|
|
379
|
+ OkHttpClient client = enableTls12OnPreLollipop(clientBuilder).build();
|
370
|
380
|
|
371
|
|
- OkHttpClient client = clientBuilder.retryOnConnectionFailure(true).build();
|
372
|
381
|
Call call = client.newCall(req);
|
373
|
382
|
taskTable.put(taskId, call);
|
374
|
383
|
call.enqueue(new okhttp3.Callback() {
|
|
@@ -683,5 +692,28 @@ public class RNFetchBlobReq extends BroadcastReceiver implements Runnable {
|
683
|
692
|
}
|
684
|
693
|
}
|
685
|
694
|
|
|
695
|
+ public static OkHttpClient.Builder enableTls12OnPreLollipop(OkHttpClient.Builder client) {
|
|
696
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
|
|
697
|
+ try {
|
|
698
|
+ client.sslSocketFactory(new TLSSocketFactory());
|
|
699
|
+
|
|
700
|
+ ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
|
|
701
|
+ .tlsVersions(TlsVersion.TLS_1_2)
|
|
702
|
+ .build();
|
|
703
|
+
|
|
704
|
+ List< ConnectionSpec > specs = new ArrayList < > ();
|
|
705
|
+ specs.add(cs);
|
|
706
|
+ specs.add(ConnectionSpec.COMPATIBLE_TLS);
|
|
707
|
+ specs.add(ConnectionSpec.CLEARTEXT);
|
|
708
|
+
|
|
709
|
+ client.connectionSpecs(specs);
|
|
710
|
+ } catch (Exception exc) {
|
|
711
|
+ FLog.e("OkHttpClientProvider", "Error while enabling TLS 1.2", exc);
|
|
712
|
+ }
|
|
713
|
+ }
|
|
714
|
+
|
|
715
|
+ return client;
|
|
716
|
+ }
|
|
717
|
+
|
686
|
718
|
|
687
|
719
|
}
|