From f152aac54c42cfc07cbe530cdf0db9e2ac404758 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 1 Nov 2018 13:41:28 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../data/network/ServerApiHelperElectrum.java | 74 ++++++++++++++++++- .../presentation/activity/LogoActivity.kt | 3 + 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java b/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java index 48f110e498..16b792a44b 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java @@ -9,6 +9,7 @@ import com.tangem.domain.wallet.Blockchain; import com.tangem.domain.wallet.TangemCard; import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; @@ -22,6 +23,15 @@ import java.util.Collections; import java.util.List; import java.util.Random; +import javax.net.SocketFactory; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLHandshakeException; +import javax.net.ssl.SSLPeerUnverifiedException; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; + import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.observers.DefaultObserver; @@ -41,6 +51,7 @@ public class ServerApiHelperElectrum { public interface ElectrumRequestDataListener { void onSuccess(ElectrumRequest electrumRequest); + void onFail(String method); } @@ -51,7 +62,8 @@ public class ServerApiHelperElectrum { public void electrumRequestData(TangemCard card, ElectrumRequest electrumRequest) { Observable checkElectrumDataObserver = Observable.just(electrumRequest) - .doOnNext(electrumRequest1 -> doElectrumRequest(card, electrumRequest)) +// .doOnNext(electrumRequest1 -> doElectrumRequest(card, electrumRequest)) + .doOnNext(electrumRequest1 -> testSslSocket(card, electrumRequest)) .flatMap(electrumRequest1 -> { if (electrumRequest1.answerData == null) { @@ -94,7 +106,63 @@ public class ServerApiHelperElectrum { }); } - private List doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) throws ConnectException { + private List testSslSocket(TangemCard card, ElectrumRequest electrumRequest) { + SocketFactory sf = SSLSocketFactory.getDefault(); + SSLSocket socket; + + List result = new ArrayList<>(); + Collections.addAll(result, electrumRequest); + + try { +// socket = (SSLSocket) sf.createSocket("gmail.com", 443); + socket = (SSLSocket) sf.createSocket("electrum.hsmiths.com", 50002); + HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier(); + SSLSession s = socket.getSession(); + +// if (!hv.verify("mail.google.com", s)) { +// throw new SSLHandshakeException("Expected mail.google.com, found " + s.getPeerPrincipal()); +// } + + + try { + OutputStream os = socket.getOutputStream(); + OutputStreamWriter out = new OutputStreamWriter(os, "UTF-8"); + InputStream is = socket.getInputStream(); + BufferedReader in = new BufferedReader(new InputStreamReader(is)); + electrumRequest.setID(1); + + out.write(electrumRequest.getAsString() + "\n"); + out.flush(); + + electrumRequest.answerData = in.readLine(); +// electrumRequest.host = host; +// electrumRequest.port = port; + if (electrumRequest.answerData != null) { + Log.i(TAG, ">> " + electrumRequest.answerData); + } else { + electrumRequest.error = "No answer from server"; + Log.i(TAG, ">> "); + } + + } catch (ConnectException e) { + e.printStackTrace(); + Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " ConnectException " + e.getMessage()); + } finally { +// Log.i(TAG, "electrumRequestData " + electrumRequest.getMethod() + " CLOSE"); + socket.close(); + } + + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return result; + + + } + + private List doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) { BitcoinNode bitcoinNode = BitcoinNode.values()[new Random().nextInt(BitcoinNode.values().length)]; if (card.getBlockchain() == Blockchain.BitcoinTestNet || card.getBlockchain() == Blockchain.BitcoinCashTestNet) { @@ -112,7 +180,7 @@ public class ServerApiHelperElectrum { try { Socket socket = App.getNetworkComponent().getSocket(); - socket.connect(new InetSocketAddress(InetAddress.getByName(host), port)); + socket.connect(new InetSocketAddress(InetAddress.getByName(host), port)); Log.i(TAG, host + " " + port); try { OutputStream os = socket.getOutputStream(); diff --git a/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt b/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt index cfc23ae554..87ddd9de47 100644 --- a/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity +import com.tangem.data.network.ServerApiHelperElectrum import com.tangem.wallet.BuildConfig import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_logo.* @@ -17,6 +18,8 @@ class LogoActivity : AppCompatActivity() { const val MILLIS_AUTO_HIDE = 1000 } + private var serverApiHelperElectrum: ServerApiHelperElectrum = ServerApiHelperElectrum() + private val hideRunnable = Runnable { this.hide() } override fun onCreate(savedInstanceState: Bundle?) {