Updated on 2026-08-14
This commit is contained in:
parent
4d36c61c78
commit
46ab0d584b
2 changed files with 55 additions and 39 deletions
|
|
@ -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<ElectrumRequest> 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<ElectrumRequest> 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<ElectrumRequest> 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, ">> <NULL>");
|
||||
Log.i(TAG, ">> <NULL>");
|
||||
}
|
||||
|
||||
} 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue