X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fldk%2Fstructs%2FClosureReason.java;h=77aec65dff24dbf74350080a73368919d12d3839;hb=5d91c4ade4b5f736d100428ccf84709ad29f971d;hp=ad198c32f0e626e5cd6b4ddf67d4d2678080bef6;hpb=d2925e24ac4643ec22eb73495f0424e27def2545;p=ldk-java diff --git a/src/main/java/org/ldk/structs/ClosureReason.java b/src/main/java/org/ldk/structs/ClosureReason.java index ad198c32..77aec65d 100644 --- a/src/main/java/org/ldk/structs/ClosureReason.java +++ b/src/main/java/org/ldk/structs/ClosureReason.java @@ -9,7 +9,7 @@ import javax.annotation.Nullable; /** - * The reason the channel was closed. See individual variants more details. + * The reason the channel was closed. See individual variants for more details. */ @SuppressWarnings("unchecked") // We correctly assign various generic arrays public class ClosureReason extends CommonBase { @@ -27,8 +27,14 @@ public class ClosureReason extends CommonBase { if (raw_val.getClass() == bindings.LDKClosureReason.HolderForceClosed.class) { return new HolderForceClosed(ptr, (bindings.LDKClosureReason.HolderForceClosed)raw_val); } - if (raw_val.getClass() == bindings.LDKClosureReason.CooperativeClosure.class) { - return new CooperativeClosure(ptr, (bindings.LDKClosureReason.CooperativeClosure)raw_val); + if (raw_val.getClass() == bindings.LDKClosureReason.LegacyCooperativeClosure.class) { + return new LegacyCooperativeClosure(ptr, (bindings.LDKClosureReason.LegacyCooperativeClosure)raw_val); + } + if (raw_val.getClass() == bindings.LDKClosureReason.CounterpartyInitiatedCooperativeClosure.class) { + return new CounterpartyInitiatedCooperativeClosure(ptr, (bindings.LDKClosureReason.CounterpartyInitiatedCooperativeClosure)raw_val); + } + if (raw_val.getClass() == bindings.LDKClosureReason.LocallyInitiatedCooperativeClosure.class) { + return new LocallyInitiatedCooperativeClosure(ptr, (bindings.LDKClosureReason.LocallyInitiatedCooperativeClosure)raw_val); } if (raw_val.getClass() == bindings.LDKClosureReason.CommitmentTxConfirmed.class) { return new CommitmentTxConfirmed(ptr, (bindings.LDKClosureReason.CommitmentTxConfirmed)raw_val); @@ -45,6 +51,15 @@ public class ClosureReason extends CommonBase { if (raw_val.getClass() == bindings.LDKClosureReason.OutdatedChannelManager.class) { return new OutdatedChannelManager(ptr, (bindings.LDKClosureReason.OutdatedChannelManager)raw_val); } + if (raw_val.getClass() == bindings.LDKClosureReason.CounterpartyCoopClosedUnfundedChannel.class) { + return new CounterpartyCoopClosedUnfundedChannel(ptr, (bindings.LDKClosureReason.CounterpartyCoopClosedUnfundedChannel)raw_val); + } + if (raw_val.getClass() == bindings.LDKClosureReason.FundingBatchClosure.class) { + return new FundingBatchClosure(ptr, (bindings.LDKClosureReason.FundingBatchClosure)raw_val); + } + if (raw_val.getClass() == bindings.LDKClosureReason.HTLCsTimedOut.class) { + return new HTLCsTimedOut(ptr, (bindings.LDKClosureReason.HTLCsTimedOut)raw_val); + } assert false; return null; // Unreachable without extending the (internal) bindings interface } @@ -58,14 +73,19 @@ public class ClosureReason extends CommonBase { /** * The error which the peer sent us. * - * The string should be sanitized before it is used (e.g emitted to logs - * or printed to stdout). Otherwise, a well crafted error message may exploit + * Be careful about printing the peer_msg, a well-crafted message could exploit * a security vulnerability in the terminal emulator or the logging subsystem. + * To be safe, use `Display` on `UntrustedString` + * + * [`UntrustedString`]: crate::util::string::UntrustedString */ - public final String peer_msg; + public final org.ldk.structs.UntrustedString peer_msg; private CounterpartyForceClosed(long ptr, bindings.LDKClosureReason.CounterpartyForceClosed obj) { super(null, ptr); - this.peer_msg = obj.peer_msg; + long peer_msg = obj.peer_msg; + org.ldk.structs.UntrustedString peer_msg_hu_conv = null; if (peer_msg < 0 || peer_msg > 4096) { peer_msg_hu_conv = new org.ldk.structs.UntrustedString(null, peer_msg); } + if (peer_msg_hu_conv != null) { peer_msg_hu_conv.ptrs_to.add(this); }; + this.peer_msg = peer_msg_hu_conv; } } /** @@ -81,9 +101,33 @@ public class ClosureReason extends CommonBase { /** * The channel was closed after negotiating a cooperative close and we've now broadcasted * the cooperative close transaction. Note the shutdown may have been initiated by us. + * + * This was only set in versions of LDK prior to 0.0.122. */ - public final static class CooperativeClosure extends ClosureReason { - private CooperativeClosure(long ptr, bindings.LDKClosureReason.CooperativeClosure obj) { + public final static class LegacyCooperativeClosure extends ClosureReason { + private LegacyCooperativeClosure(long ptr, bindings.LDKClosureReason.LegacyCooperativeClosure obj) { + super(null, ptr); + } + } + /** + * The channel was closed after negotiating a cooperative close and we've now broadcasted + * the cooperative close transaction. This indicates that the shutdown was initiated by our + * counterparty. + * + * In rare cases where we initiated closure immediately prior to shutting down without + * persisting, this value may be provided for channels we initiated closure for. + */ + public final static class CounterpartyInitiatedCooperativeClosure extends ClosureReason { + private CounterpartyInitiatedCooperativeClosure(long ptr, bindings.LDKClosureReason.CounterpartyInitiatedCooperativeClosure obj) { + super(null, ptr); + } + } + /** + * The channel was closed after negotiating a cooperative close and we've now broadcasted + * the cooperative close transaction. This indicates that the shutdown was initiated by us. + */ + public final static class LocallyInitiatedCooperativeClosure extends ClosureReason { + private LocallyInitiatedCooperativeClosure(long ptr, bindings.LDKClosureReason.LocallyInitiatedCooperativeClosure obj) { super(null, ptr); } } @@ -112,18 +156,23 @@ public class ClosureReason extends CommonBase { /** * A developer-readable error message which we generated. */ - public final String err; + public final java.lang.String err; private ProcessingError(long ptr, bindings.LDKClosureReason.ProcessingError obj) { super(null, ptr); this.err = obj.err; } } /** - * The `PeerManager` informed us that we've disconnected from the peer. We close channels - * if the `PeerManager` informed us that it is unlikely we'll be able to connect to the - * peer again in the future or if the peer disconnected before we finished negotiating - * the channel open. The first case may be caused by incompatible features which our - * counterparty, or we, require. + * The peer disconnected prior to funding completing. In this case the spec mandates that we + * forget the channel entirely - we can attempt again if the peer reconnects. + * + * This includes cases where we restarted prior to funding completion, including prior to the + * initial [`ChannelMonitor`] persistence completing. + * + * In LDK versions prior to 0.0.107 this could also occur if we were unable to connect to the + * peer because of mutual incompatibility between us and our channel counterparty. + * + * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor */ public final static class DisconnectedPeer extends ClosureReason { private DisconnectedPeer(long ptr, bindings.LDKClosureReason.DisconnectedPeer obj) { @@ -131,14 +180,43 @@ public class ClosureReason extends CommonBase { } } /** - * Closure generated from `ChannelManager::read` if the ChannelMonitor is newer than - * the ChannelManager deserialized. + * Closure generated from `ChannelManager::read` if the [`ChannelMonitor`] is newer than + * the [`ChannelManager`] deserialized. + * + * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor + * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager */ public final static class OutdatedChannelManager extends ClosureReason { private OutdatedChannelManager(long ptr, bindings.LDKClosureReason.OutdatedChannelManager obj) { super(null, ptr); } } + /** + * The counterparty requested a cooperative close of a channel that had not been funded yet. + * The channel has been immediately closed. + */ + public final static class CounterpartyCoopClosedUnfundedChannel extends ClosureReason { + private CounterpartyCoopClosedUnfundedChannel(long ptr, bindings.LDKClosureReason.CounterpartyCoopClosedUnfundedChannel obj) { + super(null, ptr); + } + } + /** + * Another channel in the same funding batch closed before the funding transaction + * was ready to be broadcast. + */ + public final static class FundingBatchClosure extends ClosureReason { + private FundingBatchClosure(long ptr, bindings.LDKClosureReason.FundingBatchClosure obj) { + super(null, ptr); + } + } + /** + * One of our HTLCs timed out in a channel, causing us to force close the channel. + */ + public final static class HTLCsTimedOut extends ClosureReason { + private HTLCsTimedOut(long ptr, bindings.LDKClosureReason.HTLCsTimedOut obj) { + super(null, ptr); + } + } long clone_ptr() { long ret = bindings.ClosureReason_clone_ptr(this.ptr); Reference.reachabilityFence(this); @@ -152,20 +230,21 @@ public class ClosureReason extends CommonBase { long ret = bindings.ClosureReason_clone(this.ptr); Reference.reachabilityFence(this); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(this); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); }; return ret_hu_conv; } /** * Utility method to constructs a new CounterpartyForceClosed-variant ClosureReason */ - public static ClosureReason counterparty_force_closed(java.lang.String peer_msg) { - long ret = bindings.ClosureReason_counterparty_force_closed(peer_msg); + public static ClosureReason counterparty_force_closed(org.ldk.structs.UntrustedString peer_msg) { + long ret = bindings.ClosureReason_counterparty_force_closed(peer_msg.ptr); Reference.reachabilityFence(peer_msg); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(peer_msg); }; return ret_hu_conv; } @@ -175,19 +254,41 @@ public class ClosureReason extends CommonBase { public static ClosureReason holder_force_closed() { long ret = bindings.ClosureReason_holder_force_closed(); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; + return ret_hu_conv; + } + + /** + * Utility method to constructs a new LegacyCooperativeClosure-variant ClosureReason + */ + public static ClosureReason legacy_cooperative_closure() { + long ret = bindings.ClosureReason_legacy_cooperative_closure(); + if (ret >= 0 && ret <= 4096) { return null; } + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } /** - * Utility method to constructs a new CooperativeClosure-variant ClosureReason + * Utility method to constructs a new CounterpartyInitiatedCooperativeClosure-variant ClosureReason */ - public static ClosureReason cooperative_closure() { - long ret = bindings.ClosureReason_cooperative_closure(); + public static ClosureReason counterparty_initiated_cooperative_closure() { + long ret = bindings.ClosureReason_counterparty_initiated_cooperative_closure(); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; + return ret_hu_conv; + } + + /** + * Utility method to constructs a new LocallyInitiatedCooperativeClosure-variant ClosureReason + */ + public static ClosureReason locally_initiated_cooperative_closure() { + long ret = bindings.ClosureReason_locally_initiated_cooperative_closure(); + if (ret >= 0 && ret <= 4096) { return null; } + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } @@ -197,8 +298,8 @@ public class ClosureReason extends CommonBase { public static ClosureReason commitment_tx_confirmed() { long ret = bindings.ClosureReason_commitment_tx_confirmed(); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } @@ -208,8 +309,8 @@ public class ClosureReason extends CommonBase { public static ClosureReason funding_timed_out() { long ret = bindings.ClosureReason_funding_timed_out(); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } @@ -220,8 +321,8 @@ public class ClosureReason extends CommonBase { long ret = bindings.ClosureReason_processing_error(err); Reference.reachabilityFence(err); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } @@ -231,8 +332,8 @@ public class ClosureReason extends CommonBase { public static ClosureReason disconnected_peer() { long ret = bindings.ClosureReason_disconnected_peer(); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } @@ -242,11 +343,68 @@ public class ClosureReason extends CommonBase { public static ClosureReason outdated_channel_manager() { long ret = bindings.ClosureReason_outdated_channel_manager(); if (ret >= 0 && ret <= 4096) { return null; } - ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret); - ret_hu_conv.ptrs_to.add(ret_hu_conv); + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; return ret_hu_conv; } + /** + * Utility method to constructs a new CounterpartyCoopClosedUnfundedChannel-variant ClosureReason + */ + public static ClosureReason counterparty_coop_closed_unfunded_channel() { + long ret = bindings.ClosureReason_counterparty_coop_closed_unfunded_channel(); + if (ret >= 0 && ret <= 4096) { return null; } + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; + return ret_hu_conv; + } + + /** + * Utility method to constructs a new FundingBatchClosure-variant ClosureReason + */ + public static ClosureReason funding_batch_closure() { + long ret = bindings.ClosureReason_funding_batch_closure(); + if (ret >= 0 && ret <= 4096) { return null; } + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; + return ret_hu_conv; + } + + /** + * Utility method to constructs a new HTLCsTimedOut-variant ClosureReason + */ + public static ClosureReason htlcs_timed_out() { + long ret = bindings.ClosureReason_htlcs_timed_out(); + if (ret >= 0 && ret <= 4096) { return null; } + org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret); + if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); }; + return ret_hu_conv; + } + + /** + * Checks if two ClosureReasons contain equal inner contents. + * This ignores pointers and is_owned flags and looks at the values in fields. + */ + public boolean eq(org.ldk.structs.ClosureReason b) { + boolean ret = bindings.ClosureReason_eq(this.ptr, b.ptr); + Reference.reachabilityFence(this); + Reference.reachabilityFence(b); + return ret; + } + + @Override public boolean equals(Object o) { + if (!(o instanceof ClosureReason)) return false; + return this.eq((ClosureReason)o); + } + /** + * Get the string representation of a ClosureReason object + */ + public String to_str() { + String ret = bindings.ClosureReason_to_str(this.ptr); + Reference.reachabilityFence(this); + return ret; + } + /** * Serialize the ClosureReason object into a byte array which can be read by ClosureReason_read */