From 46ab0d584b7dea1738215315df09a86d866d50e5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 18 Nov 2018 23:16:08 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../data/network/ServerApiElectrum.java | 47 +++++++++---------- .../tangem/domain/wallet/btc/BitcoinNode.kt | 47 +++++++++++++------ 2 files changed, 55 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java b/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java index bb227b8b69..e344c6b2b2 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java @@ -20,6 +20,7 @@ import java.net.ConnectException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; +import java.security.cert.CertificateFactory; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -28,6 +29,7 @@ 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.SSLSession; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; @@ -61,8 +63,8 @@ public class ServerApiElectrum { public void electrumRequestData(TangemCard card, ElectrumRequest electrumRequest) { Observable checkElectrumDataObserver = Observable.just(electrumRequest) - .doOnNext(electrumRequest1 -> doElectrumRequest(card, electrumRequest)) -// .doOnNext(electrumRequest1 -> testSslSocket(card, electrumRequest)) +// .doOnNext(electrumRequest1 -> doElectrumRequest(card, electrumRequest)) + .doOnNext(electrumRequest1 -> testSslSocket(card, electrumRequest)) .flatMap(electrumRequest1 -> { if (electrumRequest1.answerData == null) { @@ -72,10 +74,9 @@ public class ServerApiElectrum { return Observable.just(electrumRequest1); }) - .retryWhen(errors -> errors - .filter(throwable -> throwable instanceof NullPointerException) - .zipWith(Observable.range(1, 4), (n, i) -> i)) - +// .retryWhen(errors -> errors +// .filter(throwable -> throwable instanceof NullPointerException) +// .zipWith(Observable.range(1, 4), (n, i) -> i)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); @@ -112,27 +113,26 @@ public class ServerApiElectrum { this.port = bitcoinNodeSsl.getPort(); SocketFactory sf = SSLSocketFactory.getDefault(); - SSLSocket socket; + SSLSocket sslSocket; List result = new ArrayList<>(); Collections.addAll(result, electrumRequest); try { - socket = (SSLSocket) sf.createSocket("gmail.com", 443); -// socket = (SSLSocket) sf.createSocket("electrum.hsmiths.com", 50002); -// socket = (SSLSocket) sf.createSocket(host, port); - HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier(); - SSLSession s = socket.getSession(); + sslSocket = (SSLSocket) sf.createSocket(host, port); -// if (!hv.verify("mail.google.com", s)) { -// throw new SSLHandshakeException("Expected mail.google.com, found " + s.getPeerPrincipal()); + HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier(); + SSLSession sslSession = sslSocket.getSession(); + +// if (!hv.verify(host, sslSession)) { +// throw new SSLHandshakeException("Expected " + host + " , found " + sslSession.getPeerPrincipal()); // } Log.i(TAG, host + " " + port); try { - OutputStream os = socket.getOutputStream(); + OutputStream os = sslSocket.getOutputStream(); OutputStreamWriter out = new OutputStreamWriter(os, "UTF-8"); - InputStream is = socket.getInputStream(); + InputStream is = sslSocket.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); electrumRequest.setID(1); @@ -140,8 +140,6 @@ public class ServerApiElectrum { out.flush(); electrumRequest.answerData = in.readLine(); -// electrumRequest.host = host; -// electrumRequest.port = port; if (electrumRequest.answerData != null) { Log.i(TAG, ">> " + electrumRequest.answerData); } else { @@ -153,20 +151,19 @@ public class ServerApiElectrum { e.printStackTrace(); Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " ConnectException " + e.getMessage()); } finally { -// Log.i(TAG, "electrumRequestData " + electrumRequest.getMethod() + " CLOSE"); - socket.close(); + Log.i(TAG, "electrumRequestData " + electrumRequest.getMethod() + " CLOSE"); + sslSocket.close(); } - socket.close(); } catch (IOException e) { e.printStackTrace(); + Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " IOException " + e.getMessage()); } return result; } private List doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) { - if (card.getBlockchain() == Blockchain.BitcoinTestNet) { BitcoinNodeTestNet bitcoinNodeTestNet = BitcoinNodeTestNet.values()[new Random().nextInt(BitcoinNodeTestNet.values().length)]; this.host = bitcoinNodeTestNet.getHost(); @@ -203,10 +200,10 @@ public class ServerApiElectrum { electrumRequest.host = host; electrumRequest.port = port; if (electrumRequest.answerData != null) { -// Log.i(TAG, ">> " + electrumRequest.answerData); + Log.i(TAG, ">> " + electrumRequest.answerData); } else { electrumRequest.error = "No answer from server"; -// Log.i(TAG, ">> "); + Log.i(TAG, ">> "); } } catch (ConnectException e) { @@ -220,7 +217,7 @@ public class ServerApiElectrum { } catch (IOException e) { e.printStackTrace(); electrumRequestDataListener.onFail(e.getMessage()); - Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " Exception " + e.getMessage()); + Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " IOException " + e.getMessage()); } return result; } diff --git a/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt b/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt index 63c207b6ec..f26d52d1c1 100644 --- a/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt +++ b/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt @@ -1,17 +1,36 @@ package com.tangem.domain.wallet.btc -enum class BitcoinNode(val host: String, val port: Int) { - n1("electrum.anduck.net", 50001), - n2("electrum-server.ninja", 50001), - n3("btc.cihar.com", 50001), - n4("vps.hsmiths.com", 50001), - n5("electrum.hsmiths.com", 50001), - n6("electrum.vom-stausee.de", 50001), - n7("node.ispol.sk", 50001), - n8("electrum2.eff.ro", 50001), - n9("electrumx.nmdps.net", 50001), - n10("kirsche.emzy.de", 50001), - n11("electrum.petrkr.net", 50001), - n12("electrum.dk", 50001), -// n13("electrum.hsmiths.com", 50002) +enum class BitcoinNode(val host: String, val port: Int, val proto: String) { + n1("electrum.anduck.net", 50001, "tcp"), + n2("electrum-server.ninja", 50001, "tcp"), + n3("btc.cihar.com", 50001, "tcp"), + n4("vps.hsmiths.com", 50001, "tcp"), + n5("electrum.hsmiths.com", 50001, "tcp"), + n6("electrum.vom-stausee.de", 50001, "tcp"), + n7("node.ispol.sk", 50001, "tcp"), + n8("electrum2.eff.ro", 50001, "tcp"), + n9("electrumx.nmdps.net", 50001, "tcp"), + n10("kirsche.emzy.de", 50001, "tcp"), + n11("electrum.petrkr.net", 50001, "tcp"), + n12("electrum.dk", 50001, "tcp"), + +// n13("electrum.anduck.net", 50012, "ssl"), +// n14("electrum.eff.ro", 50002, "ssl"), +// n15("vps.hsmiths.com", 50002, "ssl"), + +// n16("VPS.hsmiths.com", 50002, "ssl"), +// n17("agapc7dhcqfjqpjb.onion", 50002, "ssl"), +// n18("alviss.coinjoined.com", 50002, "ssl"), +// n19("arihancckjge66iv.onion", 50002, "ssl"), +// n20("aspinall.io", 50002, "ssl"), +// n21("bauerjda5hnedjam.onion", 50002, "ssl"), +// n22("bauerjhejlv6di7s.onion", 50002, "ssl"), +// n23("bauerjhejlv6di7s.onion", 50002, "ssl"), +// n24("btc.asis.io", 50002, "ssl"), +// n25("btc.cihar.com", 50002, "ssl"), +// n26("btc.ex.laodc.com", 443, "ssl"), +// n27("btc.gravitech.net", 50002, "ssl"), +// n28("btc.pr0xima.de", 50002, "ssl"), +// n29("btc.smsys.me", 995, "ssl"), + } \ No newline at end of file