#!/bin/bash
usage() {
- echo "USAGE: path/to/rust-lightning \"JNI_CFLAGS\" debug android"
+ echo "USAGE: path/to/ldk-c-bindings \"JNI_CFLAGS\" debug android"
echo "For JNI_CFLAGS you probably want -I/usr/lib/jvm/java-11-openjdk-amd64/include/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/"
echo "debug should either be true or false"
echo "android should either be true or false"
* Deserializes a channel manager and a set of channel monitors from the given serialized copies and interface implementations
*
* @param filter If provided, the outputs which were previously registered to be monitored for will be loaded into the filter.
+ * Note that if the provided Watch is a ChainWatch and has an associated filter, the previously registered
+ * outputs will be loaded when chain_sync_completed is called.
*/
public ChannelManagerConstructor(byte[] channel_manager_serialized, byte[][] channel_monitors_serialized,
KeysInterface keys_interface, FeeEstimator fee_estimator, Watch chain_watch, @Nullable Filter filter,
* @param their_node_id A valid 33-byte public key representing the peer's Lightning Node ID. If this is invalid,
* undefined behavior (read: Segfault, etc) may occur.
* @param remote The socket address to connect to.
+ * @param timeout_ms The amount of time, in milliseconds, up to which we will wait for connection to complete.
* @throws IOException If connecting to the remote endpoint fails or internal java.nio errors occur.
*/
- public void connect(byte[] their_node_id, SocketAddress remote) throws IOException {
- SocketChannel chan = SocketChannel.open(remote);
+ public void connect(byte[] their_node_id, SocketAddress remote, int timeout_ms) throws IOException {
+ SocketChannel chan = SocketChannel.open();
+ chan.configureBlocking(false);
+ Selector open_selector = Selector.open();
+ chan.register(open_selector, SelectionKey.OP_CONNECT);
+ if (!chan.connect(remote)) {
+ open_selector.select(timeout_ms);
+ }
+ if (!chan.finishConnect()) { // Note that this may throw its own IOException if we failed for another reason
+ throw new IOException("Timed out");
+ }
Peer peer = setup_socket(chan);
Result_CVec_u8ZPeerHandleErrorZ res = this.peer_manager.new_outbound_connection(their_node_id, peer.descriptor);
if (res instanceof Result_CVec_u8ZPeerHandleErrorZ.Result_CVec_u8ZPeerHandleErrorZ_OK) {
void connect_peers(final Peer peer1, final Peer peer2) {
if (use_nio_peer_handler) {
try {
- peer1.nio_peer_handler.connect(peer2.chan_manager.get_our_node_id(), new InetSocketAddress("127.0.0.1", peer2.nio_port));
+ peer1.nio_peer_handler.connect(peer2.chan_manager.get_our_node_id(), new InetSocketAddress("127.0.0.1", peer2.nio_port), 100);
} catch (IOException e) { assert false; }
} else {
DescriptorHolder descriptor1 = new DescriptorHolder();