X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=ldk-java;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fldk%2Fstructs%2FOnionMessageHandler.java;h=4b8abe04b148c4205a6c95caf2680ecbc7a8da4e;hp=304e8b05ee11fbdd85a94fc5ab545701268a887e;hb=2bb592fb946e316dba9f4d1123f8ac72ff4e9bf8;hpb=519dc944de5b88f95975140a13fbc6d77dd15a95 diff --git a/src/main/java/org/ldk/structs/OnionMessageHandler.java b/src/main/java/org/ldk/structs/OnionMessageHandler.java index 304e8b05..4b8abe04 100644 --- a/src/main/java/org/ldk/structs/OnionMessageHandler.java +++ b/src/main/java/org/ldk/structs/OnionMessageHandler.java @@ -37,6 +37,16 @@ public class OnionMessageHandler extends CommonBase { ptr = 0; } public static interface OnionMessageHandlerInterface { + /** + * Because much of the lightning network does not yet support forwarding onion messages, we + * may need to directly connect to a node which will forward a message for us. In such a case, + * this method will return the set of nodes which need connection by node_id and the + * corresponding socket addresses where they may accept incoming connections. + * + * Thus, this method should be polled regularly to detect messages await such a direct + * connection. + */ + TwoTuple_PublicKeyCVec_SocketAddressZZ[] get_and_clear_connections_needed(); /** * Handle an incoming `onion_message` message from the given peer. */ @@ -61,6 +71,11 @@ public class OnionMessageHandler extends CommonBase { * drop and refuse to forward onion messages to this peer. */ void peer_disconnected(byte[] their_node_id); + /** + * Performs actions that should happen roughly every ten seconds after startup. Allows handlers + * to drop any buffered onion messages intended for prospective peers. + */ + void timer_tick_occurred(); /** * Gets the node feature flags which this handler itself supports. All available handlers are * queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`] @@ -80,6 +95,12 @@ public class OnionMessageHandler extends CommonBase { public static OnionMessageHandler new_impl(OnionMessageHandlerInterface arg) { final LDKOnionMessageHandlerHolder impl_holder = new LDKOnionMessageHandlerHolder(); impl_holder.held = new OnionMessageHandler(new bindings.LDKOnionMessageHandler() { + @Override public long[] get_and_clear_connections_needed() { + TwoTuple_PublicKeyCVec_SocketAddressZZ[] ret = arg.get_and_clear_connections_needed(); + Reference.reachabilityFence(arg); + long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_40 -> ret_conv_40 == null ? 0 : ret_conv_40.clone_ptr()).toArray() : null; + return result; + } @Override public void handle_onion_message(byte[] peer_node_id, long msg) { org.ldk.structs.OnionMessage msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.OnionMessage(null, msg); } arg.handle_onion_message(peer_node_id, msg_hu_conv); @@ -102,6 +123,10 @@ public class OnionMessageHandler extends CommonBase { arg.peer_disconnected(their_node_id); Reference.reachabilityFence(arg); } + @Override public void timer_tick_occurred() { + arg.timer_tick_occurred(); + Reference.reachabilityFence(arg); + } @Override public long provided_node_features() { NodeFeatures ret = arg.provided_node_features(); Reference.reachabilityFence(arg); @@ -117,6 +142,29 @@ public class OnionMessageHandler extends CommonBase { }); return impl_holder.held; } + /** + * Because much of the lightning network does not yet support forwarding onion messages, we + * may need to directly connect to a node which will forward a message for us. In such a case, + * this method will return the set of nodes which need connection by node_id and the + * corresponding socket addresses where they may accept incoming connections. + * + * Thus, this method should be polled regularly to detect messages await such a direct + * connection. + */ + public TwoTuple_PublicKeyCVec_SocketAddressZZ[] get_and_clear_connections_needed() { + long[] ret = bindings.OnionMessageHandler_get_and_clear_connections_needed(this.ptr); + Reference.reachabilityFence(this); + int ret_conv_40_len = ret.length; + TwoTuple_PublicKeyCVec_SocketAddressZZ[] ret_conv_40_arr = new TwoTuple_PublicKeyCVec_SocketAddressZZ[ret_conv_40_len]; + for (int o = 0; o < ret_conv_40_len; o++) { + long ret_conv_40 = ret[o]; + TwoTuple_PublicKeyCVec_SocketAddressZZ ret_conv_40_hu_conv = new TwoTuple_PublicKeyCVec_SocketAddressZZ(null, ret_conv_40); + if (ret_conv_40_hu_conv != null) { ret_conv_40_hu_conv.ptrs_to.add(this); }; + ret_conv_40_arr[o] = ret_conv_40_hu_conv; + } + return ret_conv_40_arr; + } + /** * Handle an incoming `onion_message` message from the given peer. */ @@ -174,6 +222,15 @@ public class OnionMessageHandler extends CommonBase { Reference.reachabilityFence(their_node_id); } + /** + * Performs actions that should happen roughly every ten seconds after startup. Allows handlers + * to drop any buffered onion messages intended for prospective peers. + */ + public void timer_tick_occurred() { + bindings.OnionMessageHandler_timer_tick_occurred(this.ptr); + Reference.reachabilityFence(this); + } + /** * Gets the node feature flags which this handler itself supports. All available handlers are * queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]