|
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 | 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 | 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 | 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 Response intercept(Chain chain) throws IOException { |
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 void onReceive(Context context, Intent intent) { |
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 | } |
0 commit comments