From: Matt Corallo Date: Sat, 30 Jan 2021 04:25:00 +0000 (-0500) Subject: Bindings updates X-Git-Tag: v0.0.1~10 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=fed2245c60159f6c074c9ed5c0f3ce273ad9841b;p=ldk-java Bindings updates --- diff --git a/src/main/java/org/ldk/impl/bindings.java b/src/main/java/org/ldk/impl/bindings.java index f3b8dfd7..52da72db 100644 --- a/src/main/java/org/ldk/impl/bindings.java +++ b/src/main/java/org/ldk/impl/bindings.java @@ -274,16 +274,12 @@ public class bindings { public static native boolean LDKCResult_SignatureNoneZ_result_ok(long arg); public static native byte[] LDKCResult_SignatureNoneZ_get_ok(long arg); public static native void LDKCResult_SignatureNoneZ_get_err(long arg); - public static native boolean LDKCResult_CVec_SignatureZNoneZ_result_ok(long arg); - public static native byte[][] LDKCResult_CVec_SignatureZNoneZ_get_ok(long arg); - public static native void LDKCResult_CVec_SignatureZNoneZ_get_err(long arg); public interface LDKChannelKeys { byte[] get_per_commitment_point(long idx); byte[] release_commitment_secret(long idx); long key_derivation_params(); long sign_counterparty_commitment(long commitment_tx); - long sign_holder_commitment(long commitment_tx); - long sign_holder_commitment_htlc_transactions(long commitment_tx); + long sign_holder_commitment_and_htlcs(long commitment_tx); long sign_justice_transaction(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, long htlc); long sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, long htlc); long sign_closing_transaction(byte[] closing_tx); @@ -300,10 +296,8 @@ public class bindings { public static native long ChannelKeys_key_derivation_params(long this_arg); // LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ChannelKeys_sign_counterparty_commitment LDKChannelKeys* this_arg, const struct LDKCommitmentTransaction *NONNULL_PTR commitment_tx public static native long ChannelKeys_sign_counterparty_commitment(long this_arg, long commitment_tx); - // LDKCResult_SignatureNoneZ ChannelKeys_sign_holder_commitment LDKChannelKeys* this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx - public static native long ChannelKeys_sign_holder_commitment(long this_arg, long commitment_tx); - // LDKCResult_CVec_SignatureZNoneZ ChannelKeys_sign_holder_commitment_htlc_transactions LDKChannelKeys* this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx - public static native long ChannelKeys_sign_holder_commitment_htlc_transactions(long this_arg, long commitment_tx); + // LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ChannelKeys_sign_holder_commitment_and_htlcs LDKChannelKeys* this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx + public static native long ChannelKeys_sign_holder_commitment_and_htlcs(long this_arg, long commitment_tx); // LDKCResult_SignatureNoneZ ChannelKeys_sign_justice_transaction LDKChannelKeys* this_arg, struct LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (*per_commitment_key)[32], const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc public static native long ChannelKeys_sign_justice_transaction(long this_arg, byte[] justice_tx, long input, long amount, byte[] per_commitment_key, long htlc); // LDKCResult_SignatureNoneZ ChannelKeys_sign_counterparty_htlc_transaction LDKChannelKeys* this_arg, struct LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, struct LDKPublicKey per_commitment_point, const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc @@ -537,6 +531,9 @@ public class bindings { public static native boolean LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(long arg); public static native long LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(long arg); public static native void LDKCResult_TrustedCommitmentTransactionNoneZ_get_err(long arg); + public static native boolean LDKCResult_CVec_SignatureZNoneZ_result_ok(long arg); + public static native byte[][] LDKCResult_CVec_SignatureZNoneZ_get_ok(long arg); + public static native void LDKCResult_CVec_SignatureZNoneZ_get_err(long arg); public static native long LDKCVec_RouteHopZ_new(long[] elems); public static native boolean LDKCResult_RouteDecodeErrorZ_result_ok(long arg); public static native long LDKCResult_RouteDecodeErrorZ_get_ok(long arg); @@ -726,6 +723,8 @@ public class bindings { public static native long CResult_NoneChannelMonitorUpdateErrZ_err(LDKChannelMonitorUpdateErr e); // void CResult_NoneChannelMonitorUpdateErrZ_free(struct LDKCResult_NoneChannelMonitorUpdateErrZ _res); public static native void CResult_NoneChannelMonitorUpdateErrZ_free(long _res); + // struct LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_clone(const struct LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR orig); + public static native long CResult_NoneChannelMonitorUpdateErrZ_clone(long orig); // void CVec_MonitorEventZ_free(struct LDKCVec_MonitorEventZ _res); public static native void CVec_MonitorEventZ_free(long[] _res); // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_ok(struct LDKChannelMonitorUpdate o); @@ -740,12 +739,16 @@ public class bindings { public static native long CResult_NoneMonitorUpdateErrorZ_err(long e); // void CResult_NoneMonitorUpdateErrorZ_free(struct LDKCResult_NoneMonitorUpdateErrorZ _res); public static native void CResult_NoneMonitorUpdateErrorZ_free(long _res); + // struct LDKCResult_NoneMonitorUpdateErrorZ CResult_NoneMonitorUpdateErrorZ_clone(const struct LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR orig); + public static native long CResult_NoneMonitorUpdateErrorZ_clone(long orig); // void C2Tuple_OutPointScriptZ_free(struct LDKC2Tuple_OutPointScriptZ _res); public static native void C2Tuple_OutPointScriptZ_free(long _res); // struct LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_new(struct LDKOutPoint a, struct LDKCVec_u8Z b); public static native long C2Tuple_OutPointScriptZ_new(long a, byte[] b); // void CVec_TransactionZ_free(struct LDKCVec_TransactionZ _res); public static native void CVec_TransactionZ_free(byte[][] _res); + // struct LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_clone(const struct LDKC2Tuple_u32TxOutZ *NONNULL_PTR orig); + public static native long C2Tuple_u32TxOutZ_clone(long orig); // void C2Tuple_u32TxOutZ_free(struct LDKC2Tuple_u32TxOutZ _res); public static native void C2Tuple_u32TxOutZ_free(long _res); // struct LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_new(uint32_t a, struct LDKTxOut b); @@ -768,6 +771,8 @@ public class bindings { public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(long e); // void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res); public static native void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(long _res); + // struct LDKC2Tuple_u64u64Z C2Tuple_u64u64Z_clone(const struct LDKC2Tuple_u64u64Z *NONNULL_PTR orig); + public static native long C2Tuple_u64u64Z_clone(long orig); // void C2Tuple_u64u64Z_free(struct LDKC2Tuple_u64u64Z _res); public static native void C2Tuple_u64u64Z_free(long _res); // struct LDKC2Tuple_u64u64Z C2Tuple_u64u64Z_new(uint64_t a, uint64_t b); @@ -778,8 +783,12 @@ public class bindings { public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_err(long e); // void CResult_SpendableOutputDescriptorDecodeErrorZ_free(struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res); public static native void CResult_SpendableOutputDescriptorDecodeErrorZ_free(long _res); + // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ CResult_SpendableOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR orig); + public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_clone(long orig); // void CVec_SignatureZ_free(struct LDKCVec_SignatureZ _res); public static native void CVec_SignatureZ_free(byte[][] _res); + // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_clone(const struct LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR orig); + public static native long C2Tuple_SignatureCVec_SignatureZZ_clone(long orig); // void C2Tuple_SignatureCVec_SignatureZZ_free(struct LDKC2Tuple_SignatureCVec_SignatureZZ _res); public static native void C2Tuple_SignatureCVec_SignatureZZ_free(long _res); // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_new(struct LDKSignature a, struct LDKCVec_SignatureZ b); @@ -800,20 +809,14 @@ public class bindings { public static native void CResult_SignatureNoneZ_free(long _res); // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_clone(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR orig); public static native long CResult_SignatureNoneZ_clone(long orig); - // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_ok(struct LDKCVec_SignatureZ o); - public static native long CResult_CVec_SignatureZNoneZ_ok(byte[][] o); - // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_err(void); - public static native long CResult_CVec_SignatureZNoneZ_err(); - // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res); - public static native void CResult_CVec_SignatureZNoneZ_free(long _res); - // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig); - public static native long CResult_CVec_SignatureZNoneZ_clone(long orig); // struct LDKCResult_ChanKeySignerDecodeErrorZ CResult_ChanKeySignerDecodeErrorZ_ok(struct LDKChannelKeys o); public static native long CResult_ChanKeySignerDecodeErrorZ_ok(long o); // struct LDKCResult_ChanKeySignerDecodeErrorZ CResult_ChanKeySignerDecodeErrorZ_err(struct LDKDecodeError e); public static native long CResult_ChanKeySignerDecodeErrorZ_err(long e); // void CResult_ChanKeySignerDecodeErrorZ_free(struct LDKCResult_ChanKeySignerDecodeErrorZ _res); public static native void CResult_ChanKeySignerDecodeErrorZ_free(long _res); + // struct LDKCResult_ChanKeySignerDecodeErrorZ CResult_ChanKeySignerDecodeErrorZ_clone(const struct LDKCResult_ChanKeySignerDecodeErrorZ *NONNULL_PTR orig); + public static native long CResult_ChanKeySignerDecodeErrorZ_clone(long orig); // struct LDKCResult_InMemoryChannelKeysDecodeErrorZ CResult_InMemoryChannelKeysDecodeErrorZ_ok(struct LDKInMemoryChannelKeys o); public static native long CResult_InMemoryChannelKeysDecodeErrorZ_ok(long o); // struct LDKCResult_InMemoryChannelKeysDecodeErrorZ CResult_InMemoryChannelKeysDecodeErrorZ_err(struct LDKDecodeError e); @@ -826,6 +829,8 @@ public class bindings { public static native long CResult_TxOutAccessErrorZ_err(LDKAccessError e); // void CResult_TxOutAccessErrorZ_free(struct LDKCResult_TxOutAccessErrorZ _res); public static native void CResult_TxOutAccessErrorZ_free(long _res); + // struct LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_clone(const struct LDKCResult_TxOutAccessErrorZ *NONNULL_PTR orig); + public static native long CResult_TxOutAccessErrorZ_clone(long orig); // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_ok(void); public static native long CResult_NoneAPIErrorZ_ok(); // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_err(struct LDKAPIError e); @@ -840,6 +845,8 @@ public class bindings { public static native long CResult_NonePaymentSendFailureZ_err(long e); // void CResult_NonePaymentSendFailureZ_free(struct LDKCResult_NonePaymentSendFailureZ _res); public static native void CResult_NonePaymentSendFailureZ_free(long _res); + // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_clone(const struct LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR orig); + public static native long CResult_NonePaymentSendFailureZ_clone(long orig); // void CVec_NetAddressZ_free(struct LDKCVec_NetAddressZ _res); public static native void CVec_NetAddressZ_free(long[] _res); // void CVec_ChannelMonitorZ_free(struct LDKCVec_ChannelMonitorZ _res); @@ -860,6 +867,8 @@ public class bindings { public static native long CResult_NetAddressu8Z_err(byte e); // void CResult_NetAddressu8Z_free(struct LDKCResult_NetAddressu8Z _res); public static native void CResult_NetAddressu8Z_free(long _res); + // struct LDKCResult_NetAddressu8Z CResult_NetAddressu8Z_clone(const struct LDKCResult_NetAddressu8Z *NONNULL_PTR orig); + public static native long CResult_NetAddressu8Z_clone(long orig); // struct LDKCResult_CResult_NetAddressu8ZDecodeErrorZ CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(struct LDKCResult_NetAddressu8Z o); public static native long CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(long o); // struct LDKCResult_CResult_NetAddressu8ZDecodeErrorZ CResult_CResult_NetAddressu8ZDecodeErrorZ_err(struct LDKDecodeError e); @@ -882,6 +891,8 @@ public class bindings { public static native long CResult_boolLightningErrorZ_err(long e); // void CResult_boolLightningErrorZ_free(struct LDKCResult_boolLightningErrorZ _res); public static native void CResult_boolLightningErrorZ_free(long _res); + // struct LDKCResult_boolLightningErrorZ CResult_boolLightningErrorZ_clone(const struct LDKCResult_boolLightningErrorZ *NONNULL_PTR orig); + public static native long CResult_boolLightningErrorZ_clone(long orig); // void C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ _res); public static native void C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(long _res); // struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(struct LDKChannelAnnouncement a, struct LDKChannelUpdate b, struct LDKChannelUpdate c); @@ -896,6 +907,8 @@ public class bindings { public static native long CResult_NoneLightningErrorZ_err(long e); // void CResult_NoneLightningErrorZ_free(struct LDKCResult_NoneLightningErrorZ _res); public static native void CResult_NoneLightningErrorZ_free(long _res); + // struct LDKCResult_NoneLightningErrorZ CResult_NoneLightningErrorZ_clone(const struct LDKCResult_NoneLightningErrorZ *NONNULL_PTR orig); + public static native long CResult_NoneLightningErrorZ_clone(long orig); // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_ok(struct LDKChannelReestablish o); public static native long CResult_ChannelReestablishDecodeErrorZ_ok(long o); // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_err(struct LDKDecodeError e); @@ -984,18 +997,24 @@ public class bindings { public static native long CResult_CVec_u8ZPeerHandleErrorZ_err(long e); // void CResult_CVec_u8ZPeerHandleErrorZ_free(struct LDKCResult_CVec_u8ZPeerHandleErrorZ _res); public static native void CResult_CVec_u8ZPeerHandleErrorZ_free(long _res); + // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_clone(const struct LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR orig); + public static native long CResult_CVec_u8ZPeerHandleErrorZ_clone(long orig); // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_ok(void); public static native long CResult_NonePeerHandleErrorZ_ok(); // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_err(struct LDKPeerHandleError e); public static native long CResult_NonePeerHandleErrorZ_err(long e); // void CResult_NonePeerHandleErrorZ_free(struct LDKCResult_NonePeerHandleErrorZ _res); public static native void CResult_NonePeerHandleErrorZ_free(long _res); + // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_clone(const struct LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR orig); + public static native long CResult_NonePeerHandleErrorZ_clone(long orig); // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_ok(bool o); public static native long CResult_boolPeerHandleErrorZ_ok(boolean o); // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_err(struct LDKPeerHandleError e); public static native long CResult_boolPeerHandleErrorZ_err(long e); // void CResult_boolPeerHandleErrorZ_free(struct LDKCResult_boolPeerHandleErrorZ _res); public static native void CResult_boolPeerHandleErrorZ_free(long _res); + // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_clone(const struct LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR orig); + public static native long CResult_boolPeerHandleErrorZ_clone(long orig); // struct LDKCResult_SecretKeySecpErrorZ CResult_SecretKeySecpErrorZ_ok(struct LDKSecretKey o); public static native long CResult_SecretKeySecpErrorZ_ok(byte[] o); // struct LDKCResult_SecretKeySecpErrorZ CResult_SecretKeySecpErrorZ_err(enum LDKSecp256k1Error e); @@ -1020,6 +1039,14 @@ public class bindings { public static native long CResult_TrustedCommitmentTransactionNoneZ_err(); // void CResult_TrustedCommitmentTransactionNoneZ_free(struct LDKCResult_TrustedCommitmentTransactionNoneZ _res); public static native void CResult_TrustedCommitmentTransactionNoneZ_free(long _res); + // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_ok(struct LDKCVec_SignatureZ o); + public static native long CResult_CVec_SignatureZNoneZ_ok(byte[][] o); + // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_err(void); + public static native long CResult_CVec_SignatureZNoneZ_err(); + // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res); + public static native void CResult_CVec_SignatureZNoneZ_free(long _res); + // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig); + public static native long CResult_CVec_SignatureZNoneZ_clone(long orig); // void CVec_RouteHopZ_free(struct LDKCVec_RouteHopZ _res); public static native void CVec_RouteHopZ_free(long[] _res); // void CVec_CVec_RouteHopZZ_free(struct LDKCVec_CVec_RouteHopZZ _res); @@ -1050,12 +1077,16 @@ public class bindings { public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_err(long e); // void CResult_NodeAnnouncementInfoDecodeErrorZ_free(struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res); public static native void CResult_NodeAnnouncementInfoDecodeErrorZ_free(long _res); + // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_clone(const struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR orig); + public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_clone(long orig); // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_ok(struct LDKNodeInfo o); public static native long CResult_NodeInfoDecodeErrorZ_ok(long o); // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_err(struct LDKDecodeError e); public static native long CResult_NodeInfoDecodeErrorZ_err(long e); // void CResult_NodeInfoDecodeErrorZ_free(struct LDKCResult_NodeInfoDecodeErrorZ _res); public static native void CResult_NodeInfoDecodeErrorZ_free(long _res); + // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_clone(const struct LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR orig); + public static native long CResult_NodeInfoDecodeErrorZ_clone(long orig); // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_ok(struct LDKNetworkGraph o); public static native long CResult_NetworkGraphDecodeErrorZ_ok(long o); // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_err(struct LDKDecodeError e); @@ -1240,6 +1271,8 @@ public class bindings { public static native LDKChannelMonitorUpdateErr ChannelMonitorUpdateErr_clone(long orig); // void MonitorUpdateError_free(struct LDKMonitorUpdateError this_ptr); public static native void MonitorUpdateError_free(long this_ptr); + // struct LDKMonitorUpdateError MonitorUpdateError_clone(const struct LDKMonitorUpdateError *NONNULL_PTR orig); + public static native long MonitorUpdateError_clone(long orig); // void MonitorEvent_free(struct LDKMonitorEvent this_ptr); public static native void MonitorEvent_free(long this_ptr); // struct LDKMonitorEvent MonitorEvent_clone(const struct LDKMonitorEvent *NONNULL_PTR orig); @@ -1254,6 +1287,8 @@ public class bindings { public static native long HTLCUpdate_read(byte[] ser); // void ChannelMonitor_free(struct LDKChannelMonitor this_ptr); public static native void ChannelMonitor_free(long this_ptr); + // struct LDKChannelMonitor ChannelMonitor_clone(const struct LDKChannelMonitor *NONNULL_PTR orig); + public static native long ChannelMonitor_clone(long orig); // struct LDKCVec_u8Z ChannelMonitor_write(const struct LDKChannelMonitor *NONNULL_PTR obj); public static native byte[] ChannelMonitor_write(long obj); // MUST_USE_RES struct LDKCResult_NoneMonitorUpdateErrorZ ChannelMonitor_update_monitor(struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKChannelMonitorUpdate *NONNULL_PTR updates, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, const struct LDKFeeEstimator *NONNULL_PTR fee_estimator, const struct LDKLogger *NONNULL_PTR logger); @@ -1406,6 +1441,8 @@ public class bindings { public static native void ChannelDetails_set_is_live(long this_ptr, boolean val); // void PaymentSendFailure_free(struct LDKPaymentSendFailure this_ptr); public static native void PaymentSendFailure_free(long this_ptr); + // struct LDKPaymentSendFailure PaymentSendFailure_clone(const struct LDKPaymentSendFailure *NONNULL_PTR orig); + public static native long PaymentSendFailure_clone(long orig); // MUST_USE_RES struct LDKChannelManager ChannelManager_new(enum LDKNetwork network, struct LDKFeeEstimator fee_est, struct LDKWatch chain_monitor, struct LDKBroadcasterInterface tx_broadcaster, struct LDKLogger logger, struct LDKKeysInterface keys_manager, struct LDKUserConfig config, uintptr_t current_blockchain_height); public static native long ChannelManager_new(LDKNetwork network, long fee_est, long chain_monitor, long tx_broadcaster, long logger, long keys_manager, long config, long current_blockchain_height); // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_create_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey their_network_key, uint64_t channel_value_satoshis, uint64_t push_msat, uint64_t user_id, struct LDKUserConfig override_config); @@ -1416,8 +1453,8 @@ public class bindings { public static native long[] ChannelManager_list_usable_channels(long this_arg); // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_close_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*channel_id)[32]); public static native long ChannelManager_close_channel(long this_arg, byte[] channel_id); - // void ChannelManager_force_close_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*channel_id)[32]); - public static native void ChannelManager_force_close_channel(long this_arg, byte[] channel_id); + // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_force_close_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*channel_id)[32]); + public static native long ChannelManager_force_close_channel(long this_arg, byte[] channel_id); // void ChannelManager_force_close_all_channels(const struct LDKChannelManager *NONNULL_PTR this_arg); public static native void ChannelManager_force_close_all_channels(long this_arg); // MUST_USE_RES struct LDKCResult_NonePaymentSendFailureZ ChannelManager_send_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKRoute *NONNULL_PTR route, struct LDKThirtyTwoBytes payment_hash, struct LDKThirtyTwoBytes payment_secret); @@ -1482,6 +1519,8 @@ public class bindings { public static native long C2Tuple_BlockHashChannelManagerZ_read(byte[] ser, long arg); // void DecodeError_free(struct LDKDecodeError this_ptr); public static native void DecodeError_free(long this_ptr); + // struct LDKDecodeError DecodeError_clone(const struct LDKDecodeError *NONNULL_PTR orig); + public static native long DecodeError_clone(long orig); // void Init_free(struct LDKInit this_ptr); public static native void Init_free(long this_ptr); // struct LDKInit Init_clone(const struct LDKInit *NONNULL_PTR orig); @@ -2160,6 +2199,8 @@ public class bindings { public static native long ErrorAction_clone(long orig); // void LightningError_free(struct LDKLightningError this_ptr); public static native void LightningError_free(long this_ptr); + // struct LDKLightningError LightningError_clone(const struct LDKLightningError *NONNULL_PTR orig); + public static native long LightningError_clone(long orig); // struct LDKStr LightningError_get_err(const struct LDKLightningError *NONNULL_PTR this_ptr); public static native String LightningError_get_err(long this_ptr); // void LightningError_set_err(struct LDKLightningError *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val); @@ -2342,6 +2383,8 @@ public class bindings { public static native void SocketDescriptor_free(long this_ptr); // void PeerHandleError_free(struct LDKPeerHandleError this_ptr); public static native void PeerHandleError_free(long this_ptr); + // struct LDKPeerHandleError PeerHandleError_clone(const struct LDKPeerHandleError *NONNULL_PTR orig); + public static native long PeerHandleError_clone(long orig); // bool PeerHandleError_get_no_connection_possible(const struct LDKPeerHandleError *NONNULL_PTR this_ptr); public static native boolean PeerHandleError_get_no_connection_possible(long this_ptr); // void PeerHandleError_set_no_connection_possible(struct LDKPeerHandleError *NONNULL_PTR this_ptr, bool val); @@ -2706,6 +2749,8 @@ public class bindings { public static native long NetGraphMsgHandler_as_MessageSendEventsProvider(long this_arg); // void DirectionalChannelInfo_free(struct LDKDirectionalChannelInfo this_ptr); public static native void DirectionalChannelInfo_free(long this_ptr); + // struct LDKDirectionalChannelInfo DirectionalChannelInfo_clone(const struct LDKDirectionalChannelInfo *NONNULL_PTR orig); + public static native long DirectionalChannelInfo_clone(long orig); // uint32_t DirectionalChannelInfo_get_last_update(const struct LDKDirectionalChannelInfo *NONNULL_PTR this_ptr); public static native int DirectionalChannelInfo_get_last_update(long this_ptr); // void DirectionalChannelInfo_set_last_update(struct LDKDirectionalChannelInfo *NONNULL_PTR this_ptr, uint32_t val); @@ -2784,6 +2829,8 @@ public class bindings { public static native byte[] RoutingFees_write(long obj); // void NodeAnnouncementInfo_free(struct LDKNodeAnnouncementInfo this_ptr); public static native void NodeAnnouncementInfo_free(long this_ptr); + // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_clone(const struct LDKNodeAnnouncementInfo *NONNULL_PTR orig); + public static native long NodeAnnouncementInfo_clone(long orig); // struct LDKNodeFeatures NodeAnnouncementInfo_get_features(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr); public static native long NodeAnnouncementInfo_get_features(long this_ptr); // void NodeAnnouncementInfo_set_features(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKNodeFeatures val); @@ -2814,6 +2861,8 @@ public class bindings { public static native long NodeAnnouncementInfo_read(byte[] ser); // void NodeInfo_free(struct LDKNodeInfo this_ptr); public static native void NodeInfo_free(long this_ptr); + // struct LDKNodeInfo NodeInfo_clone(const struct LDKNodeInfo *NONNULL_PTR orig); + public static native long NodeInfo_clone(long orig); // void NodeInfo_set_channels(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val); public static native void NodeInfo_set_channels(long this_ptr, long[] val); // struct LDKRoutingFees NodeInfo_get_lowest_inbound_channel_fees(const struct LDKNodeInfo *NONNULL_PTR this_ptr); diff --git a/src/main/java/org/ldk/structs/AcceptChannel.java b/src/main/java/org/ldk/structs/AcceptChannel.java index 718b73c6..f6ba8ed4 100644 --- a/src/main/java/org/ldk/structs/AcceptChannel.java +++ b/src/main/java/org/ldk/structs/AcceptChannel.java @@ -17,6 +17,7 @@ public class AcceptChannel extends CommonBase { public AcceptChannel clone() { long ret = bindings.AcceptChannel_clone(this.ptr); AcceptChannel ret_hu_conv = new AcceptChannel(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -154,6 +155,7 @@ public class AcceptChannel extends CommonBase { public static AcceptChannel constructor_read(byte[] ser) { long ret = bindings.AcceptChannel_read(ser); AcceptChannel ret_hu_conv = new AcceptChannel(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/AnnouncementSignatures.java b/src/main/java/org/ldk/structs/AnnouncementSignatures.java index 5bc4dfae..23de5a0f 100644 --- a/src/main/java/org/ldk/structs/AnnouncementSignatures.java +++ b/src/main/java/org/ldk/structs/AnnouncementSignatures.java @@ -17,6 +17,7 @@ public class AnnouncementSignatures extends CommonBase { public AnnouncementSignatures clone() { long ret = bindings.AnnouncementSignatures_clone(this.ptr); AnnouncementSignatures ret_hu_conv = new AnnouncementSignatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -59,6 +60,7 @@ public class AnnouncementSignatures extends CommonBase { public static AnnouncementSignatures constructor_new(byte[] channel_id_arg, long short_channel_id_arg, byte[] node_signature_arg, byte[] bitcoin_signature_arg) { long ret = bindings.AnnouncementSignatures_new(channel_id_arg, short_channel_id_arg, node_signature_arg, bitcoin_signature_arg); AnnouncementSignatures ret_hu_conv = new AnnouncementSignatures(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -70,6 +72,7 @@ public class AnnouncementSignatures extends CommonBase { public static AnnouncementSignatures constructor_read(byte[] ser) { long ret = bindings.AnnouncementSignatures_read(ser); AnnouncementSignatures ret_hu_conv = new AnnouncementSignatures(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/BuiltCommitmentTransaction.java b/src/main/java/org/ldk/structs/BuiltCommitmentTransaction.java index 97e5481b..5626c66d 100644 --- a/src/main/java/org/ldk/structs/BuiltCommitmentTransaction.java +++ b/src/main/java/org/ldk/structs/BuiltCommitmentTransaction.java @@ -17,6 +17,7 @@ public class BuiltCommitmentTransaction extends CommonBase { public BuiltCommitmentTransaction clone() { long ret = bindings.BuiltCommitmentTransaction_clone(this.ptr); BuiltCommitmentTransaction ret_hu_conv = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class BuiltCommitmentTransaction extends CommonBase { public static BuiltCommitmentTransaction constructor_new(byte[] transaction_arg, byte[] txid_arg) { long ret = bindings.BuiltCommitmentTransaction_new(transaction_arg, txid_arg); BuiltCommitmentTransaction ret_hu_conv = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -52,6 +54,7 @@ public class BuiltCommitmentTransaction extends CommonBase { public static BuiltCommitmentTransaction constructor_read(byte[] ser) { long ret = bindings.BuiltCommitmentTransaction_read(ser); BuiltCommitmentTransaction ret_hu_conv = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChainMonitor.java b/src/main/java/org/ldk/structs/ChainMonitor.java index 9864acda..951ca5df 100644 --- a/src/main/java/org/ldk/structs/ChainMonitor.java +++ b/src/main/java/org/ldk/structs/ChainMonitor.java @@ -26,6 +26,7 @@ public class ChainMonitor extends CommonBase { public static ChainMonitor constructor_new(Filter chain_source, BroadcasterInterface broadcaster, Logger logger, FeeEstimator feeest, Persist persister) { long ret = bindings.ChainMonitor_new(chain_source == null ? 0 : chain_source.ptr, broadcaster == null ? 0 : broadcaster.ptr, logger == null ? 0 : logger.ptr, feeest == null ? 0 : feeest.ptr, persister == null ? 0 : persister.ptr); ChainMonitor ret_hu_conv = new ChainMonitor(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chain_source); ret_hu_conv.ptrs_to.add(broadcaster); ret_hu_conv.ptrs_to.add(logger); diff --git a/src/main/java/org/ldk/structs/ChannelAnnouncement.java b/src/main/java/org/ldk/structs/ChannelAnnouncement.java index 995ca9ae..a49a163b 100644 --- a/src/main/java/org/ldk/structs/ChannelAnnouncement.java +++ b/src/main/java/org/ldk/structs/ChannelAnnouncement.java @@ -17,6 +17,7 @@ public class ChannelAnnouncement extends CommonBase { public ChannelAnnouncement clone() { long ret = bindings.ChannelAnnouncement_clone(this.ptr); ChannelAnnouncement ret_hu_conv = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -59,6 +60,7 @@ public class ChannelAnnouncement extends CommonBase { public UnsignedChannelAnnouncement get_contents() { long ret = bindings.ChannelAnnouncement_get_contents(this.ptr); UnsignedChannelAnnouncement ret_hu_conv = new UnsignedChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -70,6 +72,7 @@ public class ChannelAnnouncement extends CommonBase { public static ChannelAnnouncement constructor_new(byte[] node_signature_1_arg, byte[] node_signature_2_arg, byte[] bitcoin_signature_1_arg, byte[] bitcoin_signature_2_arg, UnsignedChannelAnnouncement contents_arg) { long ret = bindings.ChannelAnnouncement_new(node_signature_1_arg, node_signature_2_arg, bitcoin_signature_1_arg, bitcoin_signature_2_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1); ChannelAnnouncement ret_hu_conv = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(contents_arg); return ret_hu_conv; } @@ -82,6 +85,7 @@ public class ChannelAnnouncement extends CommonBase { public static ChannelAnnouncement constructor_read(byte[] ser) { long ret = bindings.ChannelAnnouncement_read(ser); ChannelAnnouncement ret_hu_conv = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelConfig.java b/src/main/java/org/ldk/structs/ChannelConfig.java index 9cc8ff3f..869ca572 100644 --- a/src/main/java/org/ldk/structs/ChannelConfig.java +++ b/src/main/java/org/ldk/structs/ChannelConfig.java @@ -17,6 +17,7 @@ public class ChannelConfig extends CommonBase { public ChannelConfig clone() { long ret = bindings.ChannelConfig_clone(this.ptr); ChannelConfig ret_hu_conv = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,12 +51,14 @@ public class ChannelConfig extends CommonBase { public static ChannelConfig constructor_new(int fee_proportional_millionths_arg, boolean announced_channel_arg, boolean commit_upfront_shutdown_pubkey_arg) { long ret = bindings.ChannelConfig_new(fee_proportional_millionths_arg, announced_channel_arg, commit_upfront_shutdown_pubkey_arg); ChannelConfig ret_hu_conv = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static ChannelConfig constructor_default() { long ret = bindings.ChannelConfig_default(); ChannelConfig ret_hu_conv = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -67,6 +70,7 @@ public class ChannelConfig extends CommonBase { public static ChannelConfig constructor_read(byte[] ser) { long ret = bindings.ChannelConfig_read(ser); ChannelConfig ret_hu_conv = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelDetails.java b/src/main/java/org/ldk/structs/ChannelDetails.java index 09221b0d..4c690d2d 100644 --- a/src/main/java/org/ldk/structs/ChannelDetails.java +++ b/src/main/java/org/ldk/structs/ChannelDetails.java @@ -17,6 +17,7 @@ public class ChannelDetails extends CommonBase { public ChannelDetails clone() { long ret = bindings.ChannelDetails_clone(this.ptr); ChannelDetails ret_hu_conv = new ChannelDetails(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,12 +42,21 @@ public class ChannelDetails extends CommonBase { public InitFeatures get_counterparty_features() { long ret = bindings.ChannelDetails_get_counterparty_features(this.ptr); InitFeatures ret_hu_conv = new InitFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_counterparty_features(InitFeatures val) { bindings.ChannelDetails_set_counterparty_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public long get_channel_value_satoshis() { diff --git a/src/main/java/org/ldk/structs/ChannelHandshakeConfig.java b/src/main/java/org/ldk/structs/ChannelHandshakeConfig.java index 850eff7e..a07f2e2a 100644 --- a/src/main/java/org/ldk/structs/ChannelHandshakeConfig.java +++ b/src/main/java/org/ldk/structs/ChannelHandshakeConfig.java @@ -17,6 +17,7 @@ public class ChannelHandshakeConfig extends CommonBase { public ChannelHandshakeConfig clone() { long ret = bindings.ChannelHandshakeConfig_clone(this.ptr); ChannelHandshakeConfig ret_hu_conv = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,12 +51,14 @@ public class ChannelHandshakeConfig extends CommonBase { public static ChannelHandshakeConfig constructor_new(int minimum_depth_arg, short our_to_self_delay_arg, long our_htlc_minimum_msat_arg) { long ret = bindings.ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg); ChannelHandshakeConfig ret_hu_conv = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static ChannelHandshakeConfig constructor_default() { long ret = bindings.ChannelHandshakeConfig_default(); ChannelHandshakeConfig ret_hu_conv = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelHandshakeLimits.java b/src/main/java/org/ldk/structs/ChannelHandshakeLimits.java index a9408524..e108446e 100644 --- a/src/main/java/org/ldk/structs/ChannelHandshakeLimits.java +++ b/src/main/java/org/ldk/structs/ChannelHandshakeLimits.java @@ -17,6 +17,7 @@ public class ChannelHandshakeLimits extends CommonBase { public ChannelHandshakeLimits clone() { long ret = bindings.ChannelHandshakeLimits_clone(this.ptr); ChannelHandshakeLimits ret_hu_conv = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -113,12 +114,14 @@ public class ChannelHandshakeLimits extends CommonBase { public static ChannelHandshakeLimits constructor_new(long min_funding_satoshis_arg, long max_htlc_minimum_msat_arg, long min_max_htlc_value_in_flight_msat_arg, long max_channel_reserve_satoshis_arg, short min_max_accepted_htlcs_arg, long min_dust_limit_satoshis_arg, long max_dust_limit_satoshis_arg, int max_minimum_depth_arg, boolean force_announced_channel_preference_arg, short their_to_self_delay_arg) { long ret = bindings.ChannelHandshakeLimits_new(min_funding_satoshis_arg, max_htlc_minimum_msat_arg, min_max_htlc_value_in_flight_msat_arg, max_channel_reserve_satoshis_arg, min_max_accepted_htlcs_arg, min_dust_limit_satoshis_arg, max_dust_limit_satoshis_arg, max_minimum_depth_arg, force_announced_channel_preference_arg, their_to_self_delay_arg); ChannelHandshakeLimits ret_hu_conv = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static ChannelHandshakeLimits constructor_default() { long ret = bindings.ChannelHandshakeLimits_default(); ChannelHandshakeLimits ret_hu_conv = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelInfo.java b/src/main/java/org/ldk/structs/ChannelInfo.java index fdcba395..8c9e5727 100644 --- a/src/main/java/org/ldk/structs/ChannelInfo.java +++ b/src/main/java/org/ldk/structs/ChannelInfo.java @@ -17,12 +17,21 @@ public class ChannelInfo extends CommonBase { public ChannelFeatures get_features() { long ret = bindings.ChannelInfo_get_features(this.ptr); ChannelFeatures ret_hu_conv = new ChannelFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(ChannelFeatures val) { bindings.ChannelInfo_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public byte[] get_node_one() { @@ -37,6 +46,7 @@ public class ChannelInfo extends CommonBase { public DirectionalChannelInfo get_one_to_two() { long ret = bindings.ChannelInfo_get_one_to_two(this.ptr); DirectionalChannelInfo ret_hu_conv = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -57,6 +67,7 @@ public class ChannelInfo extends CommonBase { public DirectionalChannelInfo get_two_to_one() { long ret = bindings.ChannelInfo_get_two_to_one(this.ptr); DirectionalChannelInfo ret_hu_conv = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -68,6 +79,7 @@ public class ChannelInfo extends CommonBase { public ChannelAnnouncement get_announcement_message() { long ret = bindings.ChannelInfo_get_announcement_message(this.ptr); ChannelAnnouncement ret_hu_conv = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -84,6 +96,7 @@ public class ChannelInfo extends CommonBase { public static ChannelInfo constructor_read(byte[] ser) { long ret = bindings.ChannelInfo_read(ser); ChannelInfo ret_hu_conv = new ChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelKeys.java b/src/main/java/org/ldk/structs/ChannelKeys.java index b4b9b87b..dbad7616 100644 --- a/src/main/java/org/ldk/structs/ChannelKeys.java +++ b/src/main/java/org/ldk/structs/ChannelKeys.java @@ -25,8 +25,7 @@ public class ChannelKeys extends CommonBase { byte[] release_commitment_secret(long idx); TwoTuple key_derivation_params(); Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(CommitmentTransaction commitment_tx); - Result_SignatureNoneZ sign_holder_commitment(HolderCommitmentTransaction commitment_tx); - Result_CVec_SignatureZNoneZ sign_holder_commitment_htlc_transactions(HolderCommitmentTransaction commitment_tx); + Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx); Result_SignatureNoneZ sign_justice_transaction(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc); Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc); Result_SignatureNoneZ sign_closing_transaction(byte[] closing_tx); @@ -57,15 +56,9 @@ public class ChannelKeys extends CommonBase { long result = ret != null ? ret.ptr : 0; return result; } - @Override public long sign_holder_commitment(long commitment_tx) { + @Override public long sign_holder_commitment_and_htlcs(long commitment_tx) { HolderCommitmentTransaction commitment_tx_hu_conv = new HolderCommitmentTransaction(null, commitment_tx); - Result_SignatureNoneZ ret = arg.sign_holder_commitment(commitment_tx_hu_conv); - long result = ret != null ? ret.ptr : 0; - return result; - } - @Override public long sign_holder_commitment_htlc_transactions(long commitment_tx) { - HolderCommitmentTransaction commitment_tx_hu_conv = new HolderCommitmentTransaction(null, commitment_tx); - Result_CVec_SignatureZNoneZ ret = arg.sign_holder_commitment_htlc_transactions(commitment_tx_hu_conv); + Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv); long result = ret != null ? ret.ptr : 0; return result; } @@ -128,16 +121,9 @@ public class ChannelKeys extends CommonBase { return ret_hu_conv; } - public Result_SignatureNoneZ sign_holder_commitment(HolderCommitmentTransaction commitment_tx) { - long ret = bindings.ChannelKeys_sign_holder_commitment(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1); - Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret); - this.ptrs_to.add(commitment_tx); - return ret_hu_conv; - } - - public Result_CVec_SignatureZNoneZ sign_holder_commitment_htlc_transactions(HolderCommitmentTransaction commitment_tx) { - long ret = bindings.ChannelKeys_sign_holder_commitment_htlc_transactions(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1); - Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret); + public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx) { + long ret = bindings.ChannelKeys_sign_holder_commitment_and_htlcs(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1); + Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret); this.ptrs_to.add(commitment_tx); return ret_hu_conv; } @@ -182,6 +168,7 @@ public class ChannelKeys extends CommonBase { public ChannelPublicKeys get_pubkeys() { long ret = bindings.ChannelKeys_get_pubkeys(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelManager.java b/src/main/java/org/ldk/structs/ChannelManager.java index 4f22bd22..b89636f6 100644 --- a/src/main/java/org/ldk/structs/ChannelManager.java +++ b/src/main/java/org/ldk/structs/ChannelManager.java @@ -17,6 +17,7 @@ public class ChannelManager extends CommonBase { public static ChannelManager constructor_new(LDKNetwork network, FeeEstimator fee_est, Watch chain_monitor, BroadcasterInterface tx_broadcaster, Logger logger, KeysInterface keys_manager, UserConfig config, long current_blockchain_height) { long ret = bindings.ChannelManager_new(network, fee_est == null ? 0 : fee_est.ptr, chain_monitor == null ? 0 : chain_monitor.ptr, tx_broadcaster == null ? 0 : tx_broadcaster.ptr, logger == null ? 0 : logger.ptr, keys_manager == null ? 0 : keys_manager.ptr, config == null ? 0 : config.ptr & ~1, current_blockchain_height); ChannelManager ret_hu_conv = new ChannelManager(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(fee_est); ret_hu_conv.ptrs_to.add(chain_monitor); ret_hu_conv.ptrs_to.add(tx_broadcaster); @@ -39,6 +40,7 @@ public class ChannelManager extends CommonBase { for (int q = 0; q < ret.length; q++) { long arr_conv_16 = ret[q]; ChannelDetails arr_conv_16_hu_conv = new ChannelDetails(null, arr_conv_16); + arr_conv_16_hu_conv.ptrs_to.add(this); arr_conv_16_arr[q] = arr_conv_16_hu_conv; } return arr_conv_16_arr; @@ -50,6 +52,7 @@ public class ChannelManager extends CommonBase { for (int q = 0; q < ret.length; q++) { long arr_conv_16 = ret[q]; ChannelDetails arr_conv_16_hu_conv = new ChannelDetails(null, arr_conv_16); + arr_conv_16_hu_conv.ptrs_to.add(this); arr_conv_16_arr[q] = arr_conv_16_hu_conv; } return arr_conv_16_arr; @@ -61,8 +64,10 @@ public class ChannelManager extends CommonBase { return ret_hu_conv; } - public void force_close_channel(byte[] channel_id) { - bindings.ChannelManager_force_close_channel(this.ptr, channel_id); + public Result_NoneAPIErrorZ force_close_channel(byte[] channel_id) { + long ret = bindings.ChannelManager_force_close_channel(this.ptr, channel_id); + Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret); + return ret_hu_conv; } public void force_close_all_channels() { diff --git a/src/main/java/org/ldk/structs/ChannelManagerReadArgs.java b/src/main/java/org/ldk/structs/ChannelManagerReadArgs.java index 2affeefe..96b198da 100644 --- a/src/main/java/org/ldk/structs/ChannelManagerReadArgs.java +++ b/src/main/java/org/ldk/structs/ChannelManagerReadArgs.java @@ -77,6 +77,7 @@ public class ChannelManagerReadArgs extends CommonBase { public UserConfig get_default_config() { long ret = bindings.ChannelManagerReadArgs_get_default_config(this.ptr); UserConfig ret_hu_conv = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -88,6 +89,7 @@ public class ChannelManagerReadArgs extends CommonBase { public static ChannelManagerReadArgs constructor_new(KeysInterface keys_manager, FeeEstimator fee_estimator, Watch chain_monitor, BroadcasterInterface tx_broadcaster, Logger logger, UserConfig default_config, ChannelMonitor[] channel_monitors) { long ret = bindings.ChannelManagerReadArgs_new(keys_manager == null ? 0 : keys_manager.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, chain_monitor == null ? 0 : chain_monitor.ptr, tx_broadcaster == null ? 0 : tx_broadcaster.ptr, logger == null ? 0 : logger.ptr, default_config == null ? 0 : default_config.ptr & ~1, Arrays.stream(channel_monitors).mapToLong(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray()); ChannelManagerReadArgs ret_hu_conv = new ChannelManagerReadArgs(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(keys_manager); ret_hu_conv.ptrs_to.add(fee_estimator); ret_hu_conv.ptrs_to.add(chain_monitor); diff --git a/src/main/java/org/ldk/structs/ChannelMessageHandler.java b/src/main/java/org/ldk/structs/ChannelMessageHandler.java index ac0e308e..06013385 100644 --- a/src/main/java/org/ldk/structs/ChannelMessageHandler.java +++ b/src/main/java/org/ldk/structs/ChannelMessageHandler.java @@ -47,11 +47,13 @@ public class ChannelMessageHandler extends CommonBase { impl_holder.held = new ChannelMessageHandler(new bindings.LDKChannelMessageHandler() { @Override public void handle_open_channel(byte[] their_node_id, long their_features, long msg) { InitFeatures their_features_hu_conv = new InitFeatures(null, their_features); + their_features_hu_conv.ptrs_to.add(this); OpenChannel msg_hu_conv = new OpenChannel(null, msg); arg.handle_open_channel(their_node_id, their_features_hu_conv, msg_hu_conv); } @Override public void handle_accept_channel(byte[] their_node_id, long their_features, long msg) { InitFeatures their_features_hu_conv = new InitFeatures(null, their_features); + their_features_hu_conv.ptrs_to.add(this); AcceptChannel msg_hu_conv = new AcceptChannel(null, msg); arg.handle_accept_channel(their_node_id, their_features_hu_conv, msg_hu_conv); } @@ -128,12 +130,28 @@ public class ChannelMessageHandler extends CommonBase { public void handle_open_channel(byte[] their_node_id, InitFeatures their_features, OpenChannel msg) { bindings.ChannelMessageHandler_handle_open_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1); this.ptrs_to.add(their_features); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, their_features is reset to null and is now a dummy object. + their_features.ptr = 0; this.ptrs_to.add(msg); } public void handle_accept_channel(byte[] their_node_id, InitFeatures their_features, AcceptChannel msg) { bindings.ChannelMessageHandler_handle_accept_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1); this.ptrs_to.add(their_features); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, their_features is reset to null and is now a dummy object. + their_features.ptr = 0; this.ptrs_to.add(msg); } diff --git a/src/main/java/org/ldk/structs/ChannelMonitor.java b/src/main/java/org/ldk/structs/ChannelMonitor.java index 22011661..2b102329 100644 --- a/src/main/java/org/ldk/structs/ChannelMonitor.java +++ b/src/main/java/org/ldk/structs/ChannelMonitor.java @@ -14,6 +14,13 @@ public class ChannelMonitor extends CommonBase { if (ptr != 0) { bindings.ChannelMonitor_free(ptr); } } + public ChannelMonitor clone() { + long ret = bindings.ChannelMonitor_clone(this.ptr); + ChannelMonitor ret_hu_conv = new ChannelMonitor(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public byte[] write() { byte[] ret = bindings.ChannelMonitor_write(this.ptr); return ret; @@ -37,7 +44,8 @@ public class ChannelMonitor extends CommonBase { public TwoTuple get_funding_txo() { long ret = bindings.ChannelMonitor_get_funding_txo(this.ptr); long ret_a = bindings.LDKC2Tuple_OutPointScriptZ_get_a(ret); - OutPoint ret_a_hu_conv = new OutPoint(null, ret_a);; + OutPoint ret_a_hu_conv = new OutPoint(null, ret_a); + ret_a_hu_conv.ptrs_to.add(this);; byte[] ret_b = bindings.LDKC2Tuple_OutPointScriptZ_get_b(ret); TwoTuple ret_conv = new TwoTuple(ret_a_hu_conv, ret_b); return ret_conv; @@ -49,6 +57,7 @@ public class ChannelMonitor extends CommonBase { for (int o = 0; o < ret.length; o++) { long arr_conv_14 = ret[o]; MonitorEvent arr_conv_14_hu_conv = new MonitorEvent(null, arr_conv_14); + arr_conv_14_hu_conv.ptrs_to.add(this); arr_conv_14_arr[o] = arr_conv_14_hu_conv; } return arr_conv_14_arr; diff --git a/src/main/java/org/ldk/structs/ChannelMonitorUpdate.java b/src/main/java/org/ldk/structs/ChannelMonitorUpdate.java index 92d58952..739965b1 100644 --- a/src/main/java/org/ldk/structs/ChannelMonitorUpdate.java +++ b/src/main/java/org/ldk/structs/ChannelMonitorUpdate.java @@ -17,6 +17,7 @@ public class ChannelMonitorUpdate extends CommonBase { public ChannelMonitorUpdate clone() { long ret = bindings.ChannelMonitorUpdate_clone(this.ptr); ChannelMonitorUpdate ret_hu_conv = new ChannelMonitorUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelPublicKeys.java b/src/main/java/org/ldk/structs/ChannelPublicKeys.java index 29c745d8..91102b53 100644 --- a/src/main/java/org/ldk/structs/ChannelPublicKeys.java +++ b/src/main/java/org/ldk/structs/ChannelPublicKeys.java @@ -17,6 +17,7 @@ public class ChannelPublicKeys extends CommonBase { public ChannelPublicKeys clone() { long ret = bindings.ChannelPublicKeys_clone(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -68,6 +69,7 @@ public class ChannelPublicKeys extends CommonBase { public static ChannelPublicKeys constructor_new(byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg) { long ret = bindings.ChannelPublicKeys_new(funding_pubkey_arg, revocation_basepoint_arg, payment_point_arg, delayed_payment_basepoint_arg, htlc_basepoint_arg); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -79,6 +81,7 @@ public class ChannelPublicKeys extends CommonBase { public static ChannelPublicKeys constructor_read(byte[] ser) { long ret = bindings.ChannelPublicKeys_read(ser); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelReestablish.java b/src/main/java/org/ldk/structs/ChannelReestablish.java index ad00ac0e..9df48729 100644 --- a/src/main/java/org/ldk/structs/ChannelReestablish.java +++ b/src/main/java/org/ldk/structs/ChannelReestablish.java @@ -17,6 +17,7 @@ public class ChannelReestablish extends CommonBase { public ChannelReestablish clone() { long ret = bindings.ChannelReestablish_clone(this.ptr); ChannelReestablish ret_hu_conv = new ChannelReestablish(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelTransactionParameters.java b/src/main/java/org/ldk/structs/ChannelTransactionParameters.java index 9a8899d0..1740e54c 100644 --- a/src/main/java/org/ldk/structs/ChannelTransactionParameters.java +++ b/src/main/java/org/ldk/structs/ChannelTransactionParameters.java @@ -17,12 +17,14 @@ public class ChannelTransactionParameters extends CommonBase { public ChannelTransactionParameters clone() { long ret = bindings.ChannelTransactionParameters_clone(this.ptr); ChannelTransactionParameters ret_hu_conv = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelPublicKeys get_holder_pubkeys() { long ret = bindings.ChannelTransactionParameters_get_holder_pubkeys(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -52,6 +54,7 @@ public class ChannelTransactionParameters extends CommonBase { public CounterpartyChannelTransactionParameters get_counterparty_parameters() { long ret = bindings.ChannelTransactionParameters_get_counterparty_parameters(this.ptr); CounterpartyChannelTransactionParameters ret_hu_conv = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -63,6 +66,7 @@ public class ChannelTransactionParameters extends CommonBase { public OutPoint get_funding_outpoint() { long ret = bindings.ChannelTransactionParameters_get_funding_outpoint(this.ptr); OutPoint ret_hu_conv = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -74,6 +78,7 @@ public class ChannelTransactionParameters extends CommonBase { public static ChannelTransactionParameters constructor_new(ChannelPublicKeys holder_pubkeys_arg, short holder_selected_contest_delay_arg, boolean is_outbound_from_holder_arg, CounterpartyChannelTransactionParameters counterparty_parameters_arg, OutPoint funding_outpoint_arg) { long ret = bindings.ChannelTransactionParameters_new(holder_pubkeys_arg == null ? 0 : holder_pubkeys_arg.ptr & ~1, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg == null ? 0 : counterparty_parameters_arg.ptr & ~1, funding_outpoint_arg == null ? 0 : funding_outpoint_arg.ptr & ~1); ChannelTransactionParameters ret_hu_conv = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(holder_pubkeys_arg); ret_hu_conv.ptrs_to.add(counterparty_parameters_arg); ret_hu_conv.ptrs_to.add(funding_outpoint_arg); @@ -88,12 +93,14 @@ public class ChannelTransactionParameters extends CommonBase { public DirectedChannelTransactionParameters as_holder_broadcastable() { long ret = bindings.ChannelTransactionParameters_as_holder_broadcastable(this.ptr); DirectedChannelTransactionParameters ret_hu_conv = new DirectedChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public DirectedChannelTransactionParameters as_counterparty_broadcastable() { long ret = bindings.ChannelTransactionParameters_as_counterparty_broadcastable(this.ptr); DirectedChannelTransactionParameters ret_hu_conv = new DirectedChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -105,6 +112,7 @@ public class ChannelTransactionParameters extends CommonBase { public static ChannelTransactionParameters constructor_read(byte[] ser) { long ret = bindings.ChannelTransactionParameters_read(ser); ChannelTransactionParameters ret_hu_conv = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ChannelUpdate.java b/src/main/java/org/ldk/structs/ChannelUpdate.java index 8baf1cee..cb055f37 100644 --- a/src/main/java/org/ldk/structs/ChannelUpdate.java +++ b/src/main/java/org/ldk/structs/ChannelUpdate.java @@ -17,6 +17,7 @@ public class ChannelUpdate extends CommonBase { public ChannelUpdate clone() { long ret = bindings.ChannelUpdate_clone(this.ptr); ChannelUpdate ret_hu_conv = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,6 +33,7 @@ public class ChannelUpdate extends CommonBase { public UnsignedChannelUpdate get_contents() { long ret = bindings.ChannelUpdate_get_contents(this.ptr); UnsignedChannelUpdate ret_hu_conv = new UnsignedChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -43,6 +45,7 @@ public class ChannelUpdate extends CommonBase { public static ChannelUpdate constructor_new(byte[] signature_arg, UnsignedChannelUpdate contents_arg) { long ret = bindings.ChannelUpdate_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1); ChannelUpdate ret_hu_conv = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(contents_arg); return ret_hu_conv; } @@ -55,6 +58,7 @@ public class ChannelUpdate extends CommonBase { public static ChannelUpdate constructor_read(byte[] ser) { long ret = bindings.ChannelUpdate_read(ser); ChannelUpdate ret_hu_conv = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ClosingSigned.java b/src/main/java/org/ldk/structs/ClosingSigned.java index 0a78ac03..fbd0f330 100644 --- a/src/main/java/org/ldk/structs/ClosingSigned.java +++ b/src/main/java/org/ldk/structs/ClosingSigned.java @@ -17,6 +17,7 @@ public class ClosingSigned extends CommonBase { public ClosingSigned clone() { long ret = bindings.ClosingSigned_clone(this.ptr); ClosingSigned ret_hu_conv = new ClosingSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,6 +51,7 @@ public class ClosingSigned extends CommonBase { public static ClosingSigned constructor_new(byte[] channel_id_arg, long fee_satoshis_arg, byte[] signature_arg) { long ret = bindings.ClosingSigned_new(channel_id_arg, fee_satoshis_arg, signature_arg); ClosingSigned ret_hu_conv = new ClosingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -61,6 +63,7 @@ public class ClosingSigned extends CommonBase { public static ClosingSigned constructor_read(byte[] ser) { long ret = bindings.ClosingSigned_read(ser); ClosingSigned ret_hu_conv = new ClosingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/CommitmentSigned.java b/src/main/java/org/ldk/structs/CommitmentSigned.java index ba515767..e6a76bcf 100644 --- a/src/main/java/org/ldk/structs/CommitmentSigned.java +++ b/src/main/java/org/ldk/structs/CommitmentSigned.java @@ -17,6 +17,7 @@ public class CommitmentSigned extends CommonBase { public CommitmentSigned clone() { long ret = bindings.CommitmentSigned_clone(this.ptr); CommitmentSigned ret_hu_conv = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ public class CommitmentSigned extends CommonBase { public static CommitmentSigned constructor_new(byte[] channel_id_arg, byte[] signature_arg, byte[][] htlc_signatures_arg) { long ret = bindings.CommitmentSigned_new(channel_id_arg, signature_arg, htlc_signatures_arg); CommitmentSigned ret_hu_conv = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -56,6 +58,7 @@ public class CommitmentSigned extends CommonBase { public static CommitmentSigned constructor_read(byte[] ser) { long ret = bindings.CommitmentSigned_read(ser); CommitmentSigned ret_hu_conv = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/CommitmentTransaction.java b/src/main/java/org/ldk/structs/CommitmentTransaction.java index 31fd014f..bb38be53 100644 --- a/src/main/java/org/ldk/structs/CommitmentTransaction.java +++ b/src/main/java/org/ldk/structs/CommitmentTransaction.java @@ -17,6 +17,7 @@ public class CommitmentTransaction extends CommonBase { public CommitmentTransaction clone() { long ret = bindings.CommitmentTransaction_clone(this.ptr); CommitmentTransaction ret_hu_conv = new CommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -28,6 +29,7 @@ public class CommitmentTransaction extends CommonBase { public static CommitmentTransaction constructor_read(byte[] ser) { long ret = bindings.CommitmentTransaction_read(ser); CommitmentTransaction ret_hu_conv = new CommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -54,6 +56,7 @@ public class CommitmentTransaction extends CommonBase { public TrustedCommitmentTransaction trust() { long ret = bindings.CommitmentTransaction_trust(this.ptr); TrustedCommitmentTransaction ret_hu_conv = new TrustedCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/CommitmentUpdate.java b/src/main/java/org/ldk/structs/CommitmentUpdate.java index 4b9d1535..c53eb4eb 100644 --- a/src/main/java/org/ldk/structs/CommitmentUpdate.java +++ b/src/main/java/org/ldk/structs/CommitmentUpdate.java @@ -17,6 +17,7 @@ public class CommitmentUpdate extends CommonBase { public CommitmentUpdate clone() { long ret = bindings.CommitmentUpdate_clone(this.ptr); CommitmentUpdate ret_hu_conv = new CommitmentUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -43,6 +44,7 @@ public class CommitmentUpdate extends CommonBase { public UpdateFee get_update_fee() { long ret = bindings.CommitmentUpdate_get_update_fee(this.ptr); UpdateFee ret_hu_conv = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,6 +56,7 @@ public class CommitmentUpdate extends CommonBase { public CommitmentSigned get_commitment_signed() { long ret = bindings.CommitmentUpdate_get_commitment_signed(this.ptr); CommitmentSigned ret_hu_conv = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -65,6 +68,7 @@ public class CommitmentUpdate extends CommonBase { public static CommitmentUpdate constructor_new(UpdateAddHTLC[] update_add_htlcs_arg, UpdateFulfillHTLC[] update_fulfill_htlcs_arg, UpdateFailHTLC[] update_fail_htlcs_arg, UpdateFailMalformedHTLC[] update_fail_malformed_htlcs_arg, UpdateFee update_fee_arg, CommitmentSigned commitment_signed_arg) { long ret = bindings.CommitmentUpdate_new(Arrays.stream(update_add_htlcs_arg).mapToLong(arr_conv_15 -> arr_conv_15 == null ? 0 : arr_conv_15.ptr & ~1).toArray(), Arrays.stream(update_fulfill_htlcs_arg).mapToLong(arr_conv_19 -> arr_conv_19 == null ? 0 : arr_conv_19.ptr & ~1).toArray(), Arrays.stream(update_fail_htlcs_arg).mapToLong(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray(), Arrays.stream(update_fail_malformed_htlcs_arg).mapToLong(arr_conv_25 -> arr_conv_25 == null ? 0 : arr_conv_25.ptr & ~1).toArray(), update_fee_arg == null ? 0 : update_fee_arg.ptr & ~1, commitment_signed_arg == null ? 0 : commitment_signed_arg.ptr & ~1); CommitmentUpdate ret_hu_conv = new CommitmentUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); /* TODO 2 UpdateAddHTLC */; /* TODO 2 UpdateFulfillHTLC */; /* TODO 2 UpdateFailHTLC */; diff --git a/src/main/java/org/ldk/structs/CommonBase.java b/src/main/java/org/ldk/structs/CommonBase.java index 42971b3f..acff6661 100644 --- a/src/main/java/org/ldk/structs/CommonBase.java +++ b/src/main/java/org/ldk/structs/CommonBase.java @@ -1,7 +1,7 @@ package org.ldk.structs; import java.util.LinkedList; class CommonBase { - final long ptr; + long ptr; LinkedList ptrs_to = new LinkedList(); protected CommonBase(long ptr) { this.ptr = ptr; } public long _test_only_get_ptr() { return this.ptr; } diff --git a/src/main/java/org/ldk/structs/CounterpartyChannelTransactionParameters.java b/src/main/java/org/ldk/structs/CounterpartyChannelTransactionParameters.java index 49d27132..5cabe932 100644 --- a/src/main/java/org/ldk/structs/CounterpartyChannelTransactionParameters.java +++ b/src/main/java/org/ldk/structs/CounterpartyChannelTransactionParameters.java @@ -17,12 +17,14 @@ public class CounterpartyChannelTransactionParameters extends CommonBase { public CounterpartyChannelTransactionParameters clone() { long ret = bindings.CounterpartyChannelTransactionParameters_clone(this.ptr); CounterpartyChannelTransactionParameters ret_hu_conv = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelPublicKeys get_pubkeys() { long ret = bindings.CounterpartyChannelTransactionParameters_get_pubkeys(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -43,6 +45,7 @@ public class CounterpartyChannelTransactionParameters extends CommonBase { public static CounterpartyChannelTransactionParameters constructor_new(ChannelPublicKeys pubkeys_arg, short selected_contest_delay_arg) { long ret = bindings.CounterpartyChannelTransactionParameters_new(pubkeys_arg == null ? 0 : pubkeys_arg.ptr & ~1, selected_contest_delay_arg); CounterpartyChannelTransactionParameters ret_hu_conv = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(pubkeys_arg); return ret_hu_conv; } @@ -55,6 +58,7 @@ public class CounterpartyChannelTransactionParameters extends CommonBase { public static CounterpartyChannelTransactionParameters constructor_read(byte[] ser) { long ret = bindings.CounterpartyChannelTransactionParameters_read(ser); CounterpartyChannelTransactionParameters ret_hu_conv = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/DataLossProtect.java b/src/main/java/org/ldk/structs/DataLossProtect.java index 7fecd217..63db5eef 100644 --- a/src/main/java/org/ldk/structs/DataLossProtect.java +++ b/src/main/java/org/ldk/structs/DataLossProtect.java @@ -17,6 +17,7 @@ public class DataLossProtect extends CommonBase { public DataLossProtect clone() { long ret = bindings.DataLossProtect_clone(this.ptr); DataLossProtect ret_hu_conv = new DataLossProtect(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class DataLossProtect extends CommonBase { public static DataLossProtect constructor_new(byte[] your_last_per_commitment_secret_arg, byte[] my_current_per_commitment_point_arg) { long ret = bindings.DataLossProtect_new(your_last_per_commitment_secret_arg, my_current_per_commitment_point_arg); DataLossProtect ret_hu_conv = new DataLossProtect(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/DecodeError.java b/src/main/java/org/ldk/structs/DecodeError.java index e8cec470..d39265af 100644 --- a/src/main/java/org/ldk/structs/DecodeError.java +++ b/src/main/java/org/ldk/structs/DecodeError.java @@ -14,4 +14,11 @@ public class DecodeError extends CommonBase { if (ptr != 0) { bindings.DecodeError_free(ptr); } } + public DecodeError clone() { + long ret = bindings.DecodeError_clone(this.ptr); + DecodeError ret_hu_conv = new DecodeError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + } diff --git a/src/main/java/org/ldk/structs/DirectedChannelTransactionParameters.java b/src/main/java/org/ldk/structs/DirectedChannelTransactionParameters.java index 4d2e621d..2358c615 100644 --- a/src/main/java/org/ldk/structs/DirectedChannelTransactionParameters.java +++ b/src/main/java/org/ldk/structs/DirectedChannelTransactionParameters.java @@ -17,12 +17,14 @@ public class DirectedChannelTransactionParameters extends CommonBase { public ChannelPublicKeys broadcaster_pubkeys() { long ret = bindings.DirectedChannelTransactionParameters_broadcaster_pubkeys(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelPublicKeys countersignatory_pubkeys() { long ret = bindings.DirectedChannelTransactionParameters_countersignatory_pubkeys(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -39,6 +41,7 @@ public class DirectedChannelTransactionParameters extends CommonBase { public OutPoint funding_outpoint() { long ret = bindings.DirectedChannelTransactionParameters_funding_outpoint(this.ptr); OutPoint ret_hu_conv = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/DirectionalChannelInfo.java b/src/main/java/org/ldk/structs/DirectionalChannelInfo.java index eaef8705..82ec5091 100644 --- a/src/main/java/org/ldk/structs/DirectionalChannelInfo.java +++ b/src/main/java/org/ldk/structs/DirectionalChannelInfo.java @@ -14,6 +14,13 @@ public class DirectionalChannelInfo extends CommonBase { if (ptr != 0) { bindings.DirectionalChannelInfo_free(ptr); } } + public DirectionalChannelInfo clone() { + long ret = bindings.DirectionalChannelInfo_clone(this.ptr); + DirectionalChannelInfo ret_hu_conv = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public int get_last_update() { int ret = bindings.DirectionalChannelInfo_get_last_update(this.ptr); return ret; @@ -53,6 +60,7 @@ public class DirectionalChannelInfo extends CommonBase { public RoutingFees get_fees() { long ret = bindings.DirectionalChannelInfo_get_fees(this.ptr); RoutingFees ret_hu_conv = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -64,6 +72,7 @@ public class DirectionalChannelInfo extends CommonBase { public ChannelUpdate get_last_update_message() { long ret = bindings.DirectionalChannelInfo_get_last_update_message(this.ptr); ChannelUpdate ret_hu_conv = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -80,6 +89,7 @@ public class DirectionalChannelInfo extends CommonBase { public static DirectionalChannelInfo constructor_read(byte[] ser) { long ret = bindings.DirectionalChannelInfo_read(ser); DirectionalChannelInfo ret_hu_conv = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ErrorAction.java b/src/main/java/org/ldk/structs/ErrorAction.java index efe34dd5..f5d1f0fb 100644 --- a/src/main/java/org/ldk/structs/ErrorAction.java +++ b/src/main/java/org/ldk/structs/ErrorAction.java @@ -33,6 +33,7 @@ public class ErrorAction extends CommonBase { super(null, ptr); long msg = obj.msg; ErrorMessage msg_hu_conv = new ErrorMessage(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -47,6 +48,7 @@ public class ErrorAction extends CommonBase { super(null, ptr); long msg = obj.msg; ErrorMessage msg_hu_conv = new ErrorMessage(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } diff --git a/src/main/java/org/ldk/structs/ErrorMessage.java b/src/main/java/org/ldk/structs/ErrorMessage.java index c6758fdf..a90b207b 100644 --- a/src/main/java/org/ldk/structs/ErrorMessage.java +++ b/src/main/java/org/ldk/structs/ErrorMessage.java @@ -17,6 +17,7 @@ public class ErrorMessage extends CommonBase { public ErrorMessage clone() { long ret = bindings.ErrorMessage_clone(this.ptr); ErrorMessage ret_hu_conv = new ErrorMessage(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class ErrorMessage extends CommonBase { public static ErrorMessage constructor_new(byte[] channel_id_arg, byte[] data_arg) { long ret = bindings.ErrorMessage_new(channel_id_arg, data_arg); ErrorMessage ret_hu_conv = new ErrorMessage(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/Event.java b/src/main/java/org/ldk/structs/Event.java index bbba62d7..83ffeb55 100644 --- a/src/main/java/org/ldk/structs/Event.java +++ b/src/main/java/org/ldk/structs/Event.java @@ -59,6 +59,7 @@ public class Event extends CommonBase { super(null, ptr); long funding_txo = obj.funding_txo; OutPoint funding_txo_hu_conv = new OutPoint(null, funding_txo); + funding_txo_hu_conv.ptrs_to.add(this); this.funding_txo = funding_txo_hu_conv; this.user_channel_id = obj.user_channel_id; } diff --git a/src/main/java/org/ldk/structs/FundingCreated.java b/src/main/java/org/ldk/structs/FundingCreated.java index 42be833b..7687561d 100644 --- a/src/main/java/org/ldk/structs/FundingCreated.java +++ b/src/main/java/org/ldk/structs/FundingCreated.java @@ -17,6 +17,7 @@ public class FundingCreated extends CommonBase { public FundingCreated clone() { long ret = bindings.FundingCreated_clone(this.ptr); FundingCreated ret_hu_conv = new FundingCreated(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -59,6 +60,7 @@ public class FundingCreated extends CommonBase { public static FundingCreated constructor_new(byte[] temporary_channel_id_arg, byte[] funding_txid_arg, short funding_output_index_arg, byte[] signature_arg) { long ret = bindings.FundingCreated_new(temporary_channel_id_arg, funding_txid_arg, funding_output_index_arg, signature_arg); FundingCreated ret_hu_conv = new FundingCreated(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -70,6 +72,7 @@ public class FundingCreated extends CommonBase { public static FundingCreated constructor_read(byte[] ser) { long ret = bindings.FundingCreated_read(ser); FundingCreated ret_hu_conv = new FundingCreated(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/FundingLocked.java b/src/main/java/org/ldk/structs/FundingLocked.java index c46b3183..4439697f 100644 --- a/src/main/java/org/ldk/structs/FundingLocked.java +++ b/src/main/java/org/ldk/structs/FundingLocked.java @@ -17,6 +17,7 @@ public class FundingLocked extends CommonBase { public FundingLocked clone() { long ret = bindings.FundingLocked_clone(this.ptr); FundingLocked ret_hu_conv = new FundingLocked(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class FundingLocked extends CommonBase { public static FundingLocked constructor_new(byte[] channel_id_arg, byte[] next_per_commitment_point_arg) { long ret = bindings.FundingLocked_new(channel_id_arg, next_per_commitment_point_arg); FundingLocked ret_hu_conv = new FundingLocked(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -52,6 +54,7 @@ public class FundingLocked extends CommonBase { public static FundingLocked constructor_read(byte[] ser) { long ret = bindings.FundingLocked_read(ser); FundingLocked ret_hu_conv = new FundingLocked(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/FundingSigned.java b/src/main/java/org/ldk/structs/FundingSigned.java index 899d17d8..d8566044 100644 --- a/src/main/java/org/ldk/structs/FundingSigned.java +++ b/src/main/java/org/ldk/structs/FundingSigned.java @@ -17,6 +17,7 @@ public class FundingSigned extends CommonBase { public FundingSigned clone() { long ret = bindings.FundingSigned_clone(this.ptr); FundingSigned ret_hu_conv = new FundingSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class FundingSigned extends CommonBase { public static FundingSigned constructor_new(byte[] channel_id_arg, byte[] signature_arg) { long ret = bindings.FundingSigned_new(channel_id_arg, signature_arg); FundingSigned ret_hu_conv = new FundingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -52,6 +54,7 @@ public class FundingSigned extends CommonBase { public static FundingSigned constructor_read(byte[] ser) { long ret = bindings.FundingSigned_read(ser); FundingSigned ret_hu_conv = new FundingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/GossipTimestampFilter.java b/src/main/java/org/ldk/structs/GossipTimestampFilter.java index 6443e409..55458e73 100644 --- a/src/main/java/org/ldk/structs/GossipTimestampFilter.java +++ b/src/main/java/org/ldk/structs/GossipTimestampFilter.java @@ -17,6 +17,7 @@ public class GossipTimestampFilter extends CommonBase { public GossipTimestampFilter clone() { long ret = bindings.GossipTimestampFilter_clone(this.ptr); GossipTimestampFilter ret_hu_conv = new GossipTimestampFilter(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,6 +51,7 @@ public class GossipTimestampFilter extends CommonBase { public static GossipTimestampFilter constructor_new(byte[] chain_hash_arg, int first_timestamp_arg, int timestamp_range_arg) { long ret = bindings.GossipTimestampFilter_new(chain_hash_arg, first_timestamp_arg, timestamp_range_arg); GossipTimestampFilter ret_hu_conv = new GossipTimestampFilter(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/HTLCFailChannelUpdate.java b/src/main/java/org/ldk/structs/HTLCFailChannelUpdate.java index 92a5c018..a9352937 100644 --- a/src/main/java/org/ldk/structs/HTLCFailChannelUpdate.java +++ b/src/main/java/org/ldk/structs/HTLCFailChannelUpdate.java @@ -33,6 +33,7 @@ public class HTLCFailChannelUpdate extends CommonBase { super(null, ptr); long msg = obj.msg; ChannelUpdate msg_hu_conv = new ChannelUpdate(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } diff --git a/src/main/java/org/ldk/structs/HTLCOutputInCommitment.java b/src/main/java/org/ldk/structs/HTLCOutputInCommitment.java index 1697e301..daa1c42d 100644 --- a/src/main/java/org/ldk/structs/HTLCOutputInCommitment.java +++ b/src/main/java/org/ldk/structs/HTLCOutputInCommitment.java @@ -17,6 +17,7 @@ public class HTLCOutputInCommitment extends CommonBase { public HTLCOutputInCommitment clone() { long ret = bindings.HTLCOutputInCommitment_clone(this.ptr); HTLCOutputInCommitment ret_hu_conv = new HTLCOutputInCommitment(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -64,6 +65,7 @@ public class HTLCOutputInCommitment extends CommonBase { public static HTLCOutputInCommitment constructor_read(byte[] ser) { long ret = bindings.HTLCOutputInCommitment_read(ser); HTLCOutputInCommitment ret_hu_conv = new HTLCOutputInCommitment(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/HTLCUpdate.java b/src/main/java/org/ldk/structs/HTLCUpdate.java index 7313e867..f860f5dd 100644 --- a/src/main/java/org/ldk/structs/HTLCUpdate.java +++ b/src/main/java/org/ldk/structs/HTLCUpdate.java @@ -17,6 +17,7 @@ public class HTLCUpdate extends CommonBase { public HTLCUpdate clone() { long ret = bindings.HTLCUpdate_clone(this.ptr); HTLCUpdate ret_hu_conv = new HTLCUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -28,6 +29,7 @@ public class HTLCUpdate extends CommonBase { public static HTLCUpdate constructor_read(byte[] ser) { long ret = bindings.HTLCUpdate_read(ser); HTLCUpdate ret_hu_conv = new HTLCUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/HolderCommitmentTransaction.java b/src/main/java/org/ldk/structs/HolderCommitmentTransaction.java index fd95bef2..584c9b76 100644 --- a/src/main/java/org/ldk/structs/HolderCommitmentTransaction.java +++ b/src/main/java/org/ldk/structs/HolderCommitmentTransaction.java @@ -17,6 +17,7 @@ public class HolderCommitmentTransaction extends CommonBase { public HolderCommitmentTransaction clone() { long ret = bindings.HolderCommitmentTransaction_clone(this.ptr); HolderCommitmentTransaction ret_hu_conv = new HolderCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,12 +42,14 @@ public class HolderCommitmentTransaction extends CommonBase { public static HolderCommitmentTransaction constructor_read(byte[] ser) { long ret = bindings.HolderCommitmentTransaction_read(ser); HolderCommitmentTransaction ret_hu_conv = new HolderCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static HolderCommitmentTransaction constructor_new(CommitmentTransaction commitment_tx, byte[] counterparty_sig, byte[][] counterparty_htlc_sigs, byte[] holder_funding_key, byte[] counterparty_funding_key) { long ret = bindings.HolderCommitmentTransaction_new(commitment_tx == null ? 0 : commitment_tx.ptr & ~1, counterparty_sig, counterparty_htlc_sigs, holder_funding_key, counterparty_funding_key); HolderCommitmentTransaction ret_hu_conv = new HolderCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(commitment_tx); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/InMemoryChannelKeys.java b/src/main/java/org/ldk/structs/InMemoryChannelKeys.java index 01e2d484..45345a40 100644 --- a/src/main/java/org/ldk/structs/InMemoryChannelKeys.java +++ b/src/main/java/org/ldk/structs/InMemoryChannelKeys.java @@ -17,6 +17,7 @@ public class InMemoryChannelKeys extends CommonBase { public InMemoryChannelKeys clone() { long ret = bindings.InMemoryChannelKeys_clone(this.ptr); InMemoryChannelKeys ret_hu_conv = new InMemoryChannelKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -77,12 +78,14 @@ public class InMemoryChannelKeys extends CommonBase { public static InMemoryChannelKeys constructor_new(byte[] funding_key, byte[] revocation_base_key, byte[] payment_key, byte[] delayed_payment_base_key, byte[] htlc_base_key, byte[] commitment_seed, long channel_value_satoshis, TwoTuple key_derivation_params) { long ret = bindings.InMemoryChannelKeys_new(funding_key, revocation_base_key, payment_key, delayed_payment_base_key, htlc_base_key, commitment_seed, channel_value_satoshis, bindings.C2Tuple_u64u64Z_new(key_derivation_params.a, key_derivation_params.b)); InMemoryChannelKeys ret_hu_conv = new InMemoryChannelKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public ChannelPublicKeys counterparty_pubkeys() { long ret = bindings.InMemoryChannelKeys_counterparty_pubkeys(this.ptr); ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -104,12 +107,14 @@ public class InMemoryChannelKeys extends CommonBase { public OutPoint funding_outpoint() { long ret = bindings.InMemoryChannelKeys_funding_outpoint(this.ptr); OutPoint ret_hu_conv = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelTransactionParameters get_channel_parameters() { long ret = bindings.InMemoryChannelKeys_get_channel_parameters(this.ptr); ChannelTransactionParameters ret_hu_conv = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/Init.java b/src/main/java/org/ldk/structs/Init.java index 7da0c6c1..cadc4f31 100644 --- a/src/main/java/org/ldk/structs/Init.java +++ b/src/main/java/org/ldk/structs/Init.java @@ -17,6 +17,7 @@ public class Init extends CommonBase { public Init clone() { long ret = bindings.Init_clone(this.ptr); Init ret_hu_conv = new Init(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/KeysManager.java b/src/main/java/org/ldk/structs/KeysManager.java index a208bfea..16a4a873 100644 --- a/src/main/java/org/ldk/structs/KeysManager.java +++ b/src/main/java/org/ldk/structs/KeysManager.java @@ -17,12 +17,14 @@ public class KeysManager extends CommonBase { public static KeysManager constructor_new(byte[] seed, LDKNetwork network, long starting_time_secs, int starting_time_nanos) { long ret = bindings.KeysManager_new(seed, network, starting_time_secs, starting_time_nanos); KeysManager ret_hu_conv = new KeysManager(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public InMemoryChannelKeys derive_channel_keys(long channel_value_satoshis, long params_1, long params_2) { long ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, params_1, params_2); InMemoryChannelKeys ret_hu_conv = new InMemoryChannelKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/LightningError.java b/src/main/java/org/ldk/structs/LightningError.java index d5490f2b..b1793b32 100644 --- a/src/main/java/org/ldk/structs/LightningError.java +++ b/src/main/java/org/ldk/structs/LightningError.java @@ -14,6 +14,13 @@ public class LightningError extends CommonBase { if (ptr != 0) { bindings.LightningError_free(ptr); } } + public LightningError clone() { + long ret = bindings.LightningError_clone(this.ptr); + LightningError ret_hu_conv = new LightningError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public String get_err() { String ret = bindings.LightningError_get_err(this.ptr); return ret; @@ -37,6 +44,7 @@ public class LightningError extends CommonBase { public static LightningError constructor_new(byte[] err_arg, ErrorAction action_arg) { long ret = bindings.LightningError_new(err_arg, action_arg.ptr); LightningError ret_hu_conv = new LightningError(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/LockedNetworkGraph.java b/src/main/java/org/ldk/structs/LockedNetworkGraph.java index 2313ec9a..62647c26 100644 --- a/src/main/java/org/ldk/structs/LockedNetworkGraph.java +++ b/src/main/java/org/ldk/structs/LockedNetworkGraph.java @@ -15,6 +15,7 @@ public class LockedNetworkGraph extends CommonBase implements AutoCloseable { public NetworkGraph graph() { long ret = bindings.LockedNetworkGraph_graph(this.ptr); NetworkGraph ret_hu_conv = new NetworkGraph(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/MessageHandler.java b/src/main/java/org/ldk/structs/MessageHandler.java index 09578c89..389e2a88 100644 --- a/src/main/java/org/ldk/structs/MessageHandler.java +++ b/src/main/java/org/ldk/structs/MessageHandler.java @@ -41,6 +41,7 @@ public class MessageHandler extends CommonBase { public static MessageHandler constructor_new(ChannelMessageHandler chan_handler_arg, RoutingMessageHandler route_handler_arg) { long ret = bindings.MessageHandler_new(chan_handler_arg == null ? 0 : chan_handler_arg.ptr, route_handler_arg == null ? 0 : route_handler_arg.ptr); MessageHandler ret_hu_conv = new MessageHandler(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chan_handler_arg); ret_hu_conv.ptrs_to.add(route_handler_arg); return ret_hu_conv; diff --git a/src/main/java/org/ldk/structs/MessageSendEvent.java b/src/main/java/org/ldk/structs/MessageSendEvent.java index 30b7548f..32be00ea 100644 --- a/src/main/java/org/ldk/structs/MessageSendEvent.java +++ b/src/main/java/org/ldk/structs/MessageSendEvent.java @@ -80,6 +80,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; AcceptChannel msg_hu_conv = new AcceptChannel(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -91,6 +92,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; OpenChannel msg_hu_conv = new OpenChannel(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -102,6 +104,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; FundingCreated msg_hu_conv = new FundingCreated(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -113,6 +116,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; FundingSigned msg_hu_conv = new FundingSigned(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -124,6 +128,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; FundingLocked msg_hu_conv = new FundingLocked(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -135,6 +140,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; AnnouncementSignatures msg_hu_conv = new AnnouncementSignatures(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -146,6 +152,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long updates = obj.updates; CommitmentUpdate updates_hu_conv = new CommitmentUpdate(null, updates); + updates_hu_conv.ptrs_to.add(this); this.updates = updates_hu_conv; } } @@ -157,6 +164,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; RevokeAndACK msg_hu_conv = new RevokeAndACK(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -168,6 +176,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; ClosingSigned msg_hu_conv = new ClosingSigned(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -179,6 +188,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; Shutdown msg_hu_conv = new Shutdown(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -190,6 +200,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; ChannelReestablish msg_hu_conv = new ChannelReestablish(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -200,9 +211,11 @@ public class MessageSendEvent extends CommonBase { super(null, ptr); long msg = obj.msg; ChannelAnnouncement msg_hu_conv = new ChannelAnnouncement(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; long update_msg = obj.update_msg; ChannelUpdate update_msg_hu_conv = new ChannelUpdate(null, update_msg); + update_msg_hu_conv.ptrs_to.add(this); this.update_msg = update_msg_hu_conv; } } @@ -212,6 +225,7 @@ public class MessageSendEvent extends CommonBase { super(null, ptr); long msg = obj.msg; NodeAnnouncement msg_hu_conv = new NodeAnnouncement(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -221,6 +235,7 @@ public class MessageSendEvent extends CommonBase { super(null, ptr); long msg = obj.msg; ChannelUpdate msg_hu_conv = new ChannelUpdate(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -254,6 +269,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; QueryChannelRange msg_hu_conv = new QueryChannelRange(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -265,6 +281,7 @@ public class MessageSendEvent extends CommonBase { this.node_id = obj.node_id; long msg = obj.msg; QueryShortChannelIds msg_hu_conv = new QueryShortChannelIds(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } diff --git a/src/main/java/org/ldk/structs/MonitorEvent.java b/src/main/java/org/ldk/structs/MonitorEvent.java index bbe27e36..68106397 100644 --- a/src/main/java/org/ldk/structs/MonitorEvent.java +++ b/src/main/java/org/ldk/structs/MonitorEvent.java @@ -17,6 +17,7 @@ public class MonitorEvent extends CommonBase { public MonitorEvent clone() { long ret = bindings.MonitorEvent_clone(this.ptr); MonitorEvent ret_hu_conv = new MonitorEvent(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/MonitorUpdateError.java b/src/main/java/org/ldk/structs/MonitorUpdateError.java index b6589a9f..419e0160 100644 --- a/src/main/java/org/ldk/structs/MonitorUpdateError.java +++ b/src/main/java/org/ldk/structs/MonitorUpdateError.java @@ -14,4 +14,11 @@ public class MonitorUpdateError extends CommonBase { if (ptr != 0) { bindings.MonitorUpdateError_free(ptr); } } + public MonitorUpdateError clone() { + long ret = bindings.MonitorUpdateError_clone(this.ptr); + MonitorUpdateError ret_hu_conv = new MonitorUpdateError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + } diff --git a/src/main/java/org/ldk/structs/NetGraphMsgHandler.java b/src/main/java/org/ldk/structs/NetGraphMsgHandler.java index 3fba8fa4..2351063e 100644 --- a/src/main/java/org/ldk/structs/NetGraphMsgHandler.java +++ b/src/main/java/org/ldk/structs/NetGraphMsgHandler.java @@ -17,6 +17,7 @@ public class NetGraphMsgHandler extends CommonBase { public static NetGraphMsgHandler constructor_new(byte[] genesis_hash, Access chain_access, Logger logger) { long ret = bindings.NetGraphMsgHandler_new(genesis_hash, chain_access == null ? 0 : chain_access.ptr, logger == null ? 0 : logger.ptr); NetGraphMsgHandler ret_hu_conv = new NetGraphMsgHandler(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chain_access); ret_hu_conv.ptrs_to.add(logger); return ret_hu_conv; @@ -25,6 +26,7 @@ public class NetGraphMsgHandler extends CommonBase { public static NetGraphMsgHandler constructor_from_net_graph(Access chain_access, Logger logger, byte[] network_graph_genesis_hash) { long ret = bindings.NetGraphMsgHandler_from_net_graph(chain_access == null ? 0 : chain_access.ptr, logger == null ? 0 : logger.ptr, bindings.NetworkGraph_new(network_graph_genesis_hash)); NetGraphMsgHandler ret_hu_conv = new NetGraphMsgHandler(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chain_access); ret_hu_conv.ptrs_to.add(logger); return ret_hu_conv; @@ -33,6 +35,7 @@ public class NetGraphMsgHandler extends CommonBase { public LockedNetworkGraph read_locked_graph() { long ret = bindings.NetGraphMsgHandler_read_locked_graph(this.ptr); LockedNetworkGraph ret_hu_conv = new LockedNetworkGraph(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/NetworkGraph.java b/src/main/java/org/ldk/structs/NetworkGraph.java index 778e475b..9ed88b6d 100644 --- a/src/main/java/org/ldk/structs/NetworkGraph.java +++ b/src/main/java/org/ldk/structs/NetworkGraph.java @@ -28,6 +28,7 @@ public class NetworkGraph extends CommonBase { public static NetworkGraph constructor_new(byte[] genesis_hash) { long ret = bindings.NetworkGraph_new(genesis_hash); NetworkGraph ret_hu_conv = new NetworkGraph(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/NodeAnnouncement.java b/src/main/java/org/ldk/structs/NodeAnnouncement.java index 4a151d13..26cdd582 100644 --- a/src/main/java/org/ldk/structs/NodeAnnouncement.java +++ b/src/main/java/org/ldk/structs/NodeAnnouncement.java @@ -17,6 +17,7 @@ public class NodeAnnouncement extends CommonBase { public NodeAnnouncement clone() { long ret = bindings.NodeAnnouncement_clone(this.ptr); NodeAnnouncement ret_hu_conv = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,6 +33,7 @@ public class NodeAnnouncement extends CommonBase { public UnsignedNodeAnnouncement get_contents() { long ret = bindings.NodeAnnouncement_get_contents(this.ptr); UnsignedNodeAnnouncement ret_hu_conv = new UnsignedNodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -43,6 +45,7 @@ public class NodeAnnouncement extends CommonBase { public static NodeAnnouncement constructor_new(byte[] signature_arg, UnsignedNodeAnnouncement contents_arg) { long ret = bindings.NodeAnnouncement_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1); NodeAnnouncement ret_hu_conv = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(contents_arg); return ret_hu_conv; } @@ -55,6 +58,7 @@ public class NodeAnnouncement extends CommonBase { public static NodeAnnouncement constructor_read(byte[] ser) { long ret = bindings.NodeAnnouncement_read(ser); NodeAnnouncement ret_hu_conv = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/NodeAnnouncementInfo.java b/src/main/java/org/ldk/structs/NodeAnnouncementInfo.java index 0ce531e5..f59c055e 100644 --- a/src/main/java/org/ldk/structs/NodeAnnouncementInfo.java +++ b/src/main/java/org/ldk/structs/NodeAnnouncementInfo.java @@ -14,15 +14,31 @@ public class NodeAnnouncementInfo extends CommonBase { if (ptr != 0) { bindings.NodeAnnouncementInfo_free(ptr); } } + public NodeAnnouncementInfo clone() { + long ret = bindings.NodeAnnouncementInfo_clone(this.ptr); + NodeAnnouncementInfo ret_hu_conv = new NodeAnnouncementInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public NodeFeatures get_features() { long ret = bindings.NodeAnnouncementInfo_get_features(this.ptr); NodeFeatures ret_hu_conv = new NodeFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(NodeFeatures val) { bindings.NodeAnnouncementInfo_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public int get_last_update() { @@ -60,6 +76,7 @@ public class NodeAnnouncementInfo extends CommonBase { public NodeAnnouncement get_announcement_message() { long ret = bindings.NodeAnnouncementInfo_get_announcement_message(this.ptr); NodeAnnouncement ret_hu_conv = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -71,7 +88,16 @@ public class NodeAnnouncementInfo extends CommonBase { public static NodeAnnouncementInfo constructor_new(NodeFeatures features_arg, int last_update_arg, byte[] rgb_arg, byte[] alias_arg, NetAddress[] addresses_arg, NodeAnnouncement announcement_message_arg) { long ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr & ~1, last_update_arg, rgb_arg, alias_arg, Arrays.stream(addresses_arg).mapToLong(arr_conv_12 -> arr_conv_12.ptr).toArray(), announcement_message_arg == null ? 0 : announcement_message_arg.ptr & ~1); NodeAnnouncementInfo ret_hu_conv = new NodeAnnouncementInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(features_arg); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after ret_hu_conv call, features_arg is reset to null and is now a dummy object. + features_arg.ptr = 0; /* TODO 2 NetAddress */; ret_hu_conv.ptrs_to.add(announcement_message_arg); return ret_hu_conv; diff --git a/src/main/java/org/ldk/structs/NodeInfo.java b/src/main/java/org/ldk/structs/NodeInfo.java index 018d5bc4..ba19c79b 100644 --- a/src/main/java/org/ldk/structs/NodeInfo.java +++ b/src/main/java/org/ldk/structs/NodeInfo.java @@ -14,6 +14,13 @@ public class NodeInfo extends CommonBase { if (ptr != 0) { bindings.NodeInfo_free(ptr); } } + public NodeInfo clone() { + long ret = bindings.NodeInfo_clone(this.ptr); + NodeInfo ret_hu_conv = new NodeInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public void set_channels(long[] val) { bindings.NodeInfo_set_channels(this.ptr, val); } @@ -21,6 +28,7 @@ public class NodeInfo extends CommonBase { public RoutingFees get_lowest_inbound_channel_fees() { long ret = bindings.NodeInfo_get_lowest_inbound_channel_fees(this.ptr); RoutingFees ret_hu_conv = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,20 +40,21 @@ public class NodeInfo extends CommonBase { public NodeAnnouncementInfo get_announcement_info() { long ret = bindings.NodeInfo_get_announcement_info(this.ptr); NodeAnnouncementInfo ret_hu_conv = new NodeAnnouncementInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } - public void set_announcement_info(NodeFeatures val_features_arg, int val_last_update_arg, byte[] val_rgb_arg, byte[] val_alias_arg, NetAddress[] val_addresses_arg, NodeAnnouncement val_announcement_message_arg) { - bindings.NodeInfo_set_announcement_info(this.ptr, bindings.NodeAnnouncementInfo_new(val_features_arg == null ? 0 : val_features_arg.ptr & ~1, val_last_update_arg, val_rgb_arg, val_alias_arg, Arrays.stream(val_addresses_arg).mapToLong(arr_conv_12 -> arr_conv_12.ptr).toArray(), val_announcement_message_arg == null ? 0 : val_announcement_message_arg.ptr & ~1)); + public void set_announcement_info(NodeAnnouncementInfo val) { + bindings.NodeInfo_set_announcement_info(this.ptr, val == null ? 0 : val.ptr & ~1); + this.ptrs_to.add(val); } - public static NodeInfo constructor_new(long[] channels_arg, RoutingFees lowest_inbound_channel_fees_arg, NodeFeatures announcement_info_arg_features_arg, int announcement_info_arg_last_update_arg, byte[] announcement_info_arg_rgb_arg, byte[] announcement_info_arg_alias_arg, NetAddress[] announcement_info_arg_addresses_arg, NodeAnnouncement announcement_info_arg_announcement_message_arg) { - long ret = bindings.NodeInfo_new(channels_arg, lowest_inbound_channel_fees_arg == null ? 0 : lowest_inbound_channel_fees_arg.ptr & ~1, bindings.NodeAnnouncementInfo_new(announcement_info_arg_features_arg == null ? 0 : announcement_info_arg_features_arg.ptr & ~1, announcement_info_arg_last_update_arg, announcement_info_arg_rgb_arg, announcement_info_arg_alias_arg, Arrays.stream(announcement_info_arg_addresses_arg).mapToLong(arr_conv_12 -> arr_conv_12.ptr).toArray(), announcement_info_arg_announcement_message_arg == null ? 0 : announcement_info_arg_announcement_message_arg.ptr & ~1)); + public static NodeInfo constructor_new(long[] channels_arg, RoutingFees lowest_inbound_channel_fees_arg, NodeAnnouncementInfo announcement_info_arg) { + long ret = bindings.NodeInfo_new(channels_arg, lowest_inbound_channel_fees_arg == null ? 0 : lowest_inbound_channel_fees_arg.ptr & ~1, announcement_info_arg == null ? 0 : announcement_info_arg.ptr & ~1); NodeInfo ret_hu_conv = new NodeInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(lowest_inbound_channel_fees_arg); - ret_hu_conv.ptrs_to.add(announcement_info_arg_features_arg); - /* TODO 2 NetAddress */; - ret_hu_conv.ptrs_to.add(announcement_info_arg_announcement_message_arg); + ret_hu_conv.ptrs_to.add(announcement_info_arg); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/OpenChannel.java b/src/main/java/org/ldk/structs/OpenChannel.java index 0a99f832..2de4e031 100644 --- a/src/main/java/org/ldk/structs/OpenChannel.java +++ b/src/main/java/org/ldk/structs/OpenChannel.java @@ -17,6 +17,7 @@ public class OpenChannel extends CommonBase { public OpenChannel clone() { long ret = bindings.OpenChannel_clone(this.ptr); OpenChannel ret_hu_conv = new OpenChannel(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -190,6 +191,7 @@ public class OpenChannel extends CommonBase { public static OpenChannel constructor_read(byte[] ser) { long ret = bindings.OpenChannel_read(ser); OpenChannel ret_hu_conv = new OpenChannel(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/OutPoint.java b/src/main/java/org/ldk/structs/OutPoint.java index 605d2160..edc0a7f3 100644 --- a/src/main/java/org/ldk/structs/OutPoint.java +++ b/src/main/java/org/ldk/structs/OutPoint.java @@ -17,6 +17,7 @@ public class OutPoint extends CommonBase { public OutPoint clone() { long ret = bindings.OutPoint_clone(this.ptr); OutPoint ret_hu_conv = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class OutPoint extends CommonBase { public static OutPoint constructor_new(byte[] txid_arg, short index_arg) { long ret = bindings.OutPoint_new(txid_arg, index_arg); OutPoint ret_hu_conv = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -57,6 +59,7 @@ public class OutPoint extends CommonBase { public static OutPoint constructor_read(byte[] ser) { long ret = bindings.OutPoint_read(ser); OutPoint ret_hu_conv = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/PaymentSendFailure.java b/src/main/java/org/ldk/structs/PaymentSendFailure.java index 7b7f3632..48fd7a02 100644 --- a/src/main/java/org/ldk/structs/PaymentSendFailure.java +++ b/src/main/java/org/ldk/structs/PaymentSendFailure.java @@ -14,4 +14,11 @@ public class PaymentSendFailure extends CommonBase { if (ptr != 0) { bindings.PaymentSendFailure_free(ptr); } } + public PaymentSendFailure clone() { + long ret = bindings.PaymentSendFailure_clone(this.ptr); + PaymentSendFailure ret_hu_conv = new PaymentSendFailure(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + } diff --git a/src/main/java/org/ldk/structs/PeerHandleError.java b/src/main/java/org/ldk/structs/PeerHandleError.java index 1b7b3987..b2473028 100644 --- a/src/main/java/org/ldk/structs/PeerHandleError.java +++ b/src/main/java/org/ldk/structs/PeerHandleError.java @@ -14,6 +14,13 @@ public class PeerHandleError extends CommonBase { if (ptr != 0) { bindings.PeerHandleError_free(ptr); } } + public PeerHandleError clone() { + long ret = bindings.PeerHandleError_clone(this.ptr); + PeerHandleError ret_hu_conv = new PeerHandleError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public boolean get_no_connection_possible() { boolean ret = bindings.PeerHandleError_get_no_connection_possible(this.ptr); return ret; @@ -26,6 +33,7 @@ public class PeerHandleError extends CommonBase { public static PeerHandleError constructor_new(boolean no_connection_possible_arg) { long ret = bindings.PeerHandleError_new(no_connection_possible_arg); PeerHandleError ret_hu_conv = new PeerHandleError(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/PeerManager.java b/src/main/java/org/ldk/structs/PeerManager.java index 22fe597f..1daf97ae 100644 --- a/src/main/java/org/ldk/structs/PeerManager.java +++ b/src/main/java/org/ldk/structs/PeerManager.java @@ -17,6 +17,7 @@ public class PeerManager extends CommonBase { public static PeerManager constructor_new(ChannelMessageHandler message_handler_chan_handler_arg, RoutingMessageHandler message_handler_route_handler_arg, byte[] our_node_secret, byte[] ephemeral_random_data, Logger logger) { long ret = bindings.PeerManager_new(bindings.MessageHandler_new(message_handler_chan_handler_arg == null ? 0 : message_handler_chan_handler_arg.ptr, message_handler_route_handler_arg == null ? 0 : message_handler_route_handler_arg.ptr), our_node_secret, ephemeral_random_data, logger == null ? 0 : logger.ptr); PeerManager ret_hu_conv = new PeerManager(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(message_handler_chan_handler_arg); ret_hu_conv.ptrs_to.add(message_handler_route_handler_arg); ret_hu_conv.ptrs_to.add(logger); diff --git a/src/main/java/org/ldk/structs/Persist.java b/src/main/java/org/ldk/structs/Persist.java index 754f3911..3e318d81 100644 --- a/src/main/java/org/ldk/structs/Persist.java +++ b/src/main/java/org/ldk/structs/Persist.java @@ -29,6 +29,7 @@ public class Persist extends CommonBase { impl_holder.held = new Persist(new bindings.LDKPersist() { @Override public long persist_new_channel(long id, long data) { OutPoint id_hu_conv = new OutPoint(null, id); + id_hu_conv.ptrs_to.add(this); ChannelMonitor data_hu_conv = new ChannelMonitor(null, data); Result_NoneChannelMonitorUpdateErrZ ret = arg.persist_new_channel(id_hu_conv, data_hu_conv); long result = ret != null ? ret.ptr : 0; @@ -36,6 +37,7 @@ public class Persist extends CommonBase { } @Override public long update_persisted_channel(long id, long update, long data) { OutPoint id_hu_conv = new OutPoint(null, id); + id_hu_conv.ptrs_to.add(this); ChannelMonitorUpdate update_hu_conv = new ChannelMonitorUpdate(null, update); ChannelMonitor data_hu_conv = new ChannelMonitor(null, data); Result_NoneChannelMonitorUpdateErrZ ret = arg.update_persisted_channel(id_hu_conv, update_hu_conv, data_hu_conv); diff --git a/src/main/java/org/ldk/structs/Ping.java b/src/main/java/org/ldk/structs/Ping.java index 3630dab0..72815630 100644 --- a/src/main/java/org/ldk/structs/Ping.java +++ b/src/main/java/org/ldk/structs/Ping.java @@ -17,6 +17,7 @@ public class Ping extends CommonBase { public Ping clone() { long ret = bindings.Ping_clone(this.ptr); Ping ret_hu_conv = new Ping(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class Ping extends CommonBase { public static Ping constructor_new(short ponglen_arg, short byteslen_arg) { long ret = bindings.Ping_new(ponglen_arg, byteslen_arg); Ping ret_hu_conv = new Ping(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/Pong.java b/src/main/java/org/ldk/structs/Pong.java index 854ba669..ef636e28 100644 --- a/src/main/java/org/ldk/structs/Pong.java +++ b/src/main/java/org/ldk/structs/Pong.java @@ -17,6 +17,7 @@ public class Pong extends CommonBase { public Pong clone() { long ret = bindings.Pong_clone(this.ptr); Pong ret_hu_conv = new Pong(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,6 +33,7 @@ public class Pong extends CommonBase { public static Pong constructor_new(short byteslen_arg) { long ret = bindings.Pong_new(byteslen_arg); Pong ret_hu_conv = new Pong(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/QueryChannelRange.java b/src/main/java/org/ldk/structs/QueryChannelRange.java index 53491db5..acacd053 100644 --- a/src/main/java/org/ldk/structs/QueryChannelRange.java +++ b/src/main/java/org/ldk/structs/QueryChannelRange.java @@ -17,6 +17,7 @@ public class QueryChannelRange extends CommonBase { public QueryChannelRange clone() { long ret = bindings.QueryChannelRange_clone(this.ptr); QueryChannelRange ret_hu_conv = new QueryChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,6 +51,7 @@ public class QueryChannelRange extends CommonBase { public static QueryChannelRange constructor_new(byte[] chain_hash_arg, int first_blocknum_arg, int number_of_blocks_arg) { long ret = bindings.QueryChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg); QueryChannelRange ret_hu_conv = new QueryChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/QueryShortChannelIds.java b/src/main/java/org/ldk/structs/QueryShortChannelIds.java index 1faab93a..2c9f57d7 100644 --- a/src/main/java/org/ldk/structs/QueryShortChannelIds.java +++ b/src/main/java/org/ldk/structs/QueryShortChannelIds.java @@ -17,6 +17,7 @@ public class QueryShortChannelIds extends CommonBase { public QueryShortChannelIds clone() { long ret = bindings.QueryShortChannelIds_clone(this.ptr); QueryShortChannelIds ret_hu_conv = new QueryShortChannelIds(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -36,6 +37,7 @@ public class QueryShortChannelIds extends CommonBase { public static QueryShortChannelIds constructor_new(byte[] chain_hash_arg, long[] short_channel_ids_arg) { long ret = bindings.QueryShortChannelIds_new(chain_hash_arg, short_channel_ids_arg); QueryShortChannelIds ret_hu_conv = new QueryShortChannelIds(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ReplyChannelRange.java b/src/main/java/org/ldk/structs/ReplyChannelRange.java index d49f6a47..ca7243da 100644 --- a/src/main/java/org/ldk/structs/ReplyChannelRange.java +++ b/src/main/java/org/ldk/structs/ReplyChannelRange.java @@ -17,6 +17,7 @@ public class ReplyChannelRange extends CommonBase { public ReplyChannelRange clone() { long ret = bindings.ReplyChannelRange_clone(this.ptr); ReplyChannelRange ret_hu_conv = new ReplyChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -63,6 +64,7 @@ public class ReplyChannelRange extends CommonBase { public static ReplyChannelRange constructor_new(byte[] chain_hash_arg, int first_blocknum_arg, int number_of_blocks_arg, boolean full_information_arg, long[] short_channel_ids_arg) { long ret = bindings.ReplyChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg, full_information_arg, short_channel_ids_arg); ReplyChannelRange ret_hu_conv = new ReplyChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/ReplyShortChannelIdsEnd.java b/src/main/java/org/ldk/structs/ReplyShortChannelIdsEnd.java index 224cc61b..a558d5c9 100644 --- a/src/main/java/org/ldk/structs/ReplyShortChannelIdsEnd.java +++ b/src/main/java/org/ldk/structs/ReplyShortChannelIdsEnd.java @@ -17,6 +17,7 @@ public class ReplyShortChannelIdsEnd extends CommonBase { public ReplyShortChannelIdsEnd clone() { long ret = bindings.ReplyShortChannelIdsEnd_clone(this.ptr); ReplyShortChannelIdsEnd ret_hu_conv = new ReplyShortChannelIdsEnd(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class ReplyShortChannelIdsEnd extends CommonBase { public static ReplyShortChannelIdsEnd constructor_new(byte[] chain_hash_arg, boolean full_information_arg) { long ret = bindings.ReplyShortChannelIdsEnd_new(chain_hash_arg, full_information_arg); ReplyShortChannelIdsEnd ret_hu_conv = new ReplyShortChannelIdsEnd(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java index fb1b5247..70127ff0 100644 --- a/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java @@ -26,12 +26,22 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB long res = bindings.LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(ptr); byte[] res_a = bindings.LDKC2Tuple_BlockHashChannelManagerZ_get_a(res); long res_b = bindings.LDKC2Tuple_BlockHashChannelManagerZ_get_b(res); - ChannelManager res_b_hu_conv = new ChannelManager(null, res_b);; + ChannelManager res_b_hu_conv = new ChannelManager(null, res_b); + res_b_hu_conv.ptrs_to.add(this);; TwoTuple res_conv = new TwoTuple(res_a, res_b_hu_conv); this.res = res_conv; } public Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK(TwoTuple res) { - this(null, bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelManagerZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1/*XXX: this.ptrs_to.add(res_b)*/))); + this(null, bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelManagerZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1))); + this.ptrs_to.add(res.b); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, res.b is reset to null and is now a dummy object. + res.b.ptr = 0; } } @@ -41,6 +51,7 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB super(_dummy, ptr); long err = bindings.LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java index fef8c632..a3e3d231 100644 --- a/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java @@ -26,12 +26,14 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB long res = bindings.LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(ptr); byte[] res_a = bindings.LDKC2Tuple_BlockHashChannelMonitorZ_get_a(res); long res_b = bindings.LDKC2Tuple_BlockHashChannelMonitorZ_get_b(res); - ChannelMonitor res_b_hu_conv = new ChannelMonitor(null, res_b);; + ChannelMonitor res_b_hu_conv = new ChannelMonitor(null, res_b); + res_b_hu_conv.ptrs_to.add(this);; TwoTuple res_conv = new TwoTuple(res_a, res_b_hu_conv); this.res = res_conv; } public Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK(TwoTuple res) { - this(null, bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelMonitorZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1/*XXX: this.ptrs_to.add(res_b)*/))); + this(null, bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelMonitorZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1))); + this.ptrs_to.add(res.b); } } @@ -41,6 +43,7 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB super(_dummy, ptr); long err = bindings.LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.java index 0a0cfeb7..3bc546ff 100644 --- a/src/main/java/org/ldk/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.java @@ -38,6 +38,7 @@ public class Result_CResult_NetAddressu8ZDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_CResult_NetAddressu8ZDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_CResult_NetAddressu8ZDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_CVec_u8ZPeerHandleErrorZ.java b/src/main/java/org/ldk/structs/Result_CVec_u8ZPeerHandleErrorZ.java index 3ef723e6..e47dcd46 100644 --- a/src/main/java/org/ldk/structs/Result_CVec_u8ZPeerHandleErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_CVec_u8ZPeerHandleErrorZ.java @@ -36,6 +36,7 @@ public class Result_CVec_u8ZPeerHandleErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_CVec_u8ZPeerHandleErrorZ_get_err(ptr); PeerHandleError err_hu_conv = new PeerHandleError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_CVec_u8ZPeerHandleErrorZ_Err(PeerHandleError err) { diff --git a/src/main/java/org/ldk/structs/Result_ChanKeySignerDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ChanKeySignerDecodeErrorZ.java index 1aa74eea..6b401df8 100644 --- a/src/main/java/org/ldk/structs/Result_ChanKeySignerDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_ChanKeySignerDecodeErrorZ.java @@ -40,6 +40,7 @@ public class Result_ChanKeySignerDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_ChanKeySignerDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ChanKeySignerDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateDecodeErrorZ.java index 0b1aa205..9e2211fb 100644 --- a/src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(ptr); ChannelMonitorUpdate res_hu_conv = new ChannelMonitorUpdate(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ChannelMonitorUpdateDecodeErrorZ_OK(ChannelMonitorUpdate res) { @@ -39,6 +40,7 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ChannelMonitorUpdateDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_ChannelReestablishDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ChannelReestablishDecodeErrorZ.java index e496269f..d13f6583 100644 --- a/src/main/java/org/ldk/structs/Result_ChannelReestablishDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_ChannelReestablishDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(ptr); ChannelReestablish res_hu_conv = new ChannelReestablish(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ChannelReestablishDecodeErrorZ_OK(ChannelReestablish res) { @@ -39,6 +40,7 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_ChannelReestablishDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ChannelReestablishDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_ErrorMessageDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ErrorMessageDecodeErrorZ.java index c6e2bda9..cd2383b4 100644 --- a/src/main/java/org/ldk/structs/Result_ErrorMessageDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_ErrorMessageDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_ErrorMessageDecodeErrorZ_get_ok(ptr); ErrorMessage res_hu_conv = new ErrorMessage(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ErrorMessageDecodeErrorZ_OK(ErrorMessage res) { @@ -39,6 +40,7 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_ErrorMessageDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ErrorMessageDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_GossipTimestampFilterDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_GossipTimestampFilterDecodeErrorZ.java index fe376e70..85b872b0 100644 --- a/src/main/java/org/ldk/structs/Result_GossipTimestampFilterDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_GossipTimestampFilterDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(ptr); GossipTimestampFilter res_hu_conv = new GossipTimestampFilter(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_GossipTimestampFilterDecodeErrorZ_OK(GossipTimestampFilter res) { @@ -39,6 +40,7 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_GossipTimestampFilterDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_GossipTimestampFilterDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_InMemoryChannelKeysDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_InMemoryChannelKeysDecodeErrorZ.java index ea33fa2c..a47ae762 100644 --- a/src/main/java/org/ldk/structs/Result_InMemoryChannelKeysDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_InMemoryChannelKeysDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_InMemoryChannelKeysDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_InMemoryChannelKeysDecodeErrorZ_get_ok(ptr); InMemoryChannelKeys res_hu_conv = new InMemoryChannelKeys(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_InMemoryChannelKeysDecodeErrorZ_OK(InMemoryChannelKeys res) { @@ -39,6 +40,7 @@ public class Result_InMemoryChannelKeysDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_InMemoryChannelKeysDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_InMemoryChannelKeysDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_InitDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_InitDecodeErrorZ.java index 8719e28c..d492d9a5 100644 --- a/src/main/java/org/ldk/structs/Result_InitDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_InitDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_InitDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_InitDecodeErrorZ_get_ok(ptr); Init res_hu_conv = new Init(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_InitDecodeErrorZ_OK(Init res) { @@ -39,6 +40,7 @@ public class Result_InitDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_InitDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_InitDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_NetworkGraphDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_NetworkGraphDecodeErrorZ.java index 2d3f603d..a475625d 100644 --- a/src/main/java/org/ldk/structs/Result_NetworkGraphDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_NetworkGraphDecodeErrorZ.java @@ -25,11 +25,20 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_NetworkGraphDecodeErrorZ_get_ok(ptr); NetworkGraph res_hu_conv = new NetworkGraph(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_NetworkGraphDecodeErrorZ_OK(NetworkGraph res) { this(null, bindings.CResult_NetworkGraphDecodeErrorZ_ok(res == null ? 0 : res.ptr & ~1)); this.ptrs_to.add(res); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, res is reset to null and is now a dummy object. + res.ptr = 0; } } @@ -39,6 +48,7 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NetworkGraphDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NetworkGraphDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_NodeAnnouncementInfoDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_NodeAnnouncementInfoDecodeErrorZ.java index 3de2c49d..ef954886 100644 --- a/src/main/java/org/ldk/structs/Result_NodeAnnouncementInfoDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_NodeAnnouncementInfoDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(ptr); NodeAnnouncementInfo res_hu_conv = new NodeAnnouncementInfo(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_NodeAnnouncementInfoDecodeErrorZ_OK(NodeAnnouncementInfo res) { @@ -39,6 +40,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NodeAnnouncementInfoDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_NodeInfoDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_NodeInfoDecodeErrorZ.java index 01d528e3..11e99111 100644 --- a/src/main/java/org/ldk/structs/Result_NodeInfoDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_NodeInfoDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_NodeInfoDecodeErrorZ_get_ok(ptr); NodeInfo res_hu_conv = new NodeInfo(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_NodeInfoDecodeErrorZ_OK(NodeInfo res) { @@ -39,6 +40,7 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NodeInfoDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NodeInfoDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_NoneLightningErrorZ.java b/src/main/java/org/ldk/structs/Result_NoneLightningErrorZ.java index 056bb41a..436be322 100644 --- a/src/main/java/org/ldk/structs/Result_NoneLightningErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_NoneLightningErrorZ.java @@ -34,6 +34,7 @@ public class Result_NoneLightningErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NoneLightningErrorZ_get_err(ptr); LightningError err_hu_conv = new LightningError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NoneLightningErrorZ_Err(LightningError err) { diff --git a/src/main/java/org/ldk/structs/Result_NoneMonitorUpdateErrorZ.java b/src/main/java/org/ldk/structs/Result_NoneMonitorUpdateErrorZ.java index 1a18d923..9ab9611c 100644 --- a/src/main/java/org/ldk/structs/Result_NoneMonitorUpdateErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_NoneMonitorUpdateErrorZ.java @@ -34,6 +34,7 @@ public class Result_NoneMonitorUpdateErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NoneMonitorUpdateErrorZ_get_err(ptr); MonitorUpdateError err_hu_conv = new MonitorUpdateError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NoneMonitorUpdateErrorZ_Err(MonitorUpdateError err) { diff --git a/src/main/java/org/ldk/structs/Result_NonePaymentSendFailureZ.java b/src/main/java/org/ldk/structs/Result_NonePaymentSendFailureZ.java index 8bb2b037..7b0f72bc 100644 --- a/src/main/java/org/ldk/structs/Result_NonePaymentSendFailureZ.java +++ b/src/main/java/org/ldk/structs/Result_NonePaymentSendFailureZ.java @@ -34,6 +34,7 @@ public class Result_NonePaymentSendFailureZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NonePaymentSendFailureZ_get_err(ptr); PaymentSendFailure err_hu_conv = new PaymentSendFailure(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NonePaymentSendFailureZ_Err(PaymentSendFailure err) { diff --git a/src/main/java/org/ldk/structs/Result_NonePeerHandleErrorZ.java b/src/main/java/org/ldk/structs/Result_NonePeerHandleErrorZ.java index c3aa3adf..6c934091 100644 --- a/src/main/java/org/ldk/structs/Result_NonePeerHandleErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_NonePeerHandleErrorZ.java @@ -34,6 +34,7 @@ public class Result_NonePeerHandleErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_NonePeerHandleErrorZ_get_err(ptr); PeerHandleError err_hu_conv = new PeerHandleError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NonePeerHandleErrorZ_Err(PeerHandleError err) { diff --git a/src/main/java/org/ldk/structs/Result_PingDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_PingDecodeErrorZ.java index 078fd1f8..90c10d26 100644 --- a/src/main/java/org/ldk/structs/Result_PingDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_PingDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_PingDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_PingDecodeErrorZ_get_ok(ptr); Ping res_hu_conv = new Ping(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_PingDecodeErrorZ_OK(Ping res) { @@ -39,6 +40,7 @@ public class Result_PingDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_PingDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_PingDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_PongDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_PongDecodeErrorZ.java index 6ccd90dd..c89904e9 100644 --- a/src/main/java/org/ldk/structs/Result_PongDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_PongDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_PongDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_PongDecodeErrorZ_get_ok(ptr); Pong res_hu_conv = new Pong(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_PongDecodeErrorZ_OK(Pong res) { @@ -39,6 +40,7 @@ public class Result_PongDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_PongDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_PongDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_QueryChannelRangeDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_QueryChannelRangeDecodeErrorZ.java index 9a94fdfb..1bfd4620 100644 --- a/src/main/java/org/ldk/structs/Result_QueryChannelRangeDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_QueryChannelRangeDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(ptr); QueryChannelRange res_hu_conv = new QueryChannelRange(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_QueryChannelRangeDecodeErrorZ_OK(QueryChannelRange res) { @@ -39,6 +40,7 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_QueryChannelRangeDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_QueryChannelRangeDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_QueryShortChannelIdsDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_QueryShortChannelIdsDecodeErrorZ.java index 822a6dd6..b903ae3d 100644 --- a/src/main/java/org/ldk/structs/Result_QueryShortChannelIdsDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_QueryShortChannelIdsDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(ptr); QueryShortChannelIds res_hu_conv = new QueryShortChannelIds(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_QueryShortChannelIdsDecodeErrorZ_OK(QueryShortChannelIds res) { @@ -39,6 +40,7 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_QueryShortChannelIdsDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_ReplyChannelRangeDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ReplyChannelRangeDecodeErrorZ.java index 9d86f09a..3b3fb958 100644 --- a/src/main/java/org/ldk/structs/Result_ReplyChannelRangeDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_ReplyChannelRangeDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(ptr); ReplyChannelRange res_hu_conv = new ReplyChannelRange(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ReplyChannelRangeDecodeErrorZ_OK(ReplyChannelRange res) { @@ -39,6 +40,7 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_ReplyChannelRangeDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ReplyChannelRangeDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.java index 9db0c5d4..397f04ad 100644 --- a/src/main/java/org/ldk/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(ptr); ReplyShortChannelIdsEnd res_hu_conv = new ReplyShortChannelIdsEnd(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ReplyShortChannelIdsEndDecodeErrorZ_OK(ReplyShortChannelIdsEnd res) { @@ -39,6 +40,7 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ReplyShortChannelIdsEndDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_RouteDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_RouteDecodeErrorZ.java index e1314330..601e81e1 100644 --- a/src/main/java/org/ldk/structs/Result_RouteDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_RouteDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_RouteDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_RouteDecodeErrorZ_get_ok(ptr); Route res_hu_conv = new Route(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_RouteDecodeErrorZ_OK(Route res) { @@ -39,6 +40,7 @@ public class Result_RouteDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_RouteDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_RouteDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_RouteLightningErrorZ.java b/src/main/java/org/ldk/structs/Result_RouteLightningErrorZ.java index 09c430f2..73c74bbc 100644 --- a/src/main/java/org/ldk/structs/Result_RouteLightningErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_RouteLightningErrorZ.java @@ -25,6 +25,7 @@ public class Result_RouteLightningErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_RouteLightningErrorZ_get_ok(ptr); Route res_hu_conv = new Route(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_RouteLightningErrorZ_OK(Route res) { @@ -39,6 +40,7 @@ public class Result_RouteLightningErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_RouteLightningErrorZ_get_err(ptr); LightningError err_hu_conv = new LightningError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_RouteLightningErrorZ_Err(LightningError err) { diff --git a/src/main/java/org/ldk/structs/Result_RoutingFeesDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_RoutingFeesDecodeErrorZ.java index eda7ce3e..1f190465 100644 --- a/src/main/java/org/ldk/structs/Result_RoutingFeesDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_RoutingFeesDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_RoutingFeesDecodeErrorZ_get_ok(ptr); RoutingFees res_hu_conv = new RoutingFees(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_RoutingFeesDecodeErrorZ_OK(RoutingFees res) { @@ -39,6 +40,7 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_RoutingFeesDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_RoutingFeesDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_SpendableOutputDescriptorDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_SpendableOutputDescriptorDecodeErrorZ.java index 40c3b4ec..c5f99935 100644 --- a/src/main/java/org/ldk/structs/Result_SpendableOutputDescriptorDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_SpendableOutputDescriptorDecodeErrorZ.java @@ -39,6 +39,7 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_SpendableOutputDescriptorDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_TrustedCommitmentTransactionNoneZ.java b/src/main/java/org/ldk/structs/Result_TrustedCommitmentTransactionNoneZ.java index a4a939f1..46172256 100644 --- a/src/main/java/org/ldk/structs/Result_TrustedCommitmentTransactionNoneZ.java +++ b/src/main/java/org/ldk/structs/Result_TrustedCommitmentTransactionNoneZ.java @@ -25,11 +25,20 @@ public class Result_TrustedCommitmentTransactionNoneZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(ptr); TrustedCommitmentTransaction res_hu_conv = new TrustedCommitmentTransaction(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_TrustedCommitmentTransactionNoneZ_OK(TrustedCommitmentTransaction res) { this(null, bindings.CResult_TrustedCommitmentTransactionNoneZ_ok(res == null ? 0 : res.ptr & ~1)); this.ptrs_to.add(res); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, res is reset to null and is now a dummy object. + res.ptr = 0; } } diff --git a/src/main/java/org/ldk/structs/Result_TxCreationKeysSecpErrorZ.java b/src/main/java/org/ldk/structs/Result_TxCreationKeysSecpErrorZ.java index 86e637aa..3ee052d2 100644 --- a/src/main/java/org/ldk/structs/Result_TxCreationKeysSecpErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_TxCreationKeysSecpErrorZ.java @@ -25,6 +25,7 @@ public class Result_TxCreationKeysSecpErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_TxCreationKeysSecpErrorZ_get_ok(ptr); TxCreationKeys res_hu_conv = new TxCreationKeys(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_TxCreationKeysSecpErrorZ_OK(TxCreationKeys res) { diff --git a/src/main/java/org/ldk/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.java index 2473f7a2..325541d2 100644 --- a/src/main/java/org/ldk/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(ptr); UnsignedChannelAnnouncement res_hu_conv = new UnsignedChannelAnnouncement(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_UnsignedChannelAnnouncementDecodeErrorZ_OK(UnsignedChannelAnnouncement res) { @@ -39,6 +40,7 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_UnsignedChannelAnnouncementDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_UnsignedChannelUpdateDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_UnsignedChannelUpdateDecodeErrorZ.java index 627fdf69..7dbeefc4 100644 --- a/src/main/java/org/ldk/structs/Result_UnsignedChannelUpdateDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_UnsignedChannelUpdateDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(ptr); UnsignedChannelUpdate res_hu_conv = new UnsignedChannelUpdate(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_UnsignedChannelUpdateDecodeErrorZ_OK(UnsignedChannelUpdate res) { @@ -39,6 +40,7 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_UnsignedChannelUpdateDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.java index 7493f14e..0e981e5b 100644 --- a/src/main/java/org/ldk/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.java @@ -25,6 +25,7 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); long res = bindings.LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(ptr); UnsignedNodeAnnouncement res_hu_conv = new UnsignedNodeAnnouncement(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_UnsignedNodeAnnouncementDecodeErrorZ_OK(UnsignedNodeAnnouncement res) { @@ -39,6 +40,7 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_err(ptr); DecodeError err_hu_conv = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_UnsignedNodeAnnouncementDecodeErrorZ_Err(DecodeError err) { diff --git a/src/main/java/org/ldk/structs/Result_boolLightningErrorZ.java b/src/main/java/org/ldk/structs/Result_boolLightningErrorZ.java index 5eb4ab80..4519dd15 100644 --- a/src/main/java/org/ldk/structs/Result_boolLightningErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_boolLightningErrorZ.java @@ -36,6 +36,7 @@ public class Result_boolLightningErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_boolLightningErrorZ_get_err(ptr); LightningError err_hu_conv = new LightningError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_boolLightningErrorZ_Err(LightningError err) { diff --git a/src/main/java/org/ldk/structs/Result_boolPeerHandleErrorZ.java b/src/main/java/org/ldk/structs/Result_boolPeerHandleErrorZ.java index e29335b6..014c611c 100644 --- a/src/main/java/org/ldk/structs/Result_boolPeerHandleErrorZ.java +++ b/src/main/java/org/ldk/structs/Result_boolPeerHandleErrorZ.java @@ -36,6 +36,7 @@ public class Result_boolPeerHandleErrorZ extends CommonBase { super(_dummy, ptr); long err = bindings.LDKCResult_boolPeerHandleErrorZ_get_err(ptr); PeerHandleError err_hu_conv = new PeerHandleError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_boolPeerHandleErrorZ_Err(PeerHandleError err) { diff --git a/src/main/java/org/ldk/structs/RevokeAndACK.java b/src/main/java/org/ldk/structs/RevokeAndACK.java index a874af85..dcf6ddd9 100644 --- a/src/main/java/org/ldk/structs/RevokeAndACK.java +++ b/src/main/java/org/ldk/structs/RevokeAndACK.java @@ -17,6 +17,7 @@ public class RevokeAndACK extends CommonBase { public RevokeAndACK clone() { long ret = bindings.RevokeAndACK_clone(this.ptr); RevokeAndACK ret_hu_conv = new RevokeAndACK(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,6 +51,7 @@ public class RevokeAndACK extends CommonBase { public static RevokeAndACK constructor_new(byte[] channel_id_arg, byte[] per_commitment_secret_arg, byte[] next_per_commitment_point_arg) { long ret = bindings.RevokeAndACK_new(channel_id_arg, per_commitment_secret_arg, next_per_commitment_point_arg); RevokeAndACK ret_hu_conv = new RevokeAndACK(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -61,6 +63,7 @@ public class RevokeAndACK extends CommonBase { public static RevokeAndACK constructor_read(byte[] ser) { long ret = bindings.RevokeAndACK_read(ser); RevokeAndACK ret_hu_conv = new RevokeAndACK(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/Route.java b/src/main/java/org/ldk/structs/Route.java index e6195c34..cb0f6a2b 100644 --- a/src/main/java/org/ldk/structs/Route.java +++ b/src/main/java/org/ldk/structs/Route.java @@ -17,6 +17,7 @@ public class Route extends CommonBase { public Route clone() { long ret = bindings.Route_clone(this.ptr); Route ret_hu_conv = new Route(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -28,6 +29,7 @@ public class Route extends CommonBase { public static Route constructor_new(RouteHop[][] paths_arg) { long ret = bindings.Route_new((long[][])Arrays.stream(paths_arg).map(arr_conv_12 -> Arrays.stream(arr_conv_12).mapToLong(arr_conv_10 -> arr_conv_10 == null ? 0 : arr_conv_10.ptr & ~1).toArray()).toArray()); Route ret_hu_conv = new Route(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); /* TODO 2 RouteHop[] */; return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/RouteHint.java b/src/main/java/org/ldk/structs/RouteHint.java index f94c4071..f543b75a 100644 --- a/src/main/java/org/ldk/structs/RouteHint.java +++ b/src/main/java/org/ldk/structs/RouteHint.java @@ -17,6 +17,7 @@ public class RouteHint extends CommonBase { public RouteHint clone() { long ret = bindings.RouteHint_clone(this.ptr); RouteHint ret_hu_conv = new RouteHint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class RouteHint extends CommonBase { public RoutingFees get_fees() { long ret = bindings.RouteHint_get_fees(this.ptr); RoutingFees ret_hu_conv = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -70,6 +72,7 @@ public class RouteHint extends CommonBase { public static RouteHint constructor_new(byte[] src_node_id_arg, long short_channel_id_arg, RoutingFees fees_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg) { long ret = bindings.RouteHint_new(src_node_id_arg, short_channel_id_arg, fees_arg == null ? 0 : fees_arg.ptr & ~1, cltv_expiry_delta_arg, htlc_minimum_msat_arg); RouteHint ret_hu_conv = new RouteHint(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(fees_arg); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/RouteHop.java b/src/main/java/org/ldk/structs/RouteHop.java index fe13c7b5..ace10a9b 100644 --- a/src/main/java/org/ldk/structs/RouteHop.java +++ b/src/main/java/org/ldk/structs/RouteHop.java @@ -17,6 +17,7 @@ public class RouteHop extends CommonBase { public RouteHop clone() { long ret = bindings.RouteHop_clone(this.ptr); RouteHop ret_hu_conv = new RouteHop(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,12 +33,21 @@ public class RouteHop extends CommonBase { public NodeFeatures get_node_features() { long ret = bindings.RouteHop_get_node_features(this.ptr); NodeFeatures ret_hu_conv = new NodeFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_node_features(NodeFeatures val) { bindings.RouteHop_set_node_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public long get_short_channel_id() { @@ -52,12 +62,21 @@ public class RouteHop extends CommonBase { public ChannelFeatures get_channel_features() { long ret = bindings.RouteHop_get_channel_features(this.ptr); ChannelFeatures ret_hu_conv = new ChannelFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_channel_features(ChannelFeatures val) { bindings.RouteHop_set_channel_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public long get_fee_msat() { @@ -81,8 +100,25 @@ public class RouteHop extends CommonBase { public static RouteHop constructor_new(byte[] pubkey_arg, NodeFeatures node_features_arg, long short_channel_id_arg, ChannelFeatures channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg) { long ret = bindings.RouteHop_new(pubkey_arg, node_features_arg == null ? 0 : node_features_arg.ptr & ~1, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr & ~1, fee_msat_arg, cltv_expiry_delta_arg); RouteHop ret_hu_conv = new RouteHop(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(node_features_arg); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after ret_hu_conv call, node_features_arg is reset to null and is now a dummy object. + node_features_arg.ptr = 0; ret_hu_conv.ptrs_to.add(channel_features_arg); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after ret_hu_conv call, channel_features_arg is reset to null and is now a dummy object. + channel_features_arg.ptr = 0; return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/RoutingFees.java b/src/main/java/org/ldk/structs/RoutingFees.java index ec9af161..c11990a3 100644 --- a/src/main/java/org/ldk/structs/RoutingFees.java +++ b/src/main/java/org/ldk/structs/RoutingFees.java @@ -17,6 +17,7 @@ public class RoutingFees extends CommonBase { public RoutingFees clone() { long ret = bindings.RoutingFees_clone(this.ptr); RoutingFees ret_hu_conv = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class RoutingFees extends CommonBase { public static RoutingFees constructor_new(int base_msat_arg, int proportional_millionths_arg) { long ret = bindings.RoutingFees_new(base_msat_arg, proportional_millionths_arg); RoutingFees ret_hu_conv = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/RoutingMessageHandler.java b/src/main/java/org/ldk/structs/RoutingMessageHandler.java index 6e1f2214..a4f5353d 100644 --- a/src/main/java/org/ldk/structs/RoutingMessageHandler.java +++ b/src/main/java/org/ldk/structs/RoutingMessageHandler.java @@ -61,7 +61,7 @@ public class RoutingMessageHandler extends CommonBase { } @Override public long[] get_next_channel_announcements(long starting_point, byte batch_amount) { ThreeTuple[] ret = arg.get_next_channel_announcements(starting_point, batch_amount); - long[] result = Arrays.stream(ret).mapToLong(arr_conv_63 -> bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(arr_conv_63.a == null ? 0 : arr_conv_63.a.ptr & ~1/*XXX: this.ptrs_to.add(arr_conv_63_a)*/, arr_conv_63.b == null ? 0 : arr_conv_63.b.ptr & ~1/*XXX: this.ptrs_to.add(arr_conv_63_b)*/, arr_conv_63.c == null ? 0 : arr_conv_63.c.ptr & ~1/*XXX: this.ptrs_to.add(arr_conv_63_c)*/)).toArray(); + long[] result = Arrays.stream(ret).mapToLong(arr_conv_63 -> bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(arr_conv_63.a == null ? 0 : arr_conv_63.a.ptr & ~1, arr_conv_63.b == null ? 0 : arr_conv_63.b.ptr & ~1, arr_conv_63.c == null ? 0 : arr_conv_63.c.ptr & ~1)).toArray(); /* TODO 2 ThreeTuple */; return result; } @@ -77,24 +77,28 @@ public class RoutingMessageHandler extends CommonBase { } @Override public long handle_reply_channel_range(byte[] their_node_id, long msg) { ReplyChannelRange msg_hu_conv = new ReplyChannelRange(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_reply_channel_range(their_node_id, msg_hu_conv); long result = ret != null ? ret.ptr : 0; return result; } @Override public long handle_reply_short_channel_ids_end(byte[] their_node_id, long msg) { ReplyShortChannelIdsEnd msg_hu_conv = new ReplyShortChannelIdsEnd(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_reply_short_channel_ids_end(their_node_id, msg_hu_conv); long result = ret != null ? ret.ptr : 0; return result; } @Override public long handle_query_channel_range(byte[] their_node_id, long msg) { QueryChannelRange msg_hu_conv = new QueryChannelRange(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_query_channel_range(their_node_id, msg_hu_conv); long result = ret != null ? ret.ptr : 0; return result; } @Override public long handle_query_short_channel_ids(byte[] their_node_id, long msg) { QueryShortChannelIds msg_hu_conv = new QueryShortChannelIds(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_query_short_channel_ids(their_node_id, msg_hu_conv); long result = ret != null ? ret.ptr : 0; return result; @@ -134,11 +138,14 @@ public class RoutingMessageHandler extends CommonBase { for (int l = 0; l < ret.length; l++) { long arr_conv_63 = ret[l]; long arr_conv_63_a = bindings.LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(arr_conv_63); - ChannelAnnouncement arr_conv_63_a_hu_conv = new ChannelAnnouncement(null, arr_conv_63_a);; + ChannelAnnouncement arr_conv_63_a_hu_conv = new ChannelAnnouncement(null, arr_conv_63_a); + arr_conv_63_a_hu_conv.ptrs_to.add(this);; long arr_conv_63_b = bindings.LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_b(arr_conv_63); - ChannelUpdate arr_conv_63_b_hu_conv = new ChannelUpdate(null, arr_conv_63_b);; + ChannelUpdate arr_conv_63_b_hu_conv = new ChannelUpdate(null, arr_conv_63_b); + arr_conv_63_b_hu_conv.ptrs_to.add(this);; long arr_conv_63_c = bindings.LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(arr_conv_63); - ChannelUpdate arr_conv_63_c_hu_conv = new ChannelUpdate(null, arr_conv_63_c);; + ChannelUpdate arr_conv_63_c_hu_conv = new ChannelUpdate(null, arr_conv_63_c); + arr_conv_63_c_hu_conv.ptrs_to.add(this);; ThreeTuple arr_conv_63_conv = new ThreeTuple(arr_conv_63_a_hu_conv, arr_conv_63_b_hu_conv, arr_conv_63_c_hu_conv); arr_conv_63_arr[l] = arr_conv_63_conv; } @@ -151,6 +158,7 @@ public class RoutingMessageHandler extends CommonBase { for (int s = 0; s < ret.length; s++) { long arr_conv_18 = ret[s]; NodeAnnouncement arr_conv_18_hu_conv = new NodeAnnouncement(null, arr_conv_18); + arr_conv_18_hu_conv.ptrs_to.add(this); arr_conv_18_arr[s] = arr_conv_18_hu_conv; } return arr_conv_18_arr; diff --git a/src/main/java/org/ldk/structs/Shutdown.java b/src/main/java/org/ldk/structs/Shutdown.java index 77b9a342..491939cd 100644 --- a/src/main/java/org/ldk/structs/Shutdown.java +++ b/src/main/java/org/ldk/structs/Shutdown.java @@ -17,6 +17,7 @@ public class Shutdown extends CommonBase { public Shutdown clone() { long ret = bindings.Shutdown_clone(this.ptr); Shutdown ret_hu_conv = new Shutdown(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class Shutdown extends CommonBase { public static Shutdown constructor_new(byte[] channel_id_arg, byte[] scriptpubkey_arg) { long ret = bindings.Shutdown_new(channel_id_arg, scriptpubkey_arg); Shutdown ret_hu_conv = new Shutdown(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -52,6 +54,7 @@ public class Shutdown extends CommonBase { public static Shutdown constructor_read(byte[] ser) { long ret = bindings.Shutdown_read(ser); Shutdown ret_hu_conv = new Shutdown(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/SpendableOutputDescriptor.java b/src/main/java/org/ldk/structs/SpendableOutputDescriptor.java index 74c70391..5558dd7f 100644 --- a/src/main/java/org/ldk/structs/SpendableOutputDescriptor.java +++ b/src/main/java/org/ldk/structs/SpendableOutputDescriptor.java @@ -34,6 +34,7 @@ public class SpendableOutputDescriptor extends CommonBase { super(null, ptr); long outpoint = obj.outpoint; OutPoint outpoint_hu_conv = new OutPoint(null, outpoint); + outpoint_hu_conv.ptrs_to.add(this); this.outpoint = outpoint_hu_conv; long output = obj.output; TxOut output_conv = new TxOut(null, output); @@ -51,6 +52,7 @@ public class SpendableOutputDescriptor extends CommonBase { super(null, ptr); long outpoint = obj.outpoint; OutPoint outpoint_hu_conv = new OutPoint(null, outpoint); + outpoint_hu_conv.ptrs_to.add(this); this.outpoint = outpoint_hu_conv; this.per_commitment_point = obj.per_commitment_point; this.to_self_delay = obj.to_self_delay; @@ -73,6 +75,7 @@ public class SpendableOutputDescriptor extends CommonBase { super(null, ptr); long outpoint = obj.outpoint; OutPoint outpoint_hu_conv = new OutPoint(null, outpoint); + outpoint_hu_conv.ptrs_to.add(this); this.outpoint = outpoint_hu_conv; long output = obj.output; TxOut output_conv = new TxOut(null, output); diff --git a/src/main/java/org/ldk/structs/TrustedCommitmentTransaction.java b/src/main/java/org/ldk/structs/TrustedCommitmentTransaction.java index e49ae242..9d7c1320 100644 --- a/src/main/java/org/ldk/structs/TrustedCommitmentTransaction.java +++ b/src/main/java/org/ldk/structs/TrustedCommitmentTransaction.java @@ -22,12 +22,14 @@ public class TrustedCommitmentTransaction extends CommonBase { public BuiltCommitmentTransaction built_transaction() { long ret = bindings.TrustedCommitmentTransaction_built_transaction(this.ptr); BuiltCommitmentTransaction ret_hu_conv = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public TxCreationKeys keys() { long ret = bindings.TrustedCommitmentTransaction_keys(this.ptr); TxCreationKeys ret_hu_conv = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/TxCreationKeys.java b/src/main/java/org/ldk/structs/TxCreationKeys.java index 9d0df354..05e70350 100644 --- a/src/main/java/org/ldk/structs/TxCreationKeys.java +++ b/src/main/java/org/ldk/structs/TxCreationKeys.java @@ -17,6 +17,7 @@ public class TxCreationKeys extends CommonBase { public TxCreationKeys clone() { long ret = bindings.TxCreationKeys_clone(this.ptr); TxCreationKeys ret_hu_conv = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -68,6 +69,7 @@ public class TxCreationKeys extends CommonBase { public static TxCreationKeys constructor_new(byte[] per_commitment_point_arg, byte[] revocation_key_arg, byte[] broadcaster_htlc_key_arg, byte[] countersignatory_htlc_key_arg, byte[] broadcaster_delayed_payment_key_arg) { long ret = bindings.TxCreationKeys_new(per_commitment_point_arg, revocation_key_arg, broadcaster_htlc_key_arg, countersignatory_htlc_key_arg, broadcaster_delayed_payment_key_arg); TxCreationKeys ret_hu_conv = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -79,6 +81,7 @@ public class TxCreationKeys extends CommonBase { public static TxCreationKeys constructor_read(byte[] ser) { long ret = bindings.TxCreationKeys_read(ser); TxCreationKeys ret_hu_conv = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UnsignedChannelAnnouncement.java b/src/main/java/org/ldk/structs/UnsignedChannelAnnouncement.java index 1d6db48b..d4fa2aed 100644 --- a/src/main/java/org/ldk/structs/UnsignedChannelAnnouncement.java +++ b/src/main/java/org/ldk/structs/UnsignedChannelAnnouncement.java @@ -17,18 +17,28 @@ public class UnsignedChannelAnnouncement extends CommonBase { public UnsignedChannelAnnouncement clone() { long ret = bindings.UnsignedChannelAnnouncement_clone(this.ptr); UnsignedChannelAnnouncement ret_hu_conv = new UnsignedChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelFeatures get_features() { long ret = bindings.UnsignedChannelAnnouncement_get_features(this.ptr); ChannelFeatures ret_hu_conv = new ChannelFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(ChannelFeatures val) { bindings.UnsignedChannelAnnouncement_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public byte[] get_chain_hash() { diff --git a/src/main/java/org/ldk/structs/UnsignedChannelUpdate.java b/src/main/java/org/ldk/structs/UnsignedChannelUpdate.java index 70c9749a..86ad7499 100644 --- a/src/main/java/org/ldk/structs/UnsignedChannelUpdate.java +++ b/src/main/java/org/ldk/structs/UnsignedChannelUpdate.java @@ -17,6 +17,7 @@ public class UnsignedChannelUpdate extends CommonBase { public UnsignedChannelUpdate clone() { long ret = bindings.UnsignedChannelUpdate_clone(this.ptr); UnsignedChannelUpdate ret_hu_conv = new UnsignedChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java b/src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java index e737f271..964315ca 100644 --- a/src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java +++ b/src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java @@ -17,18 +17,28 @@ public class UnsignedNodeAnnouncement extends CommonBase { public UnsignedNodeAnnouncement clone() { long ret = bindings.UnsignedNodeAnnouncement_clone(this.ptr); UnsignedNodeAnnouncement ret_hu_conv = new UnsignedNodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public NodeFeatures get_features() { long ret = bindings.UnsignedNodeAnnouncement_get_features(this.ptr); NodeFeatures ret_hu_conv = new NodeFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(NodeFeatures val) { bindings.UnsignedNodeAnnouncement_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public int get_timestamp() { diff --git a/src/main/java/org/ldk/structs/UpdateAddHTLC.java b/src/main/java/org/ldk/structs/UpdateAddHTLC.java index acf6a36a..3f6643ce 100644 --- a/src/main/java/org/ldk/structs/UpdateAddHTLC.java +++ b/src/main/java/org/ldk/structs/UpdateAddHTLC.java @@ -17,6 +17,7 @@ public class UpdateAddHTLC extends CommonBase { public UpdateAddHTLC clone() { long ret = bindings.UpdateAddHTLC_clone(this.ptr); UpdateAddHTLC ret_hu_conv = new UpdateAddHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -73,6 +74,7 @@ public class UpdateAddHTLC extends CommonBase { public static UpdateAddHTLC constructor_read(byte[] ser) { long ret = bindings.UpdateAddHTLC_read(ser); UpdateAddHTLC ret_hu_conv = new UpdateAddHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UpdateFailHTLC.java b/src/main/java/org/ldk/structs/UpdateFailHTLC.java index 37d34c46..b341d282 100644 --- a/src/main/java/org/ldk/structs/UpdateFailHTLC.java +++ b/src/main/java/org/ldk/structs/UpdateFailHTLC.java @@ -17,6 +17,7 @@ public class UpdateFailHTLC extends CommonBase { public UpdateFailHTLC clone() { long ret = bindings.UpdateFailHTLC_clone(this.ptr); UpdateFailHTLC ret_hu_conv = new UpdateFailHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -46,6 +47,7 @@ public class UpdateFailHTLC extends CommonBase { public static UpdateFailHTLC constructor_read(byte[] ser) { long ret = bindings.UpdateFailHTLC_read(ser); UpdateFailHTLC ret_hu_conv = new UpdateFailHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UpdateFailMalformedHTLC.java b/src/main/java/org/ldk/structs/UpdateFailMalformedHTLC.java index 5f0fd7d2..69e17531 100644 --- a/src/main/java/org/ldk/structs/UpdateFailMalformedHTLC.java +++ b/src/main/java/org/ldk/structs/UpdateFailMalformedHTLC.java @@ -17,6 +17,7 @@ public class UpdateFailMalformedHTLC extends CommonBase { public UpdateFailMalformedHTLC clone() { long ret = bindings.UpdateFailMalformedHTLC_clone(this.ptr); UpdateFailMalformedHTLC ret_hu_conv = new UpdateFailMalformedHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -55,6 +56,7 @@ public class UpdateFailMalformedHTLC extends CommonBase { public static UpdateFailMalformedHTLC constructor_read(byte[] ser) { long ret = bindings.UpdateFailMalformedHTLC_read(ser); UpdateFailMalformedHTLC ret_hu_conv = new UpdateFailMalformedHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UpdateFee.java b/src/main/java/org/ldk/structs/UpdateFee.java index 8c90926a..a939f3f1 100644 --- a/src/main/java/org/ldk/structs/UpdateFee.java +++ b/src/main/java/org/ldk/structs/UpdateFee.java @@ -17,6 +17,7 @@ public class UpdateFee extends CommonBase { public UpdateFee clone() { long ret = bindings.UpdateFee_clone(this.ptr); UpdateFee ret_hu_conv = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -41,6 +42,7 @@ public class UpdateFee extends CommonBase { public static UpdateFee constructor_new(byte[] channel_id_arg, int feerate_per_kw_arg) { long ret = bindings.UpdateFee_new(channel_id_arg, feerate_per_kw_arg); UpdateFee ret_hu_conv = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -52,6 +54,7 @@ public class UpdateFee extends CommonBase { public static UpdateFee constructor_read(byte[] ser) { long ret = bindings.UpdateFee_read(ser); UpdateFee ret_hu_conv = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UpdateFulfillHTLC.java b/src/main/java/org/ldk/structs/UpdateFulfillHTLC.java index 57375723..e31af1b6 100644 --- a/src/main/java/org/ldk/structs/UpdateFulfillHTLC.java +++ b/src/main/java/org/ldk/structs/UpdateFulfillHTLC.java @@ -17,6 +17,7 @@ public class UpdateFulfillHTLC extends CommonBase { public UpdateFulfillHTLC clone() { long ret = bindings.UpdateFulfillHTLC_clone(this.ptr); UpdateFulfillHTLC ret_hu_conv = new UpdateFulfillHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,6 +51,7 @@ public class UpdateFulfillHTLC extends CommonBase { public static UpdateFulfillHTLC constructor_new(byte[] channel_id_arg, long htlc_id_arg, byte[] payment_preimage_arg) { long ret = bindings.UpdateFulfillHTLC_new(channel_id_arg, htlc_id_arg, payment_preimage_arg); UpdateFulfillHTLC ret_hu_conv = new UpdateFulfillHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -61,6 +63,7 @@ public class UpdateFulfillHTLC extends CommonBase { public static UpdateFulfillHTLC constructor_read(byte[] ser) { long ret = bindings.UpdateFulfillHTLC_read(ser); UpdateFulfillHTLC ret_hu_conv = new UpdateFulfillHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UserConfig.java b/src/main/java/org/ldk/structs/UserConfig.java index 8e871e21..ccf01fef 100644 --- a/src/main/java/org/ldk/structs/UserConfig.java +++ b/src/main/java/org/ldk/structs/UserConfig.java @@ -17,12 +17,14 @@ public class UserConfig extends CommonBase { public UserConfig clone() { long ret = bindings.UserConfig_clone(this.ptr); UserConfig ret_hu_conv = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelHandshakeConfig get_own_channel_config() { long ret = bindings.UserConfig_get_own_channel_config(this.ptr); ChannelHandshakeConfig ret_hu_conv = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -34,6 +36,7 @@ public class UserConfig extends CommonBase { public ChannelHandshakeLimits get_peer_channel_config_limits() { long ret = bindings.UserConfig_get_peer_channel_config_limits(this.ptr); ChannelHandshakeLimits ret_hu_conv = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +48,7 @@ public class UserConfig extends CommonBase { public ChannelConfig get_channel_options() { long ret = bindings.UserConfig_get_channel_options(this.ptr); ChannelConfig ret_hu_conv = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -56,6 +60,7 @@ public class UserConfig extends CommonBase { public static UserConfig constructor_new(ChannelHandshakeConfig own_channel_config_arg, ChannelHandshakeLimits peer_channel_config_limits_arg, ChannelConfig channel_options_arg) { long ret = bindings.UserConfig_new(own_channel_config_arg == null ? 0 : own_channel_config_arg.ptr & ~1, peer_channel_config_limits_arg == null ? 0 : peer_channel_config_limits_arg.ptr & ~1, channel_options_arg == null ? 0 : channel_options_arg.ptr & ~1); UserConfig ret_hu_conv = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(own_channel_config_arg); ret_hu_conv.ptrs_to.add(peer_channel_config_limits_arg); ret_hu_conv.ptrs_to.add(channel_options_arg); @@ -65,6 +70,7 @@ public class UserConfig extends CommonBase { public static UserConfig constructor_default() { long ret = bindings.UserConfig_default(); UserConfig ret_hu_conv = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/src/main/java/org/ldk/structs/UtilMethods.java b/src/main/java/org/ldk/structs/UtilMethods.java new file mode 100644 index 00000000..8f2f7f34 --- /dev/null +++ b/src/main/java/org/ldk/structs/UtilMethods.java @@ -0,0 +1,26 @@ +package org.ldk.structs; +import org.ldk.impl.bindings; +import java.util.Arrays; + +public class UtilMethods { + public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constructor_BlockHashChannelMonitorZ_read(byte[] ser, KeysInterface arg) { + long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_read(ser, arg == null ? 0 : arg.ptr); + Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg); + return ret_hu_conv; + } + + public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constructor_BlockHashChannelManagerZ_read(byte[] ser, KeysInterface arg_keys_manager, FeeEstimator arg_fee_estimator, Watch arg_chain_monitor, BroadcasterInterface arg_tx_broadcaster, Logger arg_logger, UserConfig arg_default_config, ChannelMonitor[] arg_channel_monitors) { + long ret = bindings.C2Tuple_BlockHashChannelManagerZ_read(ser, bindings.ChannelManagerReadArgs_new(arg_keys_manager == null ? 0 : arg_keys_manager.ptr, arg_fee_estimator == null ? 0 : arg_fee_estimator.ptr, arg_chain_monitor == null ? 0 : arg_chain_monitor.ptr, arg_tx_broadcaster == null ? 0 : arg_tx_broadcaster.ptr, arg_logger == null ? 0 : arg_logger.ptr, arg_default_config == null ? 0 : arg_default_config.ptr & ~1, Arrays.stream(arg_channel_monitors).mapToLong(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray())); + Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg_keys_manager); + ret_hu_conv.ptrs_to.add(arg_fee_estimator); + ret_hu_conv.ptrs_to.add(arg_chain_monitor); + ret_hu_conv.ptrs_to.add(arg_tx_broadcaster); + ret_hu_conv.ptrs_to.add(arg_logger); + ret_hu_conv.ptrs_to.add(arg_default_config); + /* TODO 2 ChannelMonitor */; + return ret_hu_conv; + } + +} \ No newline at end of file diff --git a/src/main/java/org/ldk/structs/Watch.java b/src/main/java/org/ldk/structs/Watch.java index 1efd7e0e..db7d4392 100644 --- a/src/main/java/org/ldk/structs/Watch.java +++ b/src/main/java/org/ldk/structs/Watch.java @@ -30,14 +30,18 @@ public class Watch extends CommonBase { impl_holder.held = new Watch(new bindings.LDKWatch() { @Override public long watch_channel(long funding_txo, long monitor) { OutPoint funding_txo_hu_conv = new OutPoint(null, funding_txo); + funding_txo_hu_conv.ptrs_to.add(this); ChannelMonitor monitor_hu_conv = new ChannelMonitor(null, monitor); + monitor_hu_conv.ptrs_to.add(this); Result_NoneChannelMonitorUpdateErrZ ret = arg.watch_channel(funding_txo_hu_conv, monitor_hu_conv); long result = ret != null ? ret.ptr : 0; return result; } @Override public long update_channel(long funding_txo, long update) { OutPoint funding_txo_hu_conv = new OutPoint(null, funding_txo); + funding_txo_hu_conv.ptrs_to.add(this); ChannelMonitorUpdate update_hu_conv = new ChannelMonitorUpdate(null, update); + update_hu_conv.ptrs_to.add(this); Result_NoneChannelMonitorUpdateErrZ ret = arg.update_channel(funding_txo_hu_conv, update_hu_conv); long result = ret != null ? ret.ptr : 0; return result; @@ -73,6 +77,7 @@ public class Watch extends CommonBase { for (int o = 0; o < ret.length; o++) { long arr_conv_14 = ret[o]; MonitorEvent arr_conv_14_hu_conv = new MonitorEvent(null, arr_conv_14); + arr_conv_14_hu_conv.ptrs_to.add(this); arr_conv_14_arr[o] = arr_conv_14_hu_conv; } return arr_conv_14_arr; diff --git a/src/main/jni/bindings.c b/src/main/jni/bindings.c index 3a878484..ad260dc2 100644 --- a/src/main/jni/bindings.c +++ b/src/main/jni/bindings.c @@ -31,16 +31,18 @@ typedef struct allocation { const char* struct_name; void* bt[BT_MAX]; int bt_len; + size_t alloc_len; } allocation; static allocation* allocation_ll = NULL; void* __real_malloc(size_t len); void* __real_calloc(size_t nmemb, size_t len); -static void new_allocation(void* res, const char* struct_name) { +static void new_allocation(void* res, const char* struct_name, size_t len) { allocation* new_alloc = __real_malloc(sizeof(allocation)); new_alloc->ptr = res; new_alloc->struct_name = struct_name; new_alloc->bt_len = backtrace(new_alloc->bt, BT_MAX); + new_alloc->alloc_len = len; DO_ASSERT(mtx_lock(&allocation_mtx) == thrd_success); new_alloc->next = allocation_ll; allocation_ll = new_alloc; @@ -48,7 +50,7 @@ static void new_allocation(void* res, const char* struct_name) { } static void* MALLOC(size_t len, const char* struct_name) { void* res = __real_malloc(len); - new_allocation(res, struct_name); + new_allocation(res, struct_name, len); return res; } void __real_free(void* ptr); @@ -81,12 +83,12 @@ static void FREE(void* ptr) { void* __wrap_malloc(size_t len) { void* res = __real_malloc(len); - new_allocation(res, "malloc call"); + new_allocation(res, "malloc call", len); return res; } void* __wrap_calloc(size_t nmemb, size_t len) { void* res = __real_calloc(nmemb, len); - new_allocation(res, "calloc call"); + new_allocation(res, "calloc call", len); return res; } void __wrap_free(void* ptr) { @@ -99,7 +101,7 @@ void* __real_realloc(void* ptr, size_t newlen); void* __wrap_realloc(void* ptr, size_t len) { if (ptr != NULL) alloc_freed(ptr); void* res = __real_realloc(ptr, len); - new_allocation(res, "realloc call"); + new_allocation(res, "realloc call", len); return res; } void __wrap_reallocarray(void* ptr, size_t new_sz) { @@ -108,11 +110,16 @@ void __wrap_reallocarray(void* ptr, size_t new_sz) { } void __attribute__((destructor)) check_leaks() { + size_t alloc_count = 0; + size_t alloc_size = 0; for (allocation* a = allocation_ll; a != NULL; a = a->next) { fprintf(stderr, "%s %p remains:\n", a->struct_name, a->ptr); backtrace_symbols_fd(a->bt, a->bt_len, STDERR_FILENO); fprintf(stderr, "\n\n"); + alloc_count++; + alloc_size += a->alloc_len; } + fprintf(stderr, "%lu allocations remained for %lu bytes.\n", alloc_count, alloc_size); DO_ASSERT(allocation_ll == NULL); } @@ -501,19 +508,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1u64u64Z_1new(JN ret->b = b; return (long)ret; } -static inline LDKC2Tuple_u64u64Z C2Tuple_u64u64Z_clone(const LDKC2Tuple_u64u64Z *orig) { - LDKC2Tuple_u64u64Z ret = { - .a = orig->a, - .b = orig->b, - }; - return ret; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1u64u64Z_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)ptr; + LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)(ptr & ~1); return tuple->a; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1u64u64Z_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)ptr; + LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)(ptr & ~1); return tuple->b; } static jclass LDKSpendableOutputDescriptor_StaticOutput_class = NULL; @@ -547,7 +547,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto CHECK((((long)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long outpoint_ref = (long)outpoint_var.inner & ~1; - long output_ref = (long)&obj->static_output.output; + long output_ref = ((long)&obj->static_output.output) | 1; return (*env)->NewObject(env, LDKSpendableOutputDescriptor_StaticOutput_class, LDKSpendableOutputDescriptor_StaticOutput_meth, outpoint_ref, (long)output_ref); } case LDKSpendableOutputDescriptor_DynamicOutputP2WSH: { @@ -557,8 +557,8 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto long outpoint_ref = (long)outpoint_var.inner & ~1; int8_tArray per_commitment_point_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, per_commitment_point_arr, 0, 33, obj->dynamic_output_p2wsh.per_commitment_point.compressed_form); - long output_ref = (long)&obj->dynamic_output_p2wsh.output; - long key_derivation_params_ref = (long)&obj->dynamic_output_p2wsh.key_derivation_params; + long output_ref = ((long)&obj->dynamic_output_p2wsh.output) | 1; + long key_derivation_params_ref = (long)(&obj->dynamic_output_p2wsh.key_derivation_params) | 1; int8_tArray revocation_pubkey_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, revocation_pubkey_arr, 0, 33, obj->dynamic_output_p2wsh.revocation_pubkey.compressed_form); return (*env)->NewObject(env, LDKSpendableOutputDescriptor_DynamicOutputP2WSH_class, LDKSpendableOutputDescriptor_DynamicOutputP2WSH_meth, outpoint_ref, per_commitment_point_arr, obj->dynamic_output_p2wsh.to_self_delay, (long)output_ref, key_derivation_params_ref, revocation_pubkey_arr); @@ -568,8 +568,8 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto CHECK((((long)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long outpoint_ref = (long)outpoint_var.inner & ~1; - long output_ref = (long)&obj->static_output_counterparty_payment.output; - long key_derivation_params_ref = (long)&obj->static_output_counterparty_payment.key_derivation_params; + long output_ref = ((long)&obj->static_output_counterparty_payment.output) | 1; + long key_derivation_params_ref = (long)(&obj->static_output_counterparty_payment.key_derivation_params) | 1; return (*env)->NewObject(env, LDKSpendableOutputDescriptor_StaticOutputCounterpartyPayment_class, LDKSpendableOutputDescriptor_StaticOutputCounterpartyPayment_meth, outpoint_ref, (long)output_ref, key_derivation_params_ref); } default: abort(); @@ -585,7 +585,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1SpendableOutputDes int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)arr_elem; + LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -948,11 +948,11 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f case LDKMessageSendEvent_HandleError: { int8_tArray node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, node_id_arr, 0, 33, obj->handle_error.node_id.compressed_form); - long action_ref = (long)&obj->handle_error.action; + long action_ref = ((long)&obj->handle_error.action) | 1; return (*env)->NewObject(env, LDKMessageSendEvent_HandleError_class, LDKMessageSendEvent_HandleError_meth, node_id_arr, action_ref); } case LDKMessageSendEvent_PaymentFailureNetworkUpdate: { - long update_ref = (long)&obj->payment_failure_network_update.update; + long update_ref = ((long)&obj->payment_failure_network_update.update) | 1; return (*env)->NewObject(env, LDKMessageSendEvent_PaymentFailureNetworkUpdate_class, LDKMessageSendEvent_PaymentFailureNetworkUpdate_meth, update_ref); } case LDKMessageSendEvent_SendChannelRangeQuery: { @@ -986,7 +986,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MessageSendEventZ_ int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)arr_elem; + LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -1095,7 +1095,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN int64_tArray outputs_arr = (*env)->NewLongArray(env, outputs_var.datalen); int64_t *outputs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, outputs_arr, NULL); for (size_t b = 0; b < outputs_var.datalen; b++) { - long arr_conv_27_ref = (long)&outputs_var.data[b]; + long arr_conv_27_ref = ((long)&outputs_var.data[b]) | 1; outputs_arr_ptr[b] = arr_conv_27_ref; } (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0); @@ -1114,7 +1114,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1EventZ_1new(JNIEnv int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKEvent arr_elem_conv = *(LDKEvent*)arr_elem; + LDKEvent arr_elem_conv = *(LDKEvent*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -1141,11 +1141,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1usizeTransactio return (long)ret; } JNIEXPORT intptr_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1usizeTransactionZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)ptr; + LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)(ptr & ~1); return tuple->a; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1usizeTransactionZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)ptr; + LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)(ptr & ~1); LDKTransaction b_var = tuple->b; int8_tArray b_arr = (*env)->NewByteArray(env, b_var.datalen); (*env)->SetByteArrayRegion(env, b_arr, 0, b_var.datalen, b_var.data); @@ -1161,7 +1161,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1usizeTran int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_elem; + LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -1173,27 +1173,16 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMon return ((LDKCResult_NoneChannelMonitorUpdateErrZ*)arg)->result_ok; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)arg; + LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)arg; + LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1); CHECK(!val->result_ok); jclass err_conv = LDKChannelMonitorUpdateErr_to_java(env, (*val->contents.err)); return err_conv; } -static inline LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_clone(const LDKCResult_NoneChannelMonitorUpdateErrZ *orig) { - LDKCResult_NoneChannelMonitorUpdateErrZ res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - res.contents.result = NULL; - } else { - LDKChannelMonitorUpdateErr* contents = MALLOC(sizeof(LDKChannelMonitorUpdateErr), "LDKChannelMonitorUpdateErr result Err clone"); - *contents = ChannelMonitorUpdateErr_clone(orig->contents.err); - res.contents.err = contents; - } - return res; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MonitorEventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) { LDKCVec_MonitorEventZ *ret = MALLOC(sizeof(LDKCVec_MonitorEventZ), "LDKCVec_MonitorEventZ"); ret->datalen = (*env)->GetArrayLength(env, elems); @@ -1207,8 +1196,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MonitorEventZ_1new LDKMonitorEvent arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = MonitorEvent_clone(&arr_elem_conv); + arr_elem_conv = MonitorEvent_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -1226,7 +1214,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitor return ((LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg; + LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKChannelMonitorUpdate res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1235,7 +1223,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorU return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg; + LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1247,12 +1235,12 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpd return ((LDKCResult_NoneMonitorUpdateErrorZ*)arg)->result_ok; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)arg; + LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)arg; + LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKMonitorUpdateError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1265,8 +1253,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1OutPointScriptZ LDKOutPoint a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = OutPoint_clone(&a_conv); + a_conv = OutPoint_clone(&a_conv); ret->a = a_conv; LDKCVec_u8Z b_ref; b_ref.datalen = (*env)->GetArrayLength(env, b); @@ -1275,15 +1262,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1OutPointScriptZ ret->b = b_ref; return (long)ret; } -static inline LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_clone(const LDKC2Tuple_OutPointScriptZ *orig) { - LDKC2Tuple_OutPointScriptZ ret = { - .a = OutPoint_clone(&orig->a), - .b = CVec_u8Z_clone(&orig->b), - }; - return ret; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1OutPointScriptZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)ptr; + LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)(ptr & ~1); LDKOutPoint a_var = tuple->a; CHECK((((long)a_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&a_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -1291,7 +1271,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1OutPointScriptZ return a_ref; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1OutPointScriptZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)ptr; + LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)(ptr & ~1); LDKCVec_u8Z b_var = tuple->b; int8_tArray b_arr = (*env)->NewByteArray(env, b_var.datalen); (*env)->SetByteArrayRegion(env, b_arr, 0, b_var.datalen, b_var.data); @@ -1300,25 +1280,18 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1OutPointScr JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1u32TxOutZ_1new(JNIEnv *env, jclass clz, int32_t a, int64_t b) { LDKC2Tuple_u32TxOutZ* ret = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ"); ret->a = a; - LDKTxOut b_conv = *(LDKTxOut*)b; + LDKTxOut b_conv = *(LDKTxOut*)(((uint64_t)b) & ~1); FREE((void*)b); ret->b = b_conv; return (long)ret; } -static inline LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_clone(const LDKC2Tuple_u32TxOutZ *orig) { - LDKC2Tuple_u32TxOutZ ret = { - .a = orig->a, - .b = TxOut_clone(&orig->b), - }; - return ret; -} JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1u32TxOutZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)ptr; + LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)(ptr & ~1); return tuple->a; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1u32TxOutZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)ptr; - long b_ref = (long)&tuple->b; + LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)(ptr & ~1); + long b_ref = ((long)&tuple->b) | 1; return (long)b_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32TxOutZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) { @@ -1331,7 +1304,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32TxOutZ int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)arr_elem; + LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -1361,7 +1334,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1TxidCVec_1C2Tup int64_t* b_vals = (*env)->GetLongArrayElements (env, b, NULL); for (size_t a = 0; a < b_constr.datalen; a++) { int64_t arr_conv_26 = b_vals[a]; - LDKC2Tuple_u32TxOutZ arr_conv_26_conv = *(LDKC2Tuple_u32TxOutZ*)arr_conv_26; + LDKC2Tuple_u32TxOutZ arr_conv_26_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_conv_26) & ~1); FREE((void*)arr_conv_26); b_constr.data[a] = arr_conv_26_conv; } @@ -1369,26 +1342,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1TxidCVec_1C2Tup ret->b = b_constr; return (long)ret; } -static inline LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(const LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *orig) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ ret = { - .a = ThirtyTwoBytes_clone(&orig->a), - .b = CVec_C2Tuple_u32TxOutZZ_clone(&orig->b), - }; - return ret; -} JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)ptr; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(ptr & ~1); int8_tArray a_arr = (*env)->NewByteArray(env, 32); (*env)->SetByteArrayRegion(env, a_arr, 0, 32, tuple->a.data); return a_arr; } JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)ptr; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(ptr & ~1); LDKCVec_C2Tuple_u32TxOutZZ b_var = tuple->b; int64_tArray b_arr = (*env)->NewLongArray(env, b_var.datalen); int64_t *b_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, b_arr, NULL); for (size_t a = 0; a < b_var.datalen; a++) { - long arr_conv_26_ref = (long)&b_var.data[a]; + long arr_conv_26_ref = (long)(&b_var.data[a]) | 1; b_arr_ptr[a] = arr_conv_26_ref; } (*env)->ReleasePrimitiveArrayCritical(env, b_arr, b_arr_ptr, 0); @@ -1404,7 +1370,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_ int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)arr_elem; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -1412,13 +1378,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_ } return (long)ret; } -static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) { - LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen }; - for (size_t i = 0; i < ret.datalen; i++) { - ret.data[i] = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(&orig->data[i]); - } - return ret; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1SignatureCVec_1SignatureZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, jobjectArray b) { LDKC2Tuple_SignatureCVec_SignatureZZ* ret = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ"); LDKSignature a_ref; @@ -1442,13 +1401,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1SignatureCVec_1 return (long)ret; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1SignatureCVec_1SignatureZZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)ptr; + LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(ptr & ~1); int8_tArray a_arr = (*env)->NewByteArray(env, 64); (*env)->SetByteArrayRegion(env, a_arr, 0, 64, tuple->a.compact_form); return a_arr; } JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1SignatureCVec_1SignatureZZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)ptr; + LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(ptr & ~1); LDKCVec_SignatureZ b_var = tuple->b; jobjectArray b_arr = (*env)->NewObjectArray(env, b_var.datalen, arr_of_B_clz, NULL); ; @@ -1463,13 +1422,13 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1Signa return ((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = (long)(&(*val->contents.result)) | 1; return res_ref; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } @@ -1477,35 +1436,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ return ((LDKCResult_SignatureNoneZ*)arg)->result_ok; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)arg; + LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1); CHECK(val->result_ok); int8_tArray res_arr = (*env)->NewByteArray(env, 64); (*env)->SetByteArrayRegion(env, res_arr, 0, 64, (*val->contents.result).compact_form); return res_arr; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)arg; - CHECK(!val->result_ok); - return *val->contents.err; -} -JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) { - return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok; -} -JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)arg; - CHECK(val->result_ok); - LDKCVec_SignatureZ res_var = (*val->contents.result); - jobjectArray res_arr = (*env)->NewObjectArray(env, res_var.datalen, arr_of_B_clz, NULL); - ; - for (size_t i = 0; i < res_var.datalen; i++) { - int8_tArray arr_conv_8_arr = (*env)->NewByteArray(env, 64); - (*env)->SetByteArrayRegion(env, arr_conv_8_arr, 0, 64, res_var.data[i].compact_form); - (*env)->SetObjectArrayElement(env, res_arr, i, arr_conv_8_arr); - } - return res_arr; -} -JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)arg; + LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } @@ -1517,8 +1455,7 @@ typedef struct LDKChannelKeys_JCalls { jmethodID release_commitment_secret_meth; jmethodID key_derivation_params_meth; jmethodID sign_counterparty_commitment_meth; - jmethodID sign_holder_commitment_meth; - jmethodID sign_holder_commitment_htlc_transactions_meth; + jmethodID sign_holder_commitment_and_htlcs_meth; jmethodID sign_justice_transaction_meth; jmethodID sign_counterparty_htlc_transaction_meth; jmethodID sign_closing_transaction_meth; @@ -1566,7 +1503,7 @@ LDKC2Tuple_u64u64Z key_derivation_params_jcall(const void* this_arg) { jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKC2Tuple_u64u64Z* ret = (LDKC2Tuple_u64u64Z*)(*env)->CallLongMethod(env, obj, j_calls->key_derivation_params_meth); - LDKC2Tuple_u64u64Z ret_conv = *(LDKC2Tuple_u64u64Z*)ret; + LDKC2Tuple_u64u64Z ret_conv = *(LDKC2Tuple_u64u64Z*)(((uint64_t)ret) & ~1); ret_conv = C2Tuple_u64u64Z_clone((LDKC2Tuple_u64u64Z*)ret); return ret_conv; } @@ -1575,8 +1512,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_j JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKCommitmentTransaction commitment_tx_var = *commitment_tx; - if (commitment_tx->inner != NULL) - commitment_tx_var = CommitmentTransaction_clone(commitment_tx); + commitment_tx_var = CommitmentTransaction_clone(commitment_tx); CHECK((((long)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long commitment_tx_ref = (long)commitment_tx_var.inner; @@ -1586,17 +1522,16 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_j jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_counterparty_commitment_meth, commitment_tx_ref); - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)ret; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)ret); return ret_conv; } -LDKCResult_SignatureNoneZ sign_holder_commitment_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) { +LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) { LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKHolderCommitmentTransaction commitment_tx_var = *commitment_tx; - if (commitment_tx->inner != NULL) - commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx); + commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx); CHECK((((long)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long commitment_tx_ref = (long)commitment_tx_var.inner; @@ -1605,29 +1540,9 @@ LDKCResult_SignatureNoneZ sign_holder_commitment_jcall(const void* this_arg, con } jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); - LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_holder_commitment_meth, commitment_tx_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; - ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); - return ret_conv; -} -LDKCResult_CVec_SignatureZNoneZ sign_holder_commitment_htlc_transactions_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) { - LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; - JNIEnv *env; - DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); - LDKHolderCommitmentTransaction commitment_tx_var = *commitment_tx; - if (commitment_tx->inner != NULL) - commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx); - CHECK((((long)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. - CHECK((((long)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long commitment_tx_ref = (long)commitment_tx_var.inner; - if (commitment_tx_var.is_owned) { - commitment_tx_ref |= 1; - } - jobject obj = (*env)->NewLocalRef(env, j_calls->o); - CHECK(obj != NULL); - LDKCResult_CVec_SignatureZNoneZ* ret = (LDKCResult_CVec_SignatureZNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_holder_commitment_htlc_transactions_meth, commitment_tx_ref); - LDKCResult_CVec_SignatureZNoneZ ret_conv = *(LDKCResult_CVec_SignatureZNoneZ*)ret; - ret_conv = CResult_CVec_SignatureZNoneZ_clone((LDKCResult_CVec_SignatureZNoneZ*)ret); + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_holder_commitment_and_htlcs_meth, commitment_tx_ref); + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)ret); return ret_conv; } LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) { @@ -1641,8 +1556,7 @@ LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, L int8_tArray per_commitment_key_arr = (*env)->NewByteArray(env, 32); (*env)->SetByteArrayRegion(env, per_commitment_key_arr, 0, 32, *per_commitment_key); LDKHTLCOutputInCommitment htlc_var = *htlc; - if (htlc->inner != NULL) - htlc_var = HTLCOutputInCommitment_clone(htlc); + htlc_var = HTLCOutputInCommitment_clone(htlc); CHECK((((long)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long htlc_ref = (long)htlc_var.inner; @@ -1652,7 +1566,7 @@ LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, L jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_justice_transaction_meth, justice_tx_arr, input, amount, per_commitment_key_arr, htlc_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } @@ -1667,8 +1581,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_jcall(const void* t int8_tArray per_commitment_point_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, per_commitment_point_arr, 0, 33, per_commitment_point.compressed_form); LDKHTLCOutputInCommitment htlc_var = *htlc; - if (htlc->inner != NULL) - htlc_var = HTLCOutputInCommitment_clone(htlc); + htlc_var = HTLCOutputInCommitment_clone(htlc); CHECK((((long)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long htlc_ref = (long)htlc_var.inner; @@ -1678,7 +1591,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_jcall(const void* t jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_counterparty_htlc_transaction_meth, htlc_tx_arr, input, amount, per_commitment_point_arr, htlc_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } @@ -1693,7 +1606,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_jcall(const void* this_arg, L jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_closing_transaction_meth, closing_tx_arr); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } @@ -1702,8 +1615,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_jcall(const void* this_arg, JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKUnsignedChannelAnnouncement msg_var = *msg; - if (msg->inner != NULL) - msg_var = UnsignedChannelAnnouncement_clone(msg); + msg_var = UnsignedChannelAnnouncement_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -1713,7 +1625,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_jcall(const void* this_arg, jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)(*env)->CallLongMethod(env, obj, j_calls->sign_channel_announcement_meth, msg_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } @@ -1722,8 +1634,7 @@ void ready_channel_jcall(void* this_arg, const LDKChannelTransactionParameters * JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKChannelTransactionParameters channel_parameters_var = *channel_parameters; - if (channel_parameters->inner != NULL) - channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters); + channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters); CHECK((((long)channel_parameters_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&channel_parameters_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long channel_parameters_ref = (long)channel_parameters_var.inner; @@ -1767,10 +1678,8 @@ static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv *env, jclass clz, jobje CHECK(calls->key_derivation_params_meth != NULL); calls->sign_counterparty_commitment_meth = (*env)->GetMethodID(env, c, "sign_counterparty_commitment", "(J)J"); CHECK(calls->sign_counterparty_commitment_meth != NULL); - calls->sign_holder_commitment_meth = (*env)->GetMethodID(env, c, "sign_holder_commitment", "(J)J"); - CHECK(calls->sign_holder_commitment_meth != NULL); - calls->sign_holder_commitment_htlc_transactions_meth = (*env)->GetMethodID(env, c, "sign_holder_commitment_htlc_transactions", "(J)J"); - CHECK(calls->sign_holder_commitment_htlc_transactions_meth != NULL); + calls->sign_holder_commitment_and_htlcs_meth = (*env)->GetMethodID(env, c, "sign_holder_commitment_and_htlcs", "(J)J"); + CHECK(calls->sign_holder_commitment_and_htlcs_meth != NULL); calls->sign_justice_transaction_meth = (*env)->GetMethodID(env, c, "sign_justice_transaction", "([BJJ[BJ)J"); CHECK(calls->sign_justice_transaction_meth != NULL); calls->sign_counterparty_htlc_transaction_meth = (*env)->GetMethodID(env, c, "sign_counterparty_htlc_transaction", "([BJJ[BJ)J"); @@ -1787,8 +1696,7 @@ static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv *env, jclass clz, jobje LDKChannelPublicKeys pubkeys_conv; pubkeys_conv.inner = (void*)(pubkeys & (~1)); pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0); - if (pubkeys_conv.inner != NULL) - pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv); + pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv); LDKChannelKeys ret = { .this_arg = (void*) calls, @@ -1796,8 +1704,7 @@ static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv *env, jclass clz, jobje .release_commitment_secret = release_commitment_secret_jcall, .key_derivation_params = key_derivation_params_jcall, .sign_counterparty_commitment = sign_counterparty_commitment_jcall, - .sign_holder_commitment = sign_holder_commitment_jcall, - .sign_holder_commitment_htlc_transactions = sign_holder_commitment_htlc_transactions_jcall, + .sign_holder_commitment_and_htlcs = sign_holder_commitment_and_htlcs_jcall, .sign_justice_transaction = sign_justice_transaction_jcall, .sign_counterparty_htlc_transaction = sign_counterparty_htlc_transaction_jcall, .sign_closing_transaction = sign_closing_transaction_jcall, @@ -1847,23 +1754,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1counterp return (long)ret_conv; } -JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1commitment(JNIEnv *env, jclass clz, int64_t this_arg, int64_t commitment_tx) { +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1commitment_1and_1htlcs(JNIEnv *env, jclass clz, int64_t this_arg, int64_t commitment_tx) { LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; LDKHolderCommitmentTransaction commitment_tx_conv; commitment_tx_conv.inner = (void*)(commitment_tx & (~1)); commitment_tx_conv.is_owned = false; - LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ"); - *ret_conv = (this_arg_conv->sign_holder_commitment)(this_arg_conv->this_arg, &commitment_tx_conv); - return (long)ret_conv; -} - -JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1commitment_1htlc_1transactions(JNIEnv *env, jclass clz, int64_t this_arg, int64_t commitment_tx) { - LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; - LDKHolderCommitmentTransaction commitment_tx_conv; - commitment_tx_conv.inner = (void*)(commitment_tx & (~1)); - commitment_tx_conv.is_owned = false; - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = (this_arg_conv->sign_holder_commitment_htlc_transactions)(this_arg_conv->this_arg, &commitment_tx_conv); + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ"); + *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv); return (long)ret_conv; } @@ -1969,18 +1866,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1BlockHashChanne LDKChannelMonitor b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + b_conv = ChannelMonitor_clone(&b_conv); ret->b = b_conv; return (long)ret; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1BlockHashChannelMonitorZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)ptr; + LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)(ptr & ~1); int8_tArray a_arr = (*env)->NewByteArray(env, 32); (*env)->SetByteArrayRegion(env, a_arr, 0, 32, tuple->a.data); return a_arr; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1BlockHashChannelMonitorZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)ptr; + LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)(ptr & ~1); LDKChannelMonitor b_var = tuple->b; CHECK((((long)b_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&b_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -1991,13 +1888,13 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1Block return ((LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = (long)(&(*val->contents.result)) | 1; return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2009,13 +1906,13 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutpu return ((LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg; + LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = ((long)&(*val->contents.result)) | 1; return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg; + LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2027,14 +1924,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChanKeySignerD return ((LDKCResult_ChanKeySignerDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChanKeySignerDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)arg; + LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKChannelKeys* ret = MALLOC(sizeof(LDKChannelKeys), "LDKChannelKeys"); - *ret = (*val->contents.result); + *ret = ChannelKeys_clone(&(*val->contents.result)); return (long)ret; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChanKeySignerDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)arg; + LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2046,7 +1943,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemoryChanne return ((LDKCResult_InMemoryChannelKeysDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemoryChannelKeysDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)arg; + LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKInMemoryChannelKeys res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2055,7 +1952,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemoryChannel return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemoryChannelKeysDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)arg; + LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2067,30 +1964,17 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErr return ((LDKCResult_TxOutAccessErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)arg; + LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = ((long)&(*val->contents.result)) | 1; return (long)res_ref; } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)arg; + LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1); CHECK(!val->result_ok); jclass err_conv = LDKAccessError_to_java(env, (*val->contents.err)); return err_conv; } -static inline LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_clone(const LDKCResult_TxOutAccessErrorZ *orig) { - LDKCResult_TxOutAccessErrorZ res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - LDKTxOut* contents = MALLOC(sizeof(LDKTxOut), "LDKTxOut result OK clone"); - *contents = TxOut_clone(orig->contents.result); - res.contents.result = contents; - } else { - LDKAccessError* contents = MALLOC(sizeof(LDKAccessError), "LDKAccessError result Err clone"); - *contents = AccessError_clone(orig->contents.err); - res.contents.err = contents; - } - return res; -} static jclass LDKAPIError_APIMisuseError_class = NULL; static jmethodID LDKAPIError_APIMisuseError_meth = NULL; static jclass LDKAPIError_FeeRateTooHigh_class = NULL; @@ -2164,27 +2048,16 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_ return ((LDKCResult_NoneAPIErrorZ*)arg)->result_ok; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)arg; + LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)arg; + LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1); CHECK(!val->result_ok); - long err_ref = (long)&(*val->contents.err); + long err_ref = ((long)&(*val->contents.err)) | 1; return err_ref; } -static inline LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_clone(const LDKCResult_NoneAPIErrorZ *orig) { - LDKCResult_NoneAPIErrorZ res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - res.contents.result = NULL; - } else { - LDKAPIError* contents = MALLOC(sizeof(LDKAPIError), "LDKAPIError result Err clone"); - *contents = APIError_clone(orig->contents.err); - res.contents.err = contents; - } - return res; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelDetailsZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) { LDKCVec_ChannelDetailsZ *ret = MALLOC(sizeof(LDKCVec_ChannelDetailsZ), "LDKCVec_ChannelDetailsZ"); ret->datalen = (*env)->GetArrayLength(env, elems); @@ -2198,8 +2071,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelDetailsZ_1n LDKChannelDetails arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = ChannelDetails_clone(&arr_elem_conv); + arr_elem_conv = ChannelDetails_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -2217,12 +2089,12 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSen return ((LDKCResult_NonePaymentSendFailureZ*)arg)->result_ok; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)arg; + LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)arg; + LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1); CHECK(!val->result_ok); LDKPaymentSendFailure err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2296,7 +2168,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NetAddressZ_1new(J int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKNetAddress arr_elem_conv = *(LDKNetAddress*)arr_elem; + LDKNetAddress arr_elem_conv = *(LDKNetAddress*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -2324,13 +2196,20 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelMonitorZ_1n LDKChannelMonitor arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - // Warning: we may need a move here but can't clone! + arr_elem_conv = ChannelMonitor_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); } return (long)ret; } +static inline LDKCVec_ChannelMonitorZ CVec_ChannelMonitorZ_clone(const LDKCVec_ChannelMonitorZ *orig) { + LDKCVec_ChannelMonitorZ ret = { .data = MALLOC(sizeof(LDKChannelMonitor) * orig->datalen, "LDKCVec_ChannelMonitorZ clone bytes"), .datalen = orig->datalen }; + for (size_t i = 0; i < ret.datalen; i++) { + ret.data[i] = ChannelMonitor_clone(&orig->data[i]); + } + return ret; +} typedef struct LDKWatch_JCalls { atomic_size_t refcnt; JavaVM *vm; @@ -2369,7 +2248,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_jcall(const void* this_arg jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(*env)->CallLongMethod(env, obj, j_calls->watch_channel_meth, funding_txo_ref, monitor_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -2394,7 +2273,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_jcall(const void* this_ar jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(*env)->CallLongMethod(env, obj, j_calls->update_channel_meth, funding_txo_ref, update_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -2417,8 +2296,7 @@ LDKCVec_MonitorEventZ release_pending_monitor_events_jcall(const void* this_arg) LDKMonitorEvent arr_conv_14_conv; arr_conv_14_conv.inner = (void*)(arr_conv_14 & (~1)); arr_conv_14_conv.is_owned = (arr_conv_14 & 1) || (arr_conv_14 == 0); - if (arr_conv_14_conv.inner != NULL) - arr_conv_14_conv = MonitorEvent_clone(&arr_conv_14_conv); + arr_conv_14_conv = MonitorEvent_clone(&arr_conv_14_conv); arg_constr.data[o] = arr_conv_14_conv; } (*env)->ReleaseLongArrayElements(env, arg, arg_vals, 0); @@ -2462,12 +2340,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEn LDKOutPoint funding_txo_conv; funding_txo_conv.inner = (void*)(funding_txo & (~1)); funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0); - if (funding_txo_conv.inner != NULL) - funding_txo_conv = OutPoint_clone(&funding_txo_conv); + funding_txo_conv = OutPoint_clone(&funding_txo_conv); LDKChannelMonitor monitor_conv; monitor_conv.inner = (void*)(monitor & (~1)); monitor_conv.is_owned = (monitor & 1) || (monitor == 0); - // Warning: we may need a move here but can't clone! + monitor_conv = ChannelMonitor_clone(&monitor_conv); LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ"); *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv); return (long)ret_conv; @@ -2478,13 +2355,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1update_1channel(JNIE LDKOutPoint funding_txo_conv; funding_txo_conv.inner = (void*)(funding_txo & (~1)); funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0); - if (funding_txo_conv.inner != NULL) - funding_txo_conv = OutPoint_clone(&funding_txo_conv); + funding_txo_conv = OutPoint_clone(&funding_txo_conv); LDKChannelMonitorUpdate update_conv; update_conv.inner = (void*)(update & (~1)); update_conv.is_owned = (update & 1) || (update == 0); - if (update_conv.inner != NULL) - update_conv = ChannelMonitorUpdate_clone(&update_conv); + update_conv = ChannelMonitorUpdate_clone(&update_conv); LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ"); *ret_conv = (this_arg_conv->update_channel)(this_arg_conv->this_arg, funding_txo_conv, update_conv); return (long)ret_conv; @@ -2638,7 +2513,7 @@ LDKChannelKeys get_channel_keys_jcall(const void* this_arg, bool inbound, uint64 jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKChannelKeys* ret = (LDKChannelKeys*)(*env)->CallLongMethod(env, obj, j_calls->get_channel_keys_meth, inbound, channel_value_satoshis); - LDKChannelKeys ret_conv = *(LDKChannelKeys*)ret; + LDKChannelKeys ret_conv = *(LDKChannelKeys*)(((uint64_t)ret) & ~1); ret_conv = ChannelKeys_clone(ret); return ret_conv; } @@ -2664,8 +2539,8 @@ LDKCResult_ChanKeySignerDecodeErrorZ read_chan_signer_jcall(const void* this_arg jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_ChanKeySignerDecodeErrorZ* ret = (LDKCResult_ChanKeySignerDecodeErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->read_chan_signer_meth, reader_arr); - LDKCResult_ChanKeySignerDecodeErrorZ ret_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_ChanKeySignerDecodeErrorZ ret_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_ChanKeySignerDecodeErrorZ_clone((LDKCResult_ChanKeySignerDecodeErrorZ*)ret); return ret_conv; } static void* LDKKeysInterface_JCalls_clone(const void* this_arg) { @@ -2877,18 +2752,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1BlockHashChanne LDKChannelManager b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelManager ret->b = b_conv; return (long)ret; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1BlockHashChannelManagerZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)ptr; + LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)(ptr & ~1); int8_tArray a_arr = (*env)->NewByteArray(env, 32); (*env)->SetByteArrayRegion(env, a_arr, 0, 32, tuple->a.data); return a_arr; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC2Tuple_1BlockHashChannelManagerZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)ptr; + LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)(ptr & ~1); LDKChannelManager b_var = tuple->b; CHECK((((long)b_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&b_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -2899,13 +2774,13 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1Block return ((LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = (long)(&(*val->contents.result)) | 1; return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2917,34 +2792,21 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressu8Z_ return ((LDKCResult_NetAddressu8Z*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressu8Z_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)arg; + LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = ((long)&(*val->contents.result)) | 1; return res_ref; } JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressu8Z_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)arg; + LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } -static inline LDKCResult_NetAddressu8Z CResult_NetAddressu8Z_clone(const LDKCResult_NetAddressu8Z *orig) { - LDKCResult_NetAddressu8Z res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - LDKNetAddress* contents = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress result OK clone"); - *contents = NetAddress_clone(orig->contents.result); - res.contents.result = contents; - } else { - int8_t* contents = MALLOC(sizeof(int8_t), "int8_t result Err clone"); - *contents = *orig->contents.err; - res.contents.err = contents; - } - return res; -} JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CResult_1NetAddressu8ZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) { return ((LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CResult_1NetAddressu8ZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)arg; + LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKCResult_NetAddressu8Z* res_conv = MALLOC(sizeof(LDKCResult_NetAddressu8Z), "LDKCResult_NetAddressu8Z"); *res_conv = (*val->contents.result); @@ -2952,7 +2814,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CResult_1NetAdd return (long)res_conv; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CResult_1NetAddressu8ZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)arg; + LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2993,8 +2855,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateAddHTLCZ_1ne LDKUpdateAddHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3021,8 +2882,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFulfillHTLCZ LDKUpdateFulfillHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3049,8 +2909,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailHTLCZ_1n LDKUpdateFailHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3077,8 +2936,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailMalforme LDKUpdateFailMalformedHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3096,12 +2954,12 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningE return ((LDKCResult_boolLightningErrorZ*)arg)->result_ok; } JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)arg; + LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)arg; + LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3114,33 +2972,22 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC3Tuple_1ChannelAnnounce LDKChannelAnnouncement a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = ChannelAnnouncement_clone(&a_conv); + a_conv = ChannelAnnouncement_clone(&a_conv); ret->a = a_conv; LDKChannelUpdate b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - if (b_conv.inner != NULL) - b_conv = ChannelUpdate_clone(&b_conv); + b_conv = ChannelUpdate_clone(&b_conv); ret->b = b_conv; LDKChannelUpdate c_conv; c_conv.inner = (void*)(c & (~1)); c_conv.is_owned = (c & 1) || (c == 0); - if (c_conv.inner != NULL) - c_conv = ChannelUpdate_clone(&c_conv); + c_conv = ChannelUpdate_clone(&c_conv); ret->c = c_conv; return (long)ret; } -static inline LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(const LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *orig) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret = { - .a = ChannelAnnouncement_clone(&orig->a), - .b = ChannelUpdate_clone(&orig->b), - .c = ChannelUpdate_clone(&orig->c), - }; - return ret; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1get_1a(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)ptr; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ptr & ~1); LDKChannelAnnouncement a_var = tuple->a; CHECK((((long)a_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&a_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -3148,7 +2995,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC3Tuple_1ChannelAnnounce return a_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1get_1b(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)ptr; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ptr & ~1); LDKChannelUpdate b_var = tuple->b; CHECK((((long)b_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&b_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -3156,7 +3003,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC3Tuple_1ChannelAnnounce return b_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKC3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1get_1c(JNIEnv *env, jclass clz, int64_t ptr) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)ptr; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ptr & ~1); LDKChannelUpdate c_var = tuple->c; CHECK((((long)c_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&c_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -3173,7 +3020,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C3Tuple_1ChannelAn int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL); for (size_t i = 0; i < ret->datalen; i++) { int64_t arr_elem = java_elems[i]; - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)arr_elem; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -3181,13 +3028,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C3Tuple_1ChannelAn } return (long)ret; } -static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_clone(const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *orig) { - LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * orig->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ clone bytes"), .datalen = orig->datalen }; - for (size_t i = 0; i < ret.datalen; i++) { - ret.data[i] = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(&orig->data[i]); - } - return ret; -} JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NodeAnnouncementZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) { LDKCVec_NodeAnnouncementZ *ret = MALLOC(sizeof(LDKCVec_NodeAnnouncementZ), "LDKCVec_NodeAnnouncementZ"); ret->datalen = (*env)->GetArrayLength(env, elems); @@ -3201,8 +3041,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NodeAnnouncementZ_ LDKNodeAnnouncement arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv); + arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3220,12 +3059,12 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningE return ((LDKCResult_NoneLightningErrorZ*)arg)->result_ok; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)arg; + LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)arg; + LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3237,7 +3076,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestab return ((LDKCResult_ChannelReestablishDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)arg; + LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKChannelReestablish res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3246,7 +3085,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestabl return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)arg; + LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3258,7 +3097,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErro return ((LDKCResult_InitDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)arg; + LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKInit res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3267,7 +3106,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeError return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)arg; + LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3279,7 +3118,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErro return ((LDKCResult_PingDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)arg; + LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKPing res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3288,7 +3127,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeError return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)arg; + LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3300,7 +3139,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErro return ((LDKCResult_PongDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)arg; + LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKPong res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3309,7 +3148,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeError return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)arg; + LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3321,7 +3160,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChanne return ((LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKUnsignedChannelAnnouncement res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3330,7 +3169,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3342,7 +3181,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChanne return ((LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKUnsignedChannelUpdate res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3351,7 +3190,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3363,7 +3202,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDe return ((LDKCResult_ErrorMessageDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)arg; + LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKErrorMessage res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3372,7 +3211,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDec return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)arg; + LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3384,7 +3223,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAn return ((LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKUnsignedNodeAnnouncement res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3393,7 +3232,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnn return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3405,7 +3244,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChan return ((LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg; + LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKQueryShortChannelIds res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3414,7 +3253,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChann return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg; + LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3426,7 +3265,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChan return ((LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg; + LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKReplyShortChannelIdsEnd res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3435,7 +3274,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChann return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg; + LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3447,7 +3286,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRa return ((LDKCResult_QueryChannelRangeDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)arg; + LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKQueryChannelRange res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3456,7 +3295,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRan return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)arg; + LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3468,7 +3307,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRa return ((LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg; + LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKReplyChannelRange res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3477,7 +3316,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRan return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg; + LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3489,7 +3328,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestam return ((LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg; + LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKGossipTimestampFilter res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3498,7 +3337,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestamp return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg; + LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3510,7 +3349,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerH return ((LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg)->result_ok; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg; + LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKCVec_u8Z res_var = (*val->contents.result); int8_tArray res_arr = (*env)->NewByteArray(env, res_var.datalen); @@ -3518,7 +3357,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPe return res_arr; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg; + LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3530,12 +3369,12 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandle return ((LDKCResult_NonePeerHandleErrorZ*)arg)->result_ok; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)arg; + LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)arg; + LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3547,12 +3386,12 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandle return ((LDKCResult_boolPeerHandleErrorZ*)arg)->result_ok; } JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)arg; + LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)arg; + LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3564,14 +3403,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeySecpE return ((LDKCResult_SecretKeySecpErrorZ*)arg)->result_ok; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeySecpErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)arg; + LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)(arg & ~1); CHECK(val->result_ok); int8_tArray res_arr = (*env)->NewByteArray(env, 32); (*env)->SetByteArrayRegion(env, res_arr, 0, 32, (*val->contents.result).bytes); return res_arr; } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeySecpErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)arg; + LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)(arg & ~1); CHECK(!val->result_ok); jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err)); return err_conv; @@ -3580,14 +3419,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeySecpE return ((LDKCResult_PublicKeySecpErrorZ*)arg)->result_ok; } JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeySecpErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)arg; + LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)(arg & ~1); CHECK(val->result_ok); int8_tArray res_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, res_arr, 0, 33, (*val->contents.result).compressed_form); return res_arr; } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeySecpErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)arg; + LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)(arg & ~1); CHECK(!val->result_ok); jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err)); return err_conv; @@ -3596,7 +3435,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeys return ((LDKCResult_TxCreationKeysSecpErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysSecpErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)arg; + LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKTxCreationKeys res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3605,7 +3444,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysS return res_ref; } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysSecpErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)arg; + LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)(arg & ~1); CHECK(!val->result_ok); jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err)); return err_conv; @@ -3614,7 +3453,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitm return ((LDKCResult_TrustedCommitmentTransactionNoneZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)arg; + LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1); CHECK(val->result_ok); LDKTrustedCommitmentTransaction res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3623,7 +3462,28 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitme return res_ref; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)arg; + LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1); + CHECK(!val->result_ok); + return *val->contents.err; +} +JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) { + return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok; +} +JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { + LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1); + CHECK(val->result_ok); + LDKCVec_SignatureZ res_var = (*val->contents.result); + jobjectArray res_arr = (*env)->NewObjectArray(env, res_var.datalen, arr_of_B_clz, NULL); + ; + for (size_t i = 0; i < res_var.datalen; i++) { + int8_tArray arr_conv_8_arr = (*env)->NewByteArray(env, 64); + (*env)->SetByteArrayRegion(env, arr_conv_8_arr, 0, 64, res_var.data[i].compact_form); + (*env)->SetObjectArrayElement(env, res_arr, i, arr_conv_8_arr); + } + return res_arr; +} +JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { + LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } @@ -3640,8 +3500,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHopZ_1new(JNI LDKRouteHop arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = RouteHop_clone(&arr_elem_conv); + arr_elem_conv = RouteHop_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3666,7 +3525,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErr return ((LDKCResult_RouteDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)arg; + LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKRoute res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3675,7 +3534,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErro return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)arg; + LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3696,8 +3555,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintZ_1new(JN LDKRouteHint arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = RouteHint_clone(&arr_elem_conv); + arr_elem_conv = RouteHint_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -3715,7 +3573,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightning return ((LDKCResult_RouteLightningErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)arg; + LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKRoute res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3724,7 +3582,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningE return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)arg; + LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3736,7 +3594,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDec return ((LDKCResult_RoutingFeesDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)arg; + LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKRoutingFees res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3745,7 +3603,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDeco return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)arg; + LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3757,7 +3615,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnounceme return ((LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg; + LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKNodeAnnouncementInfo res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3766,7 +3624,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg; + LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3778,7 +3636,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecode return ((LDKCResult_NodeInfoDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)arg; + LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKNodeInfo res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3787,7 +3645,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeE return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)arg; + LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3799,7 +3657,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDe return ((LDKCResult_NetworkGraphDecodeErrorZ*)arg)->result_ok; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)arg; + LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKNetworkGraph res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3808,7 +3666,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDec return res_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) { - LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)arg; + LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3847,7 +3705,7 @@ LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_jcall(const void* thi int64_t* arg_vals = (*env)->GetLongArrayElements (env, arg, NULL); for (size_t s = 0; s < arg_constr.datalen; s++) { int64_t arr_conv_18 = arg_vals[s]; - LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)arr_conv_18; + LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)(((uint64_t)arr_conv_18) & ~1); FREE((void*)arr_conv_18); arg_constr.data[s] = arr_conv_18_conv; } @@ -3928,7 +3786,7 @@ LDKCVec_EventZ get_and_clear_pending_events_jcall(const void* this_arg) { int64_t* arg_vals = (*env)->GetLongArrayElements (env, arg, NULL); for (size_t h = 0; h < arg_constr.datalen; h++) { int64_t arr_conv_7 = arg_vals[h]; - LDKEvent arr_conv_7_conv = *(LDKEvent*)arr_conv_7; + LDKEvent arr_conv_7_conv = *(LDKEvent*)(((uint64_t)arr_conv_7) & ~1); FREE((void*)arr_conv_7); arg_constr.data[h] = arr_conv_7_conv; } @@ -4002,7 +3860,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_jcall(const void* this_arg, const uint8_t jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_TxOutAccessErrorZ* ret = (LDKCResult_TxOutAccessErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->get_utxo_meth, genesis_hash_arr, short_channel_id); - LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)ret; + LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_TxOutAccessErrorZ_clone((LDKCResult_TxOutAccessErrorZ*)ret); return ret_conv; } @@ -4078,8 +3936,7 @@ void register_output_jcall(const void* this_arg, const LDKOutPoint * outpoint, L JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKOutPoint outpoint_var = *outpoint; - if (outpoint->inner != NULL) - outpoint_var = OutPoint_clone(outpoint); + outpoint_var = OutPoint_clone(outpoint); CHECK((((long)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long outpoint_ref = (long)outpoint_var.inner; @@ -4176,7 +4033,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_jcall(const void* th id_ref |= 1; } LDKChannelMonitor data_var = *data; - // Warning: we may need a move here but can't clone! + data_var = ChannelMonitor_clone(data); CHECK((((long)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long data_ref = (long)data_var.inner; @@ -4186,7 +4043,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_jcall(const void* th jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(*env)->CallLongMethod(env, obj, j_calls->persist_new_channel_meth, id_ref, data_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -4202,8 +4059,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_jcall(const voi id_ref |= 1; } LDKChannelMonitorUpdate update_var = *update; - if (update->inner != NULL) - update_var = ChannelMonitorUpdate_clone(update); + update_var = ChannelMonitorUpdate_clone(update); CHECK((((long)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long update_ref = (long)update_var.inner; @@ -4211,7 +4067,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_jcall(const voi update_ref |= 1; } LDKChannelMonitor data_var = *data; - // Warning: we may need a move here but can't clone! + data_var = ChannelMonitor_clone(data); CHECK((((long)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long data_ref = (long)data_var.inner; @@ -4221,7 +4077,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_jcall(const voi jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(*env)->CallLongMethod(env, obj, j_calls->update_persisted_channel_meth, id_ref, update_ref, data_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -4260,8 +4116,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1chan LDKOutPoint id_conv; id_conv.inner = (void*)(id & (~1)); id_conv.is_owned = (id & 1) || (id == 0); - if (id_conv.inner != NULL) - id_conv = OutPoint_clone(&id_conv); + id_conv = OutPoint_clone(&id_conv); LDKChannelMonitor data_conv; data_conv.inner = (void*)(data & (~1)); data_conv.is_owned = false; @@ -4275,8 +4130,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_ LDKOutPoint id_conv; id_conv.inner = (void*)(id & (~1)); id_conv.is_owned = (id & 1) || (id == 0); - if (id_conv.inner != NULL) - id_conv = OutPoint_clone(&id_conv); + id_conv = OutPoint_clone(&id_conv); LDKChannelMonitorUpdate update_conv; update_conv.inner = (void*)(update & (~1)); update_conv.is_owned = false; @@ -4336,8 +4190,7 @@ void handle_open_channel_jcall(const void* this_arg, LDKPublicKey their_node_id, their_features_ref |= 1; } LDKOpenChannel msg_var = *msg; - if (msg->inner != NULL) - msg_var = OpenChannel_clone(msg); + msg_var = OpenChannel_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4362,8 +4215,7 @@ void handle_accept_channel_jcall(const void* this_arg, LDKPublicKey their_node_i their_features_ref |= 1; } LDKAcceptChannel msg_var = *msg; - if (msg->inner != NULL) - msg_var = AcceptChannel_clone(msg); + msg_var = AcceptChannel_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4381,8 +4233,7 @@ void handle_funding_created_jcall(const void* this_arg, LDKPublicKey their_node_ int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKFundingCreated msg_var = *msg; - if (msg->inner != NULL) - msg_var = FundingCreated_clone(msg); + msg_var = FundingCreated_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4400,8 +4251,7 @@ void handle_funding_signed_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKFundingSigned msg_var = *msg; - if (msg->inner != NULL) - msg_var = FundingSigned_clone(msg); + msg_var = FundingSigned_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4419,8 +4269,7 @@ void handle_funding_locked_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKFundingLocked msg_var = *msg; - if (msg->inner != NULL) - msg_var = FundingLocked_clone(msg); + msg_var = FundingLocked_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4438,8 +4287,7 @@ void handle_shutdown_jcall(const void* this_arg, LDKPublicKey their_node_id, con int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKShutdown msg_var = *msg; - if (msg->inner != NULL) - msg_var = Shutdown_clone(msg); + msg_var = Shutdown_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4457,8 +4305,7 @@ void handle_closing_signed_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKClosingSigned msg_var = *msg; - if (msg->inner != NULL) - msg_var = ClosingSigned_clone(msg); + msg_var = ClosingSigned_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4476,8 +4323,7 @@ void handle_update_add_htlc_jcall(const void* this_arg, LDKPublicKey their_node_ int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKUpdateAddHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateAddHTLC_clone(msg); + msg_var = UpdateAddHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4495,8 +4341,7 @@ void handle_update_fulfill_htlc_jcall(const void* this_arg, LDKPublicKey their_n int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKUpdateFulfillHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFulfillHTLC_clone(msg); + msg_var = UpdateFulfillHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4514,8 +4359,7 @@ void handle_update_fail_htlc_jcall(const void* this_arg, LDKPublicKey their_node int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKUpdateFailHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFailHTLC_clone(msg); + msg_var = UpdateFailHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4533,8 +4377,7 @@ void handle_update_fail_malformed_htlc_jcall(const void* this_arg, LDKPublicKey int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKUpdateFailMalformedHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFailMalformedHTLC_clone(msg); + msg_var = UpdateFailMalformedHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4552,8 +4395,7 @@ void handle_commitment_signed_jcall(const void* this_arg, LDKPublicKey their_nod int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKCommitmentSigned msg_var = *msg; - if (msg->inner != NULL) - msg_var = CommitmentSigned_clone(msg); + msg_var = CommitmentSigned_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4571,8 +4413,7 @@ void handle_revoke_and_ack_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKRevokeAndACK msg_var = *msg; - if (msg->inner != NULL) - msg_var = RevokeAndACK_clone(msg); + msg_var = RevokeAndACK_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4590,8 +4431,7 @@ void handle_update_fee_jcall(const void* this_arg, LDKPublicKey their_node_id, c int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKUpdateFee msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFee_clone(msg); + msg_var = UpdateFee_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4609,8 +4449,7 @@ void handle_announcement_signatures_jcall(const void* this_arg, LDKPublicKey the int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKAnnouncementSignatures msg_var = *msg; - if (msg->inner != NULL) - msg_var = AnnouncementSignatures_clone(msg); + msg_var = AnnouncementSignatures_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4638,8 +4477,7 @@ void peer_connected_jcall(const void* this_arg, LDKPublicKey their_node_id, cons int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKInit msg_var = *msg; - if (msg->inner != NULL) - msg_var = Init_clone(msg); + msg_var = Init_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4657,8 +4495,7 @@ void handle_channel_reestablish_jcall(const void* this_arg, LDKPublicKey their_n int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKChannelReestablish msg_var = *msg; - if (msg->inner != NULL) - msg_var = ChannelReestablish_clone(msg); + msg_var = ChannelReestablish_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4676,8 +4513,7 @@ void handle_error_jcall(const void* this_arg, LDKPublicKey their_node_id, const int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKErrorMessage msg_var = *msg; - if (msg->inner != NULL) - msg_var = ErrorMessage_clone(msg); + msg_var = ErrorMessage_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4780,7 +4616,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_ LDKInitFeatures their_features_conv; their_features_conv.inner = (void*)(their_features & (~1)); their_features_conv.is_owned = (their_features & 1) || (their_features == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKInitFeatures LDKOpenChannel msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = false; @@ -4795,7 +4631,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_ LDKInitFeatures their_features_conv; their_features_conv.inner = (void*)(their_features & (~1)); their_features_conv.is_owned = (their_features & 1) || (their_features == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKInitFeatures LDKAcceptChannel msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = false; @@ -5017,8 +4853,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_jcall(const void* this_a JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKNodeAnnouncement msg_var = *msg; - if (msg->inner != NULL) - msg_var = NodeAnnouncement_clone(msg); + msg_var = NodeAnnouncement_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -5028,8 +4863,8 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_jcall(const void* this_a jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_boolLightningErrorZ* ret = (LDKCResult_boolLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_node_announcement_meth, msg_ref); - LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)ret); return ret_conv; } LDKCResult_boolLightningErrorZ handle_channel_announcement_jcall(const void* this_arg, const LDKChannelAnnouncement * msg) { @@ -5037,8 +4872,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_jcall(const void* thi JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKChannelAnnouncement msg_var = *msg; - if (msg->inner != NULL) - msg_var = ChannelAnnouncement_clone(msg); + msg_var = ChannelAnnouncement_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -5048,8 +4882,8 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_jcall(const void* thi jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_boolLightningErrorZ* ret = (LDKCResult_boolLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_channel_announcement_meth, msg_ref); - LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)ret); return ret_conv; } LDKCResult_boolLightningErrorZ handle_channel_update_jcall(const void* this_arg, const LDKChannelUpdate * msg) { @@ -5057,8 +4891,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_jcall(const void* this_arg, JNIEnv *env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_8) == JNI_OK); LDKChannelUpdate msg_var = *msg; - if (msg->inner != NULL) - msg_var = ChannelUpdate_clone(msg); + msg_var = ChannelUpdate_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -5068,8 +4901,8 @@ LDKCResult_boolLightningErrorZ handle_channel_update_jcall(const void* this_arg, jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_boolLightningErrorZ* ret = (LDKCResult_boolLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_channel_update_meth, msg_ref); - LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)ret); return ret_conv; } void handle_htlc_fail_channel_update_jcall(const void* this_arg, const LDKHTLCFailChannelUpdate * update) { @@ -5097,7 +4930,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel int64_t* arg_vals = (*env)->GetLongArrayElements (env, arg, NULL); for (size_t l = 0; l < arg_constr.datalen; l++) { int64_t arr_conv_63 = arg_vals[l]; - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)arr_conv_63; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_conv_63) & ~1); FREE((void*)arr_conv_63); arg_constr.data[l] = arr_conv_63_conv; } @@ -5125,8 +4958,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_jcall(const void* this_arg LDKNodeAnnouncement arr_conv_18_conv; arr_conv_18_conv.inner = (void*)(arr_conv_18 & (~1)); arr_conv_18_conv.is_owned = (arr_conv_18 & 1) || (arr_conv_18 == 0); - if (arr_conv_18_conv.inner != NULL) - arr_conv_18_conv = NodeAnnouncement_clone(&arr_conv_18_conv); + arr_conv_18_conv = NodeAnnouncement_clone(&arr_conv_18_conv); arg_constr.data[s] = arr_conv_18_conv; } (*env)->ReleaseLongArrayElements(env, arg, arg_vals, 0); @@ -5139,8 +4971,7 @@ void sync_routing_table_jcall(const void* this_arg, LDKPublicKey their_node_id, int8_tArray their_node_id_arr = (*env)->NewByteArray(env, 33); (*env)->SetByteArrayRegion(env, their_node_id_arr, 0, 33, their_node_id.compressed_form); LDKInit init_var = *init; - if (init->inner != NULL) - init_var = Init_clone(init); + init_var = Init_clone(init); CHECK((((long)init_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&init_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long init_ref = (long)init_var.inner; @@ -5167,8 +4998,8 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_jcall(const void* this jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_reply_channel_range_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKReplyShortChannelIdsEnd msg) { @@ -5187,8 +5018,8 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_jcall(const vo jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_reply_short_channel_ids_end_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } LDKCResult_NoneLightningErrorZ handle_query_channel_range_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryChannelRange msg) { @@ -5207,8 +5038,8 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_jcall(const void* this jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_query_channel_range_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryShortChannelIds msg) { @@ -5227,8 +5058,8 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_jcall(const void* jobject obj = (*env)->NewLocalRef(env, j_calls->o); CHECK(obj != NULL); LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)(*env)->CallLongMethod(env, obj, j_calls->handle_query_short_channel_ids_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } static void* LDKRoutingMessageHandler_JCalls_clone(const void* this_arg) { @@ -5335,9 +5166,6 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_ for (size_t l = 0; l < ret_var.datalen; l++) { LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* arr_conv_63_ref = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ"); *arr_conv_63_ref = ret_var.data[l]; - arr_conv_63_ref->a = ChannelAnnouncement_clone(&arr_conv_63_ref->a); - arr_conv_63_ref->b = ChannelUpdate_clone(&arr_conv_63_ref->b); - arr_conv_63_ref->c = ChannelUpdate_clone(&arr_conv_63_ref->c); ret_arr_ptr[l] = (long)arr_conv_63_ref; } (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0); @@ -5387,8 +5215,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand LDKReplyChannelRange msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = ReplyChannelRange_clone(&msg_conv); + msg_conv = ReplyChannelRange_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_reply_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -5402,8 +5229,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand LDKReplyShortChannelIdsEnd msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv); + msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_reply_short_channel_ids_end)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -5417,8 +5243,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand LDKQueryChannelRange msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = QueryChannelRange_clone(&msg_conv); + msg_conv = QueryChannelRange_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_query_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -5432,8 +5257,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand LDKQueryShortChannelIds msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = QueryShortChannelIds_clone(&msg_conv); + msg_conv = QueryShortChannelIds_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_query_short_channel_ids)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -5562,13 +5386,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Transaction_1free(JNIEnv *env, } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxOut_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKTxOut _res_conv = *(LDKTxOut*)_res; + if ((_res & 1) != 0) return; + LDKTxOut _res_conv = *(LDKTxOut*)(((uint64_t)_res) & ~1); FREE((void*)_res); TxOut_free(_res_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxOut_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKTxOut* orig_conv = (LDKTxOut*)orig; + LDKTxOut* orig_conv = (LDKTxOut*)(orig & ~1); LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut"); *ret_ref = TxOut_clone(orig_conv); return (long)ret_ref; @@ -5584,7 +5409,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SpendableOutputDescripto int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t b = 0; b < _res_constr.datalen; b++) { int64_t arr_conv_27 = _res_vals[b]; - LDKSpendableOutputDescriptor arr_conv_27_conv = *(LDKSpendableOutputDescriptor*)arr_conv_27; + LDKSpendableOutputDescriptor arr_conv_27_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)arr_conv_27) & ~1); FREE((void*)arr_conv_27); _res_constr.data[b] = arr_conv_27_conv; } @@ -5602,7 +5427,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1MessageSendEventZ_1free( int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t s = 0; s < _res_constr.datalen; s++) { int64_t arr_conv_18 = _res_vals[s]; - LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)arr_conv_18; + LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)(((uint64_t)arr_conv_18) & ~1); FREE((void*)arr_conv_18); _res_constr.data[s] = arr_conv_18_conv; } @@ -5620,7 +5445,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1EventZ_1free(JNIEnv *env int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t h = 0; h < _res_constr.datalen; h++) { int64_t arr_conv_7 = _res_vals[h]; - LDKEvent arr_conv_7_conv = *(LDKEvent*)arr_conv_7; + LDKEvent arr_conv_7_conv = *(LDKEvent*)(((uint64_t)arr_conv_7) & ~1); FREE((void*)arr_conv_7); _res_constr.data[h] = arr_conv_7_conv; } @@ -5629,7 +5454,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1EventZ_1free(JNIEnv *env } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_usizeTransactionZ _res_conv = *(LDKC2Tuple_usizeTransactionZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_usizeTransactionZ _res_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_usizeTransactionZ_free(_res_conv); } @@ -5642,7 +5468,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_ b_ref.data_is_owned = true; LDKC2Tuple_usizeTransactionZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ"); *ret_ref = C2Tuple_usizeTransactionZ_new(a, b_ref); - // XXX: We likely need to clone here, but no _clone fn is available for byte[] return (long)ret_ref; } @@ -5656,7 +5481,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1usizeTransactio int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t y = 0; y < _res_constr.datalen; y++) { int64_t arr_conv_24 = _res_vals[y]; - LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_24; + LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_24) & ~1); FREE((void*)arr_conv_24); _res_constr.data[y] = arr_conv_24_conv; } @@ -5678,11 +5503,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitor } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NoneChannelMonitorUpdateErrZ _res_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneChannelMonitorUpdateErrZ _res_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneChannelMonitorUpdateErrZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NoneChannelMonitorUpdateErrZ* orig_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(orig & ~1); + LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ"); + *ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1MonitorEventZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) { LDKCVec_MonitorEventZ _res_constr; _res_constr.datalen = (*env)->GetArrayLength(env, _res); @@ -5706,8 +5539,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda LDKChannelMonitorUpdate o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ChannelMonitorUpdate_clone(&o_conv); + o_conv = ChannelMonitorUpdate_clone(&o_conv); LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ"); *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5717,14 +5549,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ"); *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res_conv = *(LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res_conv = *(LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res_conv); } @@ -5739,20 +5572,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateE LDKMonitorUpdateError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = MonitorUpdateError_clone(&e_conv); LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ"); *ret_conv = CResult_NoneMonitorUpdateErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NoneMonitorUpdateErrorZ _res_conv = *(LDKCResult_NoneMonitorUpdateErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneMonitorUpdateErrorZ _res_conv = *(LDKCResult_NoneMonitorUpdateErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneMonitorUpdateErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NoneMonitorUpdateErrorZ* orig_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(orig & ~1); + LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ"); + *ret_conv = CResult_NoneMonitorUpdateErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_OutPointScriptZ _res_conv = *(LDKC2Tuple_OutPointScriptZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_OutPointScriptZ _res_conv = *(LDKC2Tuple_OutPointScriptZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_OutPointScriptZ_free(_res_conv); } @@ -5761,16 +5603,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1n LDKOutPoint a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = OutPoint_clone(&a_conv); + a_conv = OutPoint_clone(&a_conv); LDKCVec_u8Z b_ref; b_ref.datalen = (*env)->GetArrayLength(env, b); b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes"); (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data); LDKC2Tuple_OutPointScriptZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ"); *ret_ref = C2Tuple_OutPointScriptZ_new(a_conv, b_ref); - ret_ref->a = OutPoint_clone(&ret_ref->a); - ret_ref->b = CVec_u8Z_clone(&ret_ref->b); return (long)ret_ref; } @@ -5793,18 +5632,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free(JNIEn CVec_TransactionZ_free(_res_constr); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKC2Tuple_u32TxOutZ* orig_conv = (LDKC2Tuple_u32TxOutZ*)(orig & ~1); + LDKC2Tuple_u32TxOutZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ"); + *ret_ref = C2Tuple_u32TxOutZ_clone(orig_conv); + return (long)ret_ref; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_u32TxOutZ _res_conv = *(LDKC2Tuple_u32TxOutZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_u32TxOutZ _res_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_u32TxOutZ_free(_res_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1new(JNIEnv *env, jclass clz, int32_t a, int64_t b) { - LDKTxOut b_conv = *(LDKTxOut*)b; + LDKTxOut b_conv = *(LDKTxOut*)(((uint64_t)b) & ~1); FREE((void*)b); LDKC2Tuple_u32TxOutZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ"); *ret_ref = C2Tuple_u32TxOutZ_new(a, b_conv); - ret_ref->b = TxOut_clone(&ret_ref->b); return (long)ret_ref; } @@ -5818,7 +5664,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t a = 0; a < _res_constr.datalen; a++) { int64_t arr_conv_26 = _res_vals[a]; - LDKC2Tuple_u32TxOutZ arr_conv_26_conv = *(LDKC2Tuple_u32TxOutZ*)arr_conv_26; + LDKC2Tuple_u32TxOutZ arr_conv_26_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_conv_26) & ~1); FREE((void*)arr_conv_26); _res_constr.data[a] = arr_conv_26_conv; } @@ -5827,7 +5673,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(_res_conv); } @@ -5845,15 +5692,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_ int64_t* b_vals = (*env)->GetLongArrayElements (env, b, NULL); for (size_t a = 0; a < b_constr.datalen; a++) { int64_t arr_conv_26 = b_vals[a]; - LDKC2Tuple_u32TxOutZ arr_conv_26_conv = *(LDKC2Tuple_u32TxOutZ*)arr_conv_26; + LDKC2Tuple_u32TxOutZ arr_conv_26_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_conv_26) & ~1); FREE((void*)arr_conv_26); b_constr.data[a] = arr_conv_26_conv; } (*env)->ReleaseLongArrayElements(env, b, b_vals, 0); LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ"); *ret_ref = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(a_ref, b_constr); - ret_ref->a = ThirtyTwoBytes_clone(&ret_ref->a); - ret_ref->b = CVec_C2Tuple_u32TxOutZZ_clone(&ret_ref->b); return (long)ret_ref; } @@ -5867,7 +5712,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tup int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t u = 0; u < _res_constr.datalen; u++) { int64_t arr_conv_46 = _res_vals[u]; - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_conv_46_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)arr_conv_46; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_conv_46_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_conv_46) & ~1); FREE((void*)arr_conv_46); _res_constr.data[u] = arr_conv_46_conv; } @@ -5876,7 +5721,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tup } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_BlockHashChannelMonitorZ _res_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_BlockHashChannelMonitorZ _res_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_BlockHashChannelMonitorZ_free(_res_conv); } @@ -5888,16 +5734,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo LDKChannelMonitor b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + b_conv = ChannelMonitor_clone(&b_conv); LDKC2Tuple_BlockHashChannelMonitorZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ"); *ret_ref = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv); - ret_ref->a = ThirtyTwoBytes_clone(&ret_ref->a); - // XXX: We likely need to clone here, but no _clone fn is available for ChannelMonitor return (long)ret_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKC2Tuple_BlockHashChannelMonitorZ o_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)o; + LDKC2Tuple_BlockHashChannelMonitorZ o_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(o_conv); @@ -5908,20 +5752,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHash LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKC2Tuple_u64u64Z* orig_conv = (LDKC2Tuple_u64u64Z*)(orig & ~1); + LDKC2Tuple_u64u64Z* ret_ref = MALLOC(sizeof(LDKC2Tuple_u64u64Z), "LDKC2Tuple_u64u64Z"); + *ret_ref = C2Tuple_u64u64Z_clone(orig_conv); + return (long)ret_ref; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u64Z_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_u64u64Z _res_conv = *(LDKC2Tuple_u64u64Z*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_u64u64Z _res_conv = *(LDKC2Tuple_u64u64Z*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_u64u64Z_free(_res_conv); } @@ -5933,7 +5786,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u64Z_1new(JNIEn } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKSpendableOutputDescriptor o_conv = *(LDKSpendableOutputDescriptor*)o; + LDKSpendableOutputDescriptor o_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ"); *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_ok(o_conv); @@ -5944,18 +5797,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDes LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ"); *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res_conv = *(LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res_conv = *(LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_SpendableOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(orig & ~1); + LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ"); + *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SignatureZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) { LDKCVec_SignatureZ _res_constr; _res_constr.datalen = (*env)->GetArrayLength(env, _res); @@ -5973,8 +5834,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SignatureZ_1free(JNIEnv CVec_SignatureZ_free(_res_constr); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(orig & ~1); + LDKC2Tuple_SignatureCVec_SignatureZZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ"); + *ret_ref = C2Tuple_SignatureCVec_SignatureZZ_clone(orig_conv); + return (long)ret_ref; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_SignatureCVec_SignatureZZ _res_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_SignatureCVec_SignatureZZ _res_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_SignatureCVec_SignatureZZ_free(_res_conv); } @@ -5998,13 +5867,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1Sig } LDKC2Tuple_SignatureCVec_SignatureZZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ"); *ret_ref = C2Tuple_SignatureCVec_SignatureZZ_new(a_ref, b_constr); - // XXX: We likely need to clone here, but no _clone fn is available for byte[] - // XXX: We likely need to clone here, but no _clone fn is available for byte[][] return (long)ret_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKC2Tuple_SignatureCVec_SignatureZZ o_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)o; + LDKC2Tuple_SignatureCVec_SignatureZZ o_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ"); *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(o_conv); @@ -6018,13 +5885,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1Signature } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)orig; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(orig & ~1); LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ"); *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(orig_conv); return (long)ret_conv; @@ -6046,58 +5914,21 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1er } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_SignatureNoneZ _res_conv = *(LDKCResult_SignatureNoneZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_SignatureNoneZ _res_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_SignatureNoneZ_free(_res_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)orig; + LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)(orig & ~1); LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ"); *ret_conv = CResult_SignatureNoneZ_clone(orig_conv); return (long)ret_conv; } -JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) { - LDKCVec_SignatureZ o_constr; - o_constr.datalen = (*env)->GetArrayLength(env, o); - if (o_constr.datalen > 0) - o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements"); - else - o_constr.data = NULL; - for (size_t i = 0; i < o_constr.datalen; i++) { - int8_tArray arr_conv_8 = (*env)->GetObjectArrayElement(env, o, i); - LDKSignature arr_conv_8_ref; - CHECK((*env)->GetArrayLength(env, arr_conv_8) == 64); - (*env)->GetByteArrayRegion(env, arr_conv_8, 0, 64, arr_conv_8_ref.compact_form); - o_constr.data[i] = arr_conv_8_ref; - } - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = CResult_CVec_SignatureZNoneZ_ok(o_constr); - return (long)ret_conv; -} - -JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err(JNIEnv *env, jclass clz) { - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = CResult_CVec_SignatureZNoneZ_err(); - return (long)ret_conv; -} - -JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_CVec_SignatureZNoneZ _res_conv = *(LDKCResult_CVec_SignatureZNoneZ*)_res; - FREE((void*)_res); - CResult_CVec_SignatureZNoneZ_free(_res_conv); -} - -JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)orig; - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = CResult_CVec_SignatureZNoneZ_clone(orig_conv); - return (long)ret_conv; -} - JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKChannelKeys o_conv = *(LDKChannelKeys*)o; + LDKChannelKeys o_conv = *(LDKChannelKeys*)(((uint64_t)o) & ~1); if (o_conv.free == LDKChannelKeys_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKChannelKeys_JCalls_clone(o_conv.this_arg); @@ -6111,24 +5942,31 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecod LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ChanKeySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChanKeySignerDecodeErrorZ), "LDKCResult_ChanKeySignerDecodeErrorZ"); *ret_conv = CResult_ChanKeySignerDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_ChanKeySignerDecodeErrorZ _res_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ChanKeySignerDecodeErrorZ _res_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ChanKeySignerDecodeErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_ChanKeySignerDecodeErrorZ* orig_conv = (LDKCResult_ChanKeySignerDecodeErrorZ*)(orig & ~1); + LDKCResult_ChanKeySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChanKeySignerDecodeErrorZ), "LDKCResult_ChanKeySignerDecodeErrorZ"); + *ret_conv = CResult_ChanKeySignerDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemoryChannelKeysDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { LDKInMemoryChannelKeys o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = InMemoryChannelKeys_clone(&o_conv); + o_conv = InMemoryChannelKeys_clone(&o_conv); LDKCResult_InMemoryChannelKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemoryChannelKeysDecodeErrorZ), "LDKCResult_InMemoryChannelKeysDecodeErrorZ"); *ret_conv = CResult_InMemoryChannelKeysDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6138,20 +5976,21 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemoryChannelKey LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_InMemoryChannelKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemoryChannelKeysDecodeErrorZ), "LDKCResult_InMemoryChannelKeysDecodeErrorZ"); *ret_conv = CResult_InMemoryChannelKeysDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InMemoryChannelKeysDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_InMemoryChannelKeysDecodeErrorZ _res_conv = *(LDKCResult_InMemoryChannelKeysDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_InMemoryChannelKeysDecodeErrorZ _res_conv = *(LDKCResult_InMemoryChannelKeysDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_InMemoryChannelKeysDecodeErrorZ_free(_res_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKTxOut o_conv = *(LDKTxOut*)o; + LDKTxOut o_conv = *(LDKTxOut*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ"); *ret_conv = CResult_TxOutAccessErrorZ_ok(o_conv); @@ -6166,11 +6005,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_ } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_TxOutAccessErrorZ _res_conv = *(LDKCResult_TxOutAccessErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_TxOutAccessErrorZ _res_conv = *(LDKCResult_TxOutAccessErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_TxOutAccessErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_TxOutAccessErrorZ* orig_conv = (LDKCResult_TxOutAccessErrorZ*)(orig & ~1); + LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ"); + *ret_conv = CResult_TxOutAccessErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1ok(JNIEnv *env, jclass clz) { LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); *ret_conv = CResult_NoneAPIErrorZ_ok(); @@ -6178,7 +6025,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1ok( } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) { - LDKAPIError e_conv = *(LDKAPIError*)e; + LDKAPIError e_conv = *(LDKAPIError*)(((uint64_t)e) & ~1); FREE((void*)e); LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); *ret_conv = CResult_NoneAPIErrorZ_err(e_conv); @@ -6186,7 +6033,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1err } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NoneAPIErrorZ _res_conv = *(LDKCResult_NoneAPIErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneAPIErrorZ _res_conv = *(LDKCResult_NoneAPIErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneAPIErrorZ_free(_res_conv); } @@ -6220,18 +6068,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFai LDKPaymentSendFailure e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PaymentSendFailure_clone(&e_conv); LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ"); *ret_conv = CResult_NonePaymentSendFailureZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NonePaymentSendFailureZ _res_conv = *(LDKCResult_NonePaymentSendFailureZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NonePaymentSendFailureZ _res_conv = *(LDKCResult_NonePaymentSendFailureZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NonePaymentSendFailureZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NonePaymentSendFailureZ* orig_conv = (LDKCResult_NonePaymentSendFailureZ*)(orig & ~1); + LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ"); + *ret_conv = CResult_NonePaymentSendFailureZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) { LDKCVec_NetAddressZ _res_constr; _res_constr.datalen = (*env)->GetArrayLength(env, _res); @@ -6242,7 +6098,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free(JNIEnv int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t m = 0; m < _res_constr.datalen; m++) { int64_t arr_conv_12 = _res_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); _res_constr.data[m] = arr_conv_12_conv; } @@ -6270,7 +6126,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelMonitorZ_1free(JN } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC2Tuple_BlockHashChannelManagerZ _res_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_BlockHashChannelManagerZ _res_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_BlockHashChannelManagerZ_free(_res_conv); } @@ -6282,16 +6139,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa LDKChannelManager b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelManager LDKC2Tuple_BlockHashChannelManagerZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ"); *ret_ref = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv); - ret_ref->a = ThirtyTwoBytes_clone(&ret_ref->a); - // XXX: We likely need to clone here, but no _clone fn is available for ChannelManager return (long)ret_ref; } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKC2Tuple_BlockHashChannelManagerZ o_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)o; + LDKC2Tuple_BlockHashChannelManagerZ o_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(o_conv); @@ -6302,20 +6157,21 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHash LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(_res_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKNetAddress o_conv = *(LDKNetAddress*)o; + LDKNetAddress o_conv = *(LDKNetAddress*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_NetAddressu8Z* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressu8Z), "LDKCResult_NetAddressu8Z"); *ret_conv = CResult_NetAddressu8Z_ok(o_conv); @@ -6329,13 +6185,21 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1err } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NetAddressu8Z _res_conv = *(LDKCResult_NetAddressu8Z*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NetAddressu8Z _res_conv = *(LDKCResult_NetAddressu8Z*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NetAddressu8Z_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NetAddressu8Z* orig_conv = (LDKCResult_NetAddressu8Z*)(orig & ~1); + LDKCResult_NetAddressu8Z* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressu8Z), "LDKCResult_NetAddressu8Z"); + *ret_conv = CResult_NetAddressu8Z_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CResult_1NetAddressu8ZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { - LDKCResult_NetAddressu8Z o_conv = *(LDKCResult_NetAddressu8Z*)o; + LDKCResult_NetAddressu8Z o_conv = *(LDKCResult_NetAddressu8Z*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_CResult_NetAddressu8ZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ), "LDKCResult_CResult_NetAddressu8ZDecodeErrorZ"); *ret_conv = CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(o_conv); @@ -6346,14 +6210,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CResult_1NetAddres LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_CResult_NetAddressu8ZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ), "LDKCResult_CResult_NetAddressu8ZDecodeErrorZ"); *ret_conv = CResult_CResult_NetAddressu8ZDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CResult_1NetAddressu8ZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_CResult_NetAddressu8ZDecodeErrorZ _res_conv = *(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_CResult_NetAddressu8ZDecodeErrorZ _res_conv = *(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_CResult_NetAddressu8ZDecodeErrorZ_free(_res_conv); } @@ -6460,20 +6325,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningError LDKLightningError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = LightningError_clone(&e_conv); LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ"); *ret_conv = CResult_boolLightningErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_boolLightningErrorZ _res_conv = *(LDKCResult_boolLightningErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_boolLightningErrorZ _res_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_boolLightningErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_boolLightningErrorZ* orig_conv = (LDKCResult_boolLightningErrorZ*)(orig & ~1); + LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ"); + *ret_conv = CResult_boolLightningErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ _res_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)_res; + if ((_res & 1) != 0) return; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ _res_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(_res_conv); } @@ -6482,23 +6356,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen LDKChannelAnnouncement a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = ChannelAnnouncement_clone(&a_conv); + a_conv = ChannelAnnouncement_clone(&a_conv); LDKChannelUpdate b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - if (b_conv.inner != NULL) - b_conv = ChannelUpdate_clone(&b_conv); + b_conv = ChannelUpdate_clone(&b_conv); LDKChannelUpdate c_conv; c_conv.inner = (void*)(c & (~1)); c_conv.is_owned = (c & 1) || (c == 0); - if (c_conv.inner != NULL) - c_conv = ChannelUpdate_clone(&c_conv); + c_conv = ChannelUpdate_clone(&c_conv); LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_ref = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ"); *ret_ref = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a_conv, b_conv, c_conv); - ret_ref->a = ChannelAnnouncement_clone(&ret_ref->a); - ret_ref->b = ChannelUpdate_clone(&ret_ref->b); - ret_ref->c = ChannelUpdate_clone(&ret_ref->c); return (long)ret_ref; } @@ -6512,7 +6380,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C3Tuple_1ChannelAnnounce int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL); for (size_t l = 0; l < _res_constr.datalen; l++) { int64_t arr_conv_63 = _res_vals[l]; - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)arr_conv_63; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_conv_63) & ~1); FREE((void*)arr_conv_63); _res_constr.data[l] = arr_conv_63_conv; } @@ -6549,24 +6417,31 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningError LDKLightningError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = LightningError_clone(&e_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = CResult_NoneLightningErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NoneLightningErrorZ _res_conv = *(LDKCResult_NoneLightningErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneLightningErrorZ _res_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneLightningErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NoneLightningErrorZ* orig_conv = (LDKCResult_NoneLightningErrorZ*)(orig & ~1); + LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); + *ret_conv = CResult_NoneLightningErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { LDKChannelReestablish o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ChannelReestablish_clone(&o_conv); + o_conv = ChannelReestablish_clone(&o_conv); LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ"); *ret_conv = CResult_ChannelReestablishDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6576,14 +6451,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablish LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ"); *ret_conv = CResult_ChannelReestablishDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_ChannelReestablishDecodeErrorZ _res_conv = *(LDKCResult_ChannelReestablishDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ChannelReestablishDecodeErrorZ _res_conv = *(LDKCResult_ChannelReestablishDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ChannelReestablishDecodeErrorZ_free(_res_conv); } @@ -6592,8 +6468,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1 LDKInit o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Init_clone(&o_conv); + o_conv = Init_clone(&o_conv); LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ"); *ret_conv = CResult_InitDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6603,14 +6478,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1 LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ"); *ret_conv = CResult_InitDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_InitDecodeErrorZ _res_conv = *(LDKCResult_InitDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_InitDecodeErrorZ _res_conv = *(LDKCResult_InitDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_InitDecodeErrorZ_free(_res_conv); } @@ -6619,8 +6495,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1 LDKPing o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Ping_clone(&o_conv); + o_conv = Ping_clone(&o_conv); LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ"); *ret_conv = CResult_PingDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6630,14 +6505,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1 LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ"); *ret_conv = CResult_PingDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_PingDecodeErrorZ _res_conv = *(LDKCResult_PingDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_PingDecodeErrorZ _res_conv = *(LDKCResult_PingDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_PingDecodeErrorZ_free(_res_conv); } @@ -6646,8 +6522,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1 LDKPong o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Pong_clone(&o_conv); + o_conv = Pong_clone(&o_conv); LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ"); *ret_conv = CResult_PongDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6657,14 +6532,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1 LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ"); *ret_conv = CResult_PongDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_PongDecodeErrorZ _res_conv = *(LDKCResult_PongDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_PongDecodeErrorZ _res_conv = *(LDKCResult_PongDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_PongDecodeErrorZ_free(_res_conv); } @@ -6673,8 +6549,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnn LDKUnsignedChannelAnnouncement o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = UnsignedChannelAnnouncement_clone(&o_conv); + o_conv = UnsignedChannelAnnouncement_clone(&o_conv); LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6684,14 +6559,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnn LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res_conv); } @@ -6700,8 +6576,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpd LDKUnsignedChannelUpdate o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = UnsignedChannelUpdate_clone(&o_conv); + o_conv = UnsignedChannelUpdate_clone(&o_conv); LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6711,14 +6586,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpd LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_UnsignedChannelUpdateDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_UnsignedChannelUpdateDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res_conv); } @@ -6727,8 +6603,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecode LDKErrorMessage o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ErrorMessage_clone(&o_conv); + o_conv = ErrorMessage_clone(&o_conv); LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ"); *ret_conv = CResult_ErrorMessageDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6738,14 +6613,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecode LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ"); *ret_conv = CResult_ErrorMessageDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_ErrorMessageDecodeErrorZ _res_conv = *(LDKCResult_ErrorMessageDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ErrorMessageDecodeErrorZ _res_conv = *(LDKCResult_ErrorMessageDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ErrorMessageDecodeErrorZ_free(_res_conv); } @@ -6754,8 +6630,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnoun LDKUnsignedNodeAnnouncement o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = UnsignedNodeAnnouncement_clone(&o_conv); + o_conv = UnsignedNodeAnnouncement_clone(&o_conv); LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6765,14 +6640,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnoun LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res_conv); } @@ -6781,8 +6657,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelI LDKQueryShortChannelIds o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = QueryShortChannelIds_clone(&o_conv); + o_conv = QueryShortChannelIds_clone(&o_conv); LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ"); *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6792,14 +6667,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelI LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ"); *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_QueryShortChannelIdsDecodeErrorZ _res_conv = *(LDKCResult_QueryShortChannelIdsDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_QueryShortChannelIdsDecodeErrorZ _res_conv = *(LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_QueryShortChannelIdsDecodeErrorZ_free(_res_conv); } @@ -6808,8 +6684,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelI LDKReplyShortChannelIdsEnd o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ReplyShortChannelIdsEnd_clone(&o_conv); + o_conv = ReplyShortChannelIdsEnd_clone(&o_conv); LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ"); *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6819,14 +6694,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelI LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ"); *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ _res_conv = *(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ _res_conv = *(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res_conv); } @@ -6835,8 +6711,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeD LDKQueryChannelRange o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = QueryChannelRange_clone(&o_conv); + o_conv = QueryChannelRange_clone(&o_conv); LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ"); *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6846,14 +6721,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeD LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ"); *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_QueryChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_QueryChannelRangeDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_QueryChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_QueryChannelRangeDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_QueryChannelRangeDecodeErrorZ_free(_res_conv); } @@ -6862,8 +6738,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeD LDKReplyChannelRange o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ReplyChannelRange_clone(&o_conv); + o_conv = ReplyChannelRange_clone(&o_conv); LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ"); *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6873,14 +6748,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeD LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ"); *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_ReplyChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_ReplyChannelRangeDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ReplyChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_ReplyChannelRangeDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ReplyChannelRangeDecodeErrorZ_free(_res_conv); } @@ -6889,8 +6765,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFil LDKGossipTimestampFilter o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = GossipTimestampFilter_clone(&o_conv); + o_conv = GossipTimestampFilter_clone(&o_conv); LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ"); *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6900,14 +6775,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFil LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ"); *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_GossipTimestampFilterDecodeErrorZ _res_conv = *(LDKCResult_GossipTimestampFilterDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_GossipTimestampFilterDecodeErrorZ _res_conv = *(LDKCResult_GossipTimestampFilterDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_GossipTimestampFilterDecodeErrorZ_free(_res_conv); } @@ -6951,18 +6827,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandl LDKPeerHandleError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PeerHandleError_clone(&e_conv); LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ"); *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_CVec_u8ZPeerHandleErrorZ _res_conv = *(LDKCResult_CVec_u8ZPeerHandleErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_CVec_u8ZPeerHandleErrorZ _res_conv = *(LDKCResult_CVec_u8ZPeerHandleErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_CVec_u8ZPeerHandleErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_CVec_u8ZPeerHandleErrorZ* orig_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(orig & ~1); + LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ"); + *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1ok(JNIEnv *env, jclass clz) { LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); *ret_conv = CResult_NonePeerHandleErrorZ_ok(); @@ -6973,18 +6857,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErro LDKPeerHandleError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PeerHandleError_clone(&e_conv); LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); *ret_conv = CResult_NonePeerHandleErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NonePeerHandleErrorZ _res_conv = *(LDKCResult_NonePeerHandleErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NonePeerHandleErrorZ _res_conv = *(LDKCResult_NonePeerHandleErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NonePeerHandleErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NonePeerHandleErrorZ* orig_conv = (LDKCResult_NonePeerHandleErrorZ*)(orig & ~1); + LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); + *ret_conv = CResult_NonePeerHandleErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1ok(JNIEnv *env, jclass clz, jboolean o) { LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ"); *ret_conv = CResult_boolPeerHandleErrorZ_ok(o); @@ -6995,18 +6887,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErro LDKPeerHandleError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PeerHandleError_clone(&e_conv); LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ"); *ret_conv = CResult_boolPeerHandleErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_boolPeerHandleErrorZ _res_conv = *(LDKCResult_boolPeerHandleErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_boolPeerHandleErrorZ _res_conv = *(LDKCResult_boolPeerHandleErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_boolPeerHandleErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_boolPeerHandleErrorZ* orig_conv = (LDKCResult_boolPeerHandleErrorZ*)(orig & ~1); + LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ"); + *ret_conv = CResult_boolPeerHandleErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeySecpErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) { LDKSecretKey o_ref; CHECK((*env)->GetArrayLength(env, o) == 32); @@ -7024,7 +6924,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeySecpError } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeySecpErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_SecretKeySecpErrorZ _res_conv = *(LDKCResult_SecretKeySecpErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_SecretKeySecpErrorZ _res_conv = *(LDKCResult_SecretKeySecpErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_SecretKeySecpErrorZ_free(_res_conv); } @@ -7046,7 +6947,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecpError } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecpErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_PublicKeySecpErrorZ _res_conv = *(LDKCResult_PublicKeySecpErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_PublicKeySecpErrorZ _res_conv = *(LDKCResult_PublicKeySecpErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_PublicKeySecpErrorZ_free(_res_conv); } @@ -7055,8 +6957,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysSecp LDKTxCreationKeys o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = TxCreationKeys_clone(&o_conv); + o_conv = TxCreationKeys_clone(&o_conv); LDKCResult_TxCreationKeysSecpErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysSecpErrorZ), "LDKCResult_TxCreationKeysSecpErrorZ"); *ret_conv = CResult_TxCreationKeysSecpErrorZ_ok(o_conv); return (long)ret_conv; @@ -7070,7 +6971,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysSecp } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysSecpErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_TxCreationKeysSecpErrorZ _res_conv = *(LDKCResult_TxCreationKeysSecpErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_TxCreationKeysSecpErrorZ _res_conv = *(LDKCResult_TxCreationKeysSecpErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_TxCreationKeysSecpErrorZ_free(_res_conv); } @@ -7079,7 +6981,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentT LDKTrustedCommitmentTransaction o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKTrustedCommitmentTransaction LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ"); *ret_conv = CResult_TrustedCommitmentTransactionNoneZ_ok(o_conv); return (long)ret_conv; @@ -7092,11 +6994,51 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentT } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_TrustedCommitmentTransactionNoneZ _res_conv = *(LDKCResult_TrustedCommitmentTransactionNoneZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_TrustedCommitmentTransactionNoneZ _res_conv = *(LDKCResult_TrustedCommitmentTransactionNoneZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_TrustedCommitmentTransactionNoneZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) { + LDKCVec_SignatureZ o_constr; + o_constr.datalen = (*env)->GetArrayLength(env, o); + if (o_constr.datalen > 0) + o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements"); + else + o_constr.data = NULL; + for (size_t i = 0; i < o_constr.datalen; i++) { + int8_tArray arr_conv_8 = (*env)->GetObjectArrayElement(env, o, i); + LDKSignature arr_conv_8_ref; + CHECK((*env)->GetArrayLength(env, arr_conv_8) == 64); + (*env)->GetByteArrayRegion(env, arr_conv_8, 0, 64, arr_conv_8_ref.compact_form); + o_constr.data[i] = arr_conv_8_ref; + } + LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); + *ret_conv = CResult_CVec_SignatureZNoneZ_ok(o_constr); + return (long)ret_conv; +} + +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err(JNIEnv *env, jclass clz) { + LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); + *ret_conv = CResult_CVec_SignatureZNoneZ_err(); + return (long)ret_conv; +} + +JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) { + if ((_res & 1) != 0) return; + LDKCResult_CVec_SignatureZNoneZ _res_conv = *(LDKCResult_CVec_SignatureZNoneZ*)(((uint64_t)_res) & ~1); + FREE((void*)_res); + CResult_CVec_SignatureZNoneZ_free(_res_conv); +} + +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)(orig & ~1); + LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); + *ret_conv = CResult_CVec_SignatureZNoneZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHopZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) { LDKCVec_RouteHopZ _res_constr; _res_constr.datalen = (*env)->GetArrayLength(env, _res); @@ -7149,8 +7091,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_ LDKRoute o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Route_clone(&o_conv); + o_conv = Route_clone(&o_conv); LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ"); *ret_conv = CResult_RouteDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -7160,14 +7101,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_ LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ"); *ret_conv = CResult_RouteDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_RouteDecodeErrorZ _res_conv = *(LDKCResult_RouteDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_RouteDecodeErrorZ _res_conv = *(LDKCResult_RouteDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_RouteDecodeErrorZ_free(_res_conv); } @@ -7195,8 +7137,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErro LDKRoute o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Route_clone(&o_conv); + o_conv = Route_clone(&o_conv); LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ"); *ret_conv = CResult_RouteLightningErrorZ_ok(o_conv); return (long)ret_conv; @@ -7206,14 +7147,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErro LDKLightningError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = LightningError_clone(&e_conv); LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ"); *ret_conv = CResult_RouteLightningErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_RouteLightningErrorZ _res_conv = *(LDKCResult_RouteLightningErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_RouteLightningErrorZ _res_conv = *(LDKCResult_RouteLightningErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_RouteLightningErrorZ_free(_res_conv); } @@ -7222,8 +7164,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE LDKRoutingFees o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = RoutingFees_clone(&o_conv); + o_conv = RoutingFees_clone(&o_conv); LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ"); *ret_conv = CResult_RoutingFeesDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -7233,14 +7174,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ"); *ret_conv = CResult_RoutingFeesDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_RoutingFeesDecodeErrorZ _res_conv = *(LDKCResult_RoutingFeesDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_RoutingFeesDecodeErrorZ _res_conv = *(LDKCResult_RoutingFeesDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_RoutingFeesDecodeErrorZ_free(_res_conv); } @@ -7249,7 +7191,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementIn LDKNodeAnnouncementInfo o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + o_conv = NodeAnnouncementInfo_clone(&o_conv); LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ"); *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -7259,23 +7201,31 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementIn LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ"); *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NodeAnnouncementInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(orig & ~1); + LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ"); + *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { LDKNodeInfo o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + o_conv = NodeInfo_clone(&o_conv); LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ"); *ret_conv = CResult_NodeInfoDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -7285,23 +7235,31 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErro LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ"); *ret_conv = CResult_NodeInfoDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NodeInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeInfoDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NodeInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeInfoDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NodeInfoDecodeErrorZ_free(_res_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKCResult_NodeInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(orig & ~1); + LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ"); + *ret_conv = CResult_NodeInfoDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) { LDKNetworkGraph o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNetworkGraph LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ"); *ret_conv = CResult_NetworkGraphDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -7311,20 +7269,22 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ"); *ret_conv = CResult_NetworkGraphDecodeErrorZ_err(e_conv); return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) { - LDKCResult_NetworkGraphDecodeErrorZ _res_conv = *(LDKCResult_NetworkGraphDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NetworkGraphDecodeErrorZ _res_conv = *(LDKCResult_NetworkGraphDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NetworkGraphDecodeErrorZ_free(_res_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKEvent this_ptr_conv = *(LDKEvent*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKEvent this_ptr_conv = *(LDKEvent*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Event_free(this_ptr_conv); } @@ -7347,7 +7307,8 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Event_1write(JNIEnv *en } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); MessageSendEvent_free(this_ptr_conv); } @@ -7361,19 +7322,22 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone(JNI } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEventsProvider_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); MessageSendEventsProvider_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EventsProvider_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); EventsProvider_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_APIError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKAPIError this_ptr_conv = *(LDKAPIError*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKAPIError this_ptr_conv = *(LDKAPIError*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); APIError_free(this_ptr_conv); } @@ -7387,7 +7351,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1clone(JNIEnv *env } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Level_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKLevel* orig_conv = (LDKLevel*)orig; + LDKLevel* orig_conv = (LDKLevel*)(orig & ~1); jclass ret_conv = LDKLevel_to_java(env, Level_clone(orig_conv)); return ret_conv; } @@ -7398,7 +7362,8 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Level_1max(JNIEnv *env, jcla } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Logger_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKLogger this_ptr_conv = *(LDKLogger*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKLogger this_ptr_conv = *(LDKLogger*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Logger_free(this_ptr_conv); } @@ -7840,8 +7805,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1own_1channel_ LDKChannelHandshakeConfig val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelHandshakeConfig_clone(&val_conv); + val_conv = ChannelHandshakeConfig_clone(&val_conv); UserConfig_set_own_channel_config(&this_ptr_conv, val_conv); } @@ -7866,8 +7830,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1peer_1channel LDKChannelHandshakeLimits val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelHandshakeLimits_clone(&val_conv); + val_conv = ChannelHandshakeLimits_clone(&val_conv); UserConfig_set_peer_channel_config_limits(&this_ptr_conv, val_conv); } @@ -7892,8 +7855,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1channel_1opti LDKChannelConfig val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelConfig_clone(&val_conv); + val_conv = ChannelConfig_clone(&val_conv); UserConfig_set_channel_options(&this_ptr_conv, val_conv); } @@ -7901,18 +7863,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1new(JNIEnv *env LDKChannelHandshakeConfig own_channel_config_arg_conv; own_channel_config_arg_conv.inner = (void*)(own_channel_config_arg & (~1)); own_channel_config_arg_conv.is_owned = (own_channel_config_arg & 1) || (own_channel_config_arg == 0); - if (own_channel_config_arg_conv.inner != NULL) - own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv); + own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv); LDKChannelHandshakeLimits peer_channel_config_limits_arg_conv; peer_channel_config_limits_arg_conv.inner = (void*)(peer_channel_config_limits_arg & (~1)); peer_channel_config_limits_arg_conv.is_owned = (peer_channel_config_limits_arg & 1) || (peer_channel_config_limits_arg == 0); - if (peer_channel_config_limits_arg_conv.inner != NULL) - peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv); + peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv); LDKChannelConfig channel_options_arg_conv; channel_options_arg_conv.inner = (void*)(channel_options_arg & (~1)); channel_options_arg_conv.is_owned = (channel_options_arg & 1) || (channel_options_arg == 0); - if (channel_options_arg_conv.inner != NULL) - channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv); + channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv); LDKUserConfig ret_var = UserConfig_new(own_channel_config_arg_conv, peer_channel_config_limits_arg_conv, channel_options_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -7935,43 +7894,48 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1default(JNIEnv } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_AccessError_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKAccessError* orig_conv = (LDKAccessError*)orig; + LDKAccessError* orig_conv = (LDKAccessError*)(orig & ~1); jclass ret_conv = LDKAccessError_to_java(env, AccessError_clone(orig_conv)); return ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Access_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKAccess this_ptr_conv = *(LDKAccess*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKAccess this_ptr_conv = *(LDKAccess*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Access_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Watch_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKWatch this_ptr_conv = *(LDKWatch*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKWatch this_ptr_conv = *(LDKWatch*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Watch_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Filter_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKFilter this_ptr_conv = *(LDKFilter*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKFilter this_ptr_conv = *(LDKFilter*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Filter_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BroadcasterInterface_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKBroadcasterInterface this_ptr_conv = *(LDKBroadcasterInterface*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKBroadcasterInterface this_ptr_conv = *(LDKBroadcasterInterface*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); BroadcasterInterface_free(this_ptr_conv); } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ConfirmationTarget_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKConfirmationTarget* orig_conv = (LDKConfirmationTarget*)orig; + LDKConfirmationTarget* orig_conv = (LDKConfirmationTarget*)(orig & ~1); jclass ret_conv = LDKConfirmationTarget_to_java(env, ConfirmationTarget_clone(orig_conv)); return ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FeeEstimator_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKFeeEstimator this_ptr_conv = *(LDKFeeEstimator*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKFeeEstimator this_ptr_conv = *(LDKFeeEstimator*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); FeeEstimator_free(this_ptr_conv); } @@ -8000,7 +7964,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1block_1connected int64_t* txdata_vals = (*env)->GetLongArrayElements (env, txdata, NULL); for (size_t y = 0; y < txdata_constr.datalen; y++) { int64_t arr_conv_24 = txdata_vals[y]; - LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_24; + LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_24) & ~1); FREE((void*)arr_conv_24); txdata_constr.data[y] = arr_conv_24_conv; } @@ -8021,22 +7985,22 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1block_1disconnec JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1new(JNIEnv *env, jclass clz, int64_t chain_source, int64_t broadcaster, int64_t logger, int64_t feeest, int64_t persister) { LDKFilter* chain_source_conv = (LDKFilter*)chain_source; - LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)broadcaster; + LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)broadcaster) & ~1); if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKBroadcasterInterface_JCalls_clone(broadcaster_conv.this_arg); } - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); } - LDKFeeEstimator feeest_conv = *(LDKFeeEstimator*)feeest; + LDKFeeEstimator feeest_conv = *(LDKFeeEstimator*)(((uint64_t)feeest) & ~1); if (feeest_conv.free == LDKFeeEstimator_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKFeeEstimator_JCalls_clone(feeest_conv.this_arg); } - LDKPersist persister_conv = *(LDKPersist*)persister; + LDKPersist persister_conv = *(LDKPersist*)(((uint64_t)persister) & ~1); if (persister_conv.free == LDKPersist_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKPersist_JCalls_clone(persister_conv.this_arg); @@ -8127,7 +8091,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1read( } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateErr_1clone(JNIEnv *env, jclass clz, int64_t orig) { - LDKChannelMonitorUpdateErr* orig_conv = (LDKChannelMonitorUpdateErr*)orig; + LDKChannelMonitorUpdateErr* orig_conv = (LDKChannelMonitorUpdateErr*)(orig & ~1); jclass ret_conv = LDKChannelMonitorUpdateErr_to_java(env, ChannelMonitorUpdateErr_clone(orig_conv)); return ret_conv; } @@ -8139,6 +8103,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1free(JNIEn MonitorUpdateError_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKMonitorUpdateError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { LDKMonitorEvent this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -8214,6 +8192,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1free(JNIEnv *e ChannelMonitor_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKChannelMonitor orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKChannelMonitor ret_var = ChannelMonitor_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1write(JNIEnv *env, jclass clz, int64_t obj) { LDKChannelMonitor obj_conv; obj_conv.inner = (void*)(obj & (~1)); @@ -8254,8 +8246,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1fundin this_arg_conv.is_owned = false; LDKC2Tuple_OutPointScriptZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ"); *ret_ref = ChannelMonitor_get_funding_txo(&this_arg_conv); - ret_ref->a = OutPoint_clone(&ret_ref->a); - ret_ref->b = CVec_u8Z_clone(&ret_ref->b); return (long)ret_ref; } @@ -8335,22 +8325,22 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_ int64_t* txdata_vals = (*env)->GetLongArrayElements (env, txdata, NULL); for (size_t y = 0; y < txdata_constr.datalen; y++) { int64_t arr_conv_24 = txdata_vals[y]; - LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_24; + LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_24) & ~1); FREE((void*)arr_conv_24); txdata_constr.data[y] = arr_conv_24_conv; } (*env)->ReleaseLongArrayElements(env, txdata, txdata_vals, 0); - LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)broadcaster; + LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)broadcaster) & ~1); if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKBroadcasterInterface_JCalls_clone(broadcaster_conv.this_arg); } - LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)fee_estimator; + LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(((uint64_t)fee_estimator) & ~1); if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKFeeEstimator_JCalls_clone(fee_estimator_conv.this_arg); } - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -8361,8 +8351,6 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_ for (size_t u = 0; u < ret_var.datalen; u++) { LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arr_conv_46_ref = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ"); *arr_conv_46_ref = ret_var.data[u]; - arr_conv_46_ref->a = ThirtyTwoBytes_clone(&arr_conv_46_ref->a); - arr_conv_46_ref->b = CVec_C2Tuple_u32TxOutZZ_clone(&arr_conv_46_ref->b); ret_arr_ptr[u] = (long)arr_conv_46_ref; } (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0); @@ -8378,17 +8366,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_1disconn CHECK((*env)->GetArrayLength(env, header) == 80); (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr); unsigned char (*header_ref)[80] = &header_arr; - LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)broadcaster; + LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)broadcaster) & ~1); if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKBroadcasterInterface_JCalls_clone(broadcaster_conv.this_arg); } - LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)fee_estimator; + LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(((uint64_t)fee_estimator) & ~1); if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKFeeEstimator_JCalls_clone(fee_estimator_conv.this_arg); } - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -8397,7 +8385,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_1disconn } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Persist_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKPersist this_ptr_conv = *(LDKPersist*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKPersist this_ptr_conv = *(LDKPersist*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Persist_free(this_ptr_conv); } @@ -8518,7 +8507,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1read(JNIEnv *env, } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); SpendableOutputDescriptor_free(this_ptr_conv); } @@ -8558,13 +8548,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1clone(JNIEnv * } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKChannelKeys this_ptr_conv = *(LDKChannelKeys*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKChannelKeys this_ptr_conv = *(LDKChannelKeys*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); ChannelKeys_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysInterface_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKKeysInterface this_ptr_conv = *(LDKKeysInterface*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKKeysInterface this_ptr_conv = *(LDKKeysInterface*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); KeysInterface_free(this_ptr_conv); } @@ -8723,7 +8715,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemoryChannelKeys_1new(JN LDKThirtyTwoBytes commitment_seed_ref; CHECK((*env)->GetArrayLength(env, commitment_seed) == 32); (*env)->GetByteArrayRegion(env, commitment_seed, 0, 32, commitment_seed_ref.data); - LDKC2Tuple_u64u64Z key_derivation_params_conv = *(LDKC2Tuple_u64u64Z*)key_derivation_params; + LDKC2Tuple_u64u64Z key_derivation_params_conv = *(LDKC2Tuple_u64u64Z*)(((uint64_t)key_derivation_params) & ~1); FREE((void*)key_derivation_params); LDKInMemoryChannelKeys ret_var = InMemoryChannelKeys_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, key_derivation_params_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -8964,7 +8956,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1counterpa LDKInitFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKInitFeatures ChannelDetails_set_counterparty_features(&this_ptr_conv, val_conv); } @@ -9050,29 +9042,43 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1free(JNIEn PaymentSendFailure_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKPaymentSendFailure orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKPaymentSendFailure ret_var = PaymentSendFailure_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1new(JNIEnv *env, jclass clz, jclass network, int64_t fee_est, int64_t chain_monitor, int64_t tx_broadcaster, int64_t logger, int64_t keys_manager, int64_t config, intptr_t current_blockchain_height) { LDKNetwork network_conv = LDKNetwork_from_java(env, network); - LDKFeeEstimator fee_est_conv = *(LDKFeeEstimator*)fee_est; + LDKFeeEstimator fee_est_conv = *(LDKFeeEstimator*)(((uint64_t)fee_est) & ~1); if (fee_est_conv.free == LDKFeeEstimator_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKFeeEstimator_JCalls_clone(fee_est_conv.this_arg); } - LDKWatch chain_monitor_conv = *(LDKWatch*)chain_monitor; + LDKWatch chain_monitor_conv = *(LDKWatch*)(((uint64_t)chain_monitor) & ~1); if (chain_monitor_conv.free == LDKWatch_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKWatch_JCalls_clone(chain_monitor_conv.this_arg); } - LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)tx_broadcaster; + LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)tx_broadcaster) & ~1); if (tx_broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKBroadcasterInterface_JCalls_clone(tx_broadcaster_conv.this_arg); } - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); } - LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)keys_manager; + LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(((uint64_t)keys_manager) & ~1); if (keys_manager_conv.free == LDKKeysInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKKeysInterface_JCalls_clone(keys_manager_conv.this_arg); @@ -9080,8 +9086,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1new(JNIEnv LDKUserConfig config_conv; config_conv.inner = (void*)(config & (~1)); config_conv.is_owned = (config & 1) || (config == 0); - if (config_conv.inner != NULL) - config_conv = UserConfig_clone(&config_conv); + config_conv = UserConfig_clone(&config_conv); LDKChannelManager ret_var = ChannelManager_new(network_conv, fee_est_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, keys_manager_conv, config_conv, current_blockchain_height); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -9102,8 +9107,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1cha LDKUserConfig override_config_conv; override_config_conv.inner = (void*)(override_config & (~1)); override_config_conv.is_owned = (override_config & 1) || (override_config == 0); - if (override_config_conv.inner != NULL) - override_config_conv = UserConfig_clone(&override_config_conv); + override_config_conv = UserConfig_clone(&override_config_conv); LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_id, override_config_conv); return (long)ret_conv; @@ -9166,7 +9170,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1close_1chan return (long)ret_conv; } -JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray channel_id) { +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray channel_id) { LDKChannelManager this_arg_conv; this_arg_conv.inner = (void*)(this_arg & (~1)); this_arg_conv.is_owned = false; @@ -9174,7 +9178,9 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1 CHECK((*env)->GetArrayLength(env, channel_id) == 32); (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr); unsigned char (*channel_id_ref)[32] = &channel_id_arr; - ChannelManager_force_close_channel(&this_arg_conv, channel_id_ref); + LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); + *ret_conv = ChannelManager_force_close_channel(&this_arg_conv, channel_id_ref); + return (long)ret_conv; } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1all_1channels(JNIEnv *env, jclass clz, int64_t this_arg) { @@ -9213,8 +9219,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1trans LDKOutPoint funding_txo_conv; funding_txo_conv.inner = (void*)(funding_txo & (~1)); funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0); - if (funding_txo_conv.inner != NULL) - funding_txo_conv = OutPoint_clone(&funding_txo_conv); + funding_txo_conv = OutPoint_clone(&funding_txo_conv); ChannelManager_funding_transaction_generated(&this_arg_conv, temporary_channel_id_ref, funding_txo_conv); } @@ -9237,7 +9242,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1broadcast_1nod int64_t* addresses_vals = (*env)->GetLongArrayElements (env, addresses, NULL); for (size_t m = 0; m < addresses_constr.datalen; m++) { int64_t arr_conv_12 = addresses_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); addresses_constr.data[m] = arr_conv_12_conv; } @@ -9342,7 +9347,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1block_1connect int64_t* txdata_vals = (*env)->GetLongArrayElements (env, txdata, NULL); for (size_t y = 0; y < txdata_constr.datalen; y++) { int64_t arr_conv_24 = txdata_vals[y]; - LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_24; + LDKC2Tuple_usizeTransactionZ arr_conv_24_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_24) & ~1); FREE((void*)arr_conv_24); txdata_constr.data[y] = arr_conv_24_conv; } @@ -9400,7 +9405,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1k LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKKeysInterface val_conv = *(LDKKeysInterface*)val; + LDKKeysInterface val_conv = *(LDKKeysInterface*)(((uint64_t)val) & ~1); if (val_conv.free == LDKKeysInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKKeysInterface_JCalls_clone(val_conv.this_arg); @@ -9420,7 +9425,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1f LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKFeeEstimator val_conv = *(LDKFeeEstimator*)val; + LDKFeeEstimator val_conv = *(LDKFeeEstimator*)(((uint64_t)val) & ~1); if (val_conv.free == LDKFeeEstimator_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKFeeEstimator_JCalls_clone(val_conv.this_arg); @@ -9440,7 +9445,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1c LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKWatch val_conv = *(LDKWatch*)val; + LDKWatch val_conv = *(LDKWatch*)(((uint64_t)val) & ~1); if (val_conv.free == LDKWatch_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKWatch_JCalls_clone(val_conv.this_arg); @@ -9460,7 +9465,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1t LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)val; + LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)(((uint64_t)val) & ~1); if (val_conv.free == LDKBroadcasterInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKBroadcasterInterface_JCalls_clone(val_conv.this_arg); @@ -9480,7 +9485,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1l LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKLogger val_conv = *(LDKLogger*)val; + LDKLogger val_conv = *(LDKLogger*)(((uint64_t)val) & ~1); if (val_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(val_conv.this_arg); @@ -9509,33 +9514,32 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1d LDKUserConfig val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UserConfig_clone(&val_conv); + val_conv = UserConfig_clone(&val_conv); ChannelManagerReadArgs_set_default_config(&this_ptr_conv, val_conv); } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new(JNIEnv *env, jclass clz, int64_t keys_manager, int64_t fee_estimator, int64_t chain_monitor, int64_t tx_broadcaster, int64_t logger, int64_t default_config, int64_tArray channel_monitors) { - LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)keys_manager; + LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(((uint64_t)keys_manager) & ~1); if (keys_manager_conv.free == LDKKeysInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKKeysInterface_JCalls_clone(keys_manager_conv.this_arg); } - LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)fee_estimator; + LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(((uint64_t)fee_estimator) & ~1); if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKFeeEstimator_JCalls_clone(fee_estimator_conv.this_arg); } - LDKWatch chain_monitor_conv = *(LDKWatch*)chain_monitor; + LDKWatch chain_monitor_conv = *(LDKWatch*)(((uint64_t)chain_monitor) & ~1); if (chain_monitor_conv.free == LDKWatch_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKWatch_JCalls_clone(chain_monitor_conv.this_arg); } - LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)tx_broadcaster; + LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)tx_broadcaster) & ~1); if (tx_broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKBroadcasterInterface_JCalls_clone(tx_broadcaster_conv.this_arg); } - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -9543,8 +9547,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new LDKUserConfig default_config_conv; default_config_conv.inner = (void*)(default_config & (~1)); default_config_conv.is_owned = (default_config & 1) || (default_config == 0); - if (default_config_conv.inner != NULL) - default_config_conv = UserConfig_clone(&default_config_conv); + default_config_conv = UserConfig_clone(&default_config_conv); LDKCVec_ChannelMonitorZ channel_monitors_constr; channel_monitors_constr.datalen = (*env)->GetArrayLength(env, channel_monitors); if (channel_monitors_constr.datalen > 0) @@ -9557,7 +9560,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new LDKChannelMonitor arr_conv_16_conv; arr_conv_16_conv.inner = (void*)(arr_conv_16 & (~1)); arr_conv_16_conv.is_owned = (arr_conv_16 & 1) || (arr_conv_16 == 0); - // Warning: we may need a move here but can't clone! channel_monitors_constr.data[q] = arr_conv_16_conv; } (*env)->ReleaseLongArrayElements(env, channel_monitors, channel_monitors_vals, 0); @@ -9578,7 +9580,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa LDKChannelManagerReadArgs arg_conv; arg_conv.inner = (void*)(arg & (~1)); arg_conv.is_owned = (arg & 1) || (arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelManagerReadArgs LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ"); *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv); (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0); @@ -9592,6 +9594,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DecodeError_1free(JNIEnv *env, DecodeError_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKDecodeError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKDecodeError ret_var = DecodeError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { LDKInit this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -11673,7 +11689,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKNetAddress this_ptr_conv = *(LDKNetAddress*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKNetAddress this_ptr_conv = *(LDKNetAddress*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); NetAddress_free(this_ptr_conv); } @@ -11747,7 +11764,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_ LDKNodeFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures UnsignedNodeAnnouncement_set_features(&this_ptr_conv, val_conv); } @@ -11836,7 +11853,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_ int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL); for (size_t m = 0; m < val_constr.datalen; m++) { int64_t arr_conv_12 = val_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); val_constr.data[m] = arr_conv_12_conv; } @@ -11905,8 +11922,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1content LDKUnsignedNodeAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UnsignedNodeAnnouncement_clone(&val_conv); + val_conv = UnsignedNodeAnnouncement_clone(&val_conv); NodeAnnouncement_set_contents(&this_ptr_conv, val_conv); } @@ -11917,8 +11933,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEn LDKUnsignedNodeAnnouncement contents_arg_conv; contents_arg_conv.inner = (void*)(contents_arg & (~1)); contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0); - if (contents_arg_conv.inner != NULL) - contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv); + contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv); LDKNodeAnnouncement ret_var = NodeAnnouncement_new(signature_arg_ref, contents_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -11971,7 +11986,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s LDKChannelFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures UnsignedChannelAnnouncement_set_features(&this_ptr_conv, val_conv); } @@ -12203,8 +12218,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1cont LDKUnsignedChannelAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UnsignedChannelAnnouncement_clone(&val_conv); + val_conv = UnsignedChannelAnnouncement_clone(&val_conv); ChannelAnnouncement_set_contents(&this_ptr_conv, val_conv); } @@ -12224,8 +12238,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JN LDKUnsignedChannelAnnouncement contents_arg_conv; contents_arg_conv.inner = (void*)(contents_arg & (~1)); contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0); - if (contents_arg_conv.inner != NULL) - contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv); + contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv); LDKChannelAnnouncement ret_var = ChannelAnnouncement_new(node_signature_1_arg_ref, node_signature_2_arg_ref, bitcoin_signature_1_arg_ref, bitcoin_signature_2_arg_ref, contents_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -12442,8 +12455,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1contents(J LDKUnsignedChannelUpdate val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UnsignedChannelUpdate_clone(&val_conv); + val_conv = UnsignedChannelUpdate_clone(&val_conv); ChannelUpdate_set_contents(&this_ptr_conv, val_conv); } @@ -12454,8 +12466,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv * LDKUnsignedChannelUpdate contents_arg_conv; contents_arg_conv.inner = (void*)(contents_arg & (~1)); contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0); - if (contents_arg_conv.inner != NULL) - contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv); + contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv); LDKChannelUpdate ret_var = ChannelUpdate_new(signature_arg_ref, contents_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -12919,7 +12930,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1new( } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorAction_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKErrorAction this_ptr_conv = *(LDKErrorAction*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKErrorAction this_ptr_conv = *(LDKErrorAction*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); ErrorAction_free(this_ptr_conv); } @@ -12939,6 +12951,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1free(JNIEnv *e LightningError_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKLightningError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKLightningError ret_var = LightningError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_LightningError_1get_1err(JNIEnv *env, jclass clz, int64_t this_ptr) { LDKLightningError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -12973,7 +12999,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1set_1action(JN LDKLightningError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKErrorAction val_conv = *(LDKErrorAction*)val; + LDKErrorAction val_conv = *(LDKErrorAction*)(((uint64_t)val) & ~1); FREE((void*)val); LightningError_set_action(&this_ptr_conv, val_conv); } @@ -12983,7 +13009,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1new(JNIEnv err_arg_ref.datalen = (*env)->GetArrayLength(env, err_arg); err_arg_ref.data = MALLOC(err_arg_ref.datalen, "LDKCVec_u8Z Bytes"); (*env)->GetByteArrayRegion(env, err_arg, 0, err_arg_ref.datalen, err_arg_ref.data); - LDKErrorAction action_arg_conv = *(LDKErrorAction*)action_arg; + LDKErrorAction action_arg_conv = *(LDKErrorAction*)(((uint64_t)action_arg) & ~1); FREE((void*)action_arg); LDKLightningError ret_var = LightningError_new(err_arg_ref, action_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -13032,8 +13058,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_ LDKUpdateAddHTLC arr_conv_15_conv; arr_conv_15_conv.inner = (void*)(arr_conv_15 & (~1)); arr_conv_15_conv.is_owned = (arr_conv_15 & 1) || (arr_conv_15 == 0); - if (arr_conv_15_conv.inner != NULL) - arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); + arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); val_constr.data[p] = arr_conv_15_conv; } (*env)->ReleaseLongArrayElements(env, val, val_vals, 0); @@ -13056,8 +13081,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_ LDKUpdateFulfillHTLC arr_conv_19_conv; arr_conv_19_conv.inner = (void*)(arr_conv_19 & (~1)); arr_conv_19_conv.is_owned = (arr_conv_19 & 1) || (arr_conv_19 == 0); - if (arr_conv_19_conv.inner != NULL) - arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); + arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); val_constr.data[t] = arr_conv_19_conv; } (*env)->ReleaseLongArrayElements(env, val, val_vals, 0); @@ -13080,8 +13104,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_ LDKUpdateFailHTLC arr_conv_16_conv; arr_conv_16_conv.inner = (void*)(arr_conv_16 & (~1)); arr_conv_16_conv.is_owned = (arr_conv_16 & 1) || (arr_conv_16 == 0); - if (arr_conv_16_conv.inner != NULL) - arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); + arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); val_constr.data[q] = arr_conv_16_conv; } (*env)->ReleaseLongArrayElements(env, val, val_vals, 0); @@ -13104,8 +13127,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_ LDKUpdateFailMalformedHTLC arr_conv_25_conv; arr_conv_25_conv.inner = (void*)(arr_conv_25 & (~1)); arr_conv_25_conv.is_owned = (arr_conv_25 & 1) || (arr_conv_25 == 0); - if (arr_conv_25_conv.inner != NULL) - arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); + arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); val_constr.data[z] = arr_conv_25_conv; } (*env)->ReleaseLongArrayElements(env, val, val_vals, 0); @@ -13133,8 +13155,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_ LDKUpdateFee val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UpdateFee_clone(&val_conv); + val_conv = UpdateFee_clone(&val_conv); CommitmentUpdate_set_update_fee(&this_ptr_conv, val_conv); } @@ -13159,8 +13180,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1commitm LDKCommitmentSigned val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = CommitmentSigned_clone(&val_conv); + val_conv = CommitmentSigned_clone(&val_conv); CommitmentUpdate_set_commitment_signed(&this_ptr_conv, val_conv); } @@ -13177,8 +13197,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn LDKUpdateAddHTLC arr_conv_15_conv; arr_conv_15_conv.inner = (void*)(arr_conv_15 & (~1)); arr_conv_15_conv.is_owned = (arr_conv_15 & 1) || (arr_conv_15 == 0); - if (arr_conv_15_conv.inner != NULL) - arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); + arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); update_add_htlcs_arg_constr.data[p] = arr_conv_15_conv; } (*env)->ReleaseLongArrayElements(env, update_add_htlcs_arg, update_add_htlcs_arg_vals, 0); @@ -13194,8 +13213,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn LDKUpdateFulfillHTLC arr_conv_19_conv; arr_conv_19_conv.inner = (void*)(arr_conv_19 & (~1)); arr_conv_19_conv.is_owned = (arr_conv_19 & 1) || (arr_conv_19 == 0); - if (arr_conv_19_conv.inner != NULL) - arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); + arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); update_fulfill_htlcs_arg_constr.data[t] = arr_conv_19_conv; } (*env)->ReleaseLongArrayElements(env, update_fulfill_htlcs_arg, update_fulfill_htlcs_arg_vals, 0); @@ -13211,8 +13229,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn LDKUpdateFailHTLC arr_conv_16_conv; arr_conv_16_conv.inner = (void*)(arr_conv_16 & (~1)); arr_conv_16_conv.is_owned = (arr_conv_16 & 1) || (arr_conv_16 == 0); - if (arr_conv_16_conv.inner != NULL) - arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); + arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); update_fail_htlcs_arg_constr.data[q] = arr_conv_16_conv; } (*env)->ReleaseLongArrayElements(env, update_fail_htlcs_arg, update_fail_htlcs_arg_vals, 0); @@ -13228,21 +13245,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn LDKUpdateFailMalformedHTLC arr_conv_25_conv; arr_conv_25_conv.inner = (void*)(arr_conv_25 & (~1)); arr_conv_25_conv.is_owned = (arr_conv_25 & 1) || (arr_conv_25 == 0); - if (arr_conv_25_conv.inner != NULL) - arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); + arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); update_fail_malformed_htlcs_arg_constr.data[z] = arr_conv_25_conv; } (*env)->ReleaseLongArrayElements(env, update_fail_malformed_htlcs_arg, update_fail_malformed_htlcs_arg_vals, 0); LDKUpdateFee update_fee_arg_conv; update_fee_arg_conv.inner = (void*)(update_fee_arg & (~1)); update_fee_arg_conv.is_owned = (update_fee_arg & 1) || (update_fee_arg == 0); - if (update_fee_arg_conv.inner != NULL) - update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv); + update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv); LDKCommitmentSigned commitment_signed_arg_conv; commitment_signed_arg_conv.inner = (void*)(commitment_signed_arg & (~1)); commitment_signed_arg_conv.is_owned = (commitment_signed_arg & 1) || (commitment_signed_arg == 0); - if (commitment_signed_arg_conv.inner != NULL) - commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv); + commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv); LDKCommitmentUpdate ret_var = CommitmentUpdate_new(update_add_htlcs_arg_constr, update_fulfill_htlcs_arg_constr, update_fail_htlcs_arg_constr, update_fail_malformed_htlcs_arg_constr, update_fee_arg_conv, commitment_signed_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -13254,7 +13268,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCFailChannelUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKHTLCFailChannelUpdate this_ptr_conv = *(LDKHTLCFailChannelUpdate*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKHTLCFailChannelUpdate this_ptr_conv = *(LDKHTLCFailChannelUpdate*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); HTLCFailChannelUpdate_free(this_ptr_conv); } @@ -13268,13 +13283,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCFailChannelUpdate_1clon } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKChannelMessageHandler this_ptr_conv = *(LDKChannelMessageHandler*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKChannelMessageHandler this_ptr_conv = *(LDKChannelMessageHandler*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); ChannelMessageHandler_free(this_ptr_conv); } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKRoutingMessageHandler this_ptr_conv = *(LDKRoutingMessageHandler*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKRoutingMessageHandler this_ptr_conv = *(LDKRoutingMessageHandler*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); RoutingMessageHandler_free(this_ptr_conv); } @@ -14039,7 +14056,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1chan_1han LDKMessageHandler this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)val; + LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)(((uint64_t)val) & ~1); if (val_conv.free == LDKChannelMessageHandler_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKChannelMessageHandler_JCalls_clone(val_conv.this_arg); @@ -14059,7 +14076,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1route_1ha LDKMessageHandler this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)val; + LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)(((uint64_t)val) & ~1); if (val_conv.free == LDKRoutingMessageHandler_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKRoutingMessageHandler_JCalls_clone(val_conv.this_arg); @@ -14068,12 +14085,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1route_1ha } JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1new(JNIEnv *env, jclass clz, int64_t chan_handler_arg, int64_t route_handler_arg) { - LDKChannelMessageHandler chan_handler_arg_conv = *(LDKChannelMessageHandler*)chan_handler_arg; + LDKChannelMessageHandler chan_handler_arg_conv = *(LDKChannelMessageHandler*)(((uint64_t)chan_handler_arg) & ~1); if (chan_handler_arg_conv.free == LDKChannelMessageHandler_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKChannelMessageHandler_JCalls_clone(chan_handler_arg_conv.this_arg); } - LDKRoutingMessageHandler route_handler_arg_conv = *(LDKRoutingMessageHandler*)route_handler_arg; + LDKRoutingMessageHandler route_handler_arg_conv = *(LDKRoutingMessageHandler*)(((uint64_t)route_handler_arg) & ~1); if (route_handler_arg_conv.free == LDKRoutingMessageHandler_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKRoutingMessageHandler_JCalls_clone(route_handler_arg_conv.this_arg); @@ -14096,7 +14113,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1clone(JNI } JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_ptr) { - LDKSocketDescriptor this_ptr_conv = *(LDKSocketDescriptor*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKSocketDescriptor this_ptr_conv = *(LDKSocketDescriptor*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); SocketDescriptor_free(this_ptr_conv); } @@ -14108,6 +14126,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1free(JNIEnv * PeerHandleError_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKPeerHandleError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKPeerHandleError ret_var = PeerHandleError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1get_1no_1connection_1possible(JNIEnv *env, jclass clz, int64_t this_ptr) { LDKPeerHandleError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -14145,7 +14177,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new(JNIEnv *en LDKMessageHandler message_handler_conv; message_handler_conv.inner = (void*)(message_handler & (~1)); message_handler_conv.is_owned = (message_handler & 1) || (message_handler == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKMessageHandler LDKSecretKey our_node_secret_ref; CHECK((*env)->GetArrayLength(env, our_node_secret) == 32); (*env)->GetByteArrayRegion(env, our_node_secret, 0, 32, our_node_secret_ref.bytes); @@ -14153,7 +14185,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new(JNIEnv *en CHECK((*env)->GetArrayLength(env, ephemeral_random_data) == 32); (*env)->GetByteArrayRegion(env, ephemeral_random_data, 0, 32, ephemeral_random_data_arr); unsigned char (*ephemeral_random_data_ref)[32] = &ephemeral_random_data_arr; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -14191,7 +14223,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1outbound_ LDKPublicKey their_node_id_ref; CHECK((*env)->GetArrayLength(env, their_node_id) == 33); (*env)->GetByteArrayRegion(env, their_node_id, 0, 33, their_node_id_ref.compressed_form); - LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)descriptor; + LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(((uint64_t)descriptor) & ~1); if (descriptor_conv.free == LDKSocketDescriptor_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKSocketDescriptor_JCalls_clone(descriptor_conv.this_arg); @@ -14205,7 +14237,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1inbound_1 LDKPeerManager this_arg_conv; this_arg_conv.inner = (void*)(this_arg & (~1)); this_arg_conv.is_owned = false; - LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)descriptor; + LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(((uint64_t)descriptor) & ~1); if (descriptor_conv.free == LDKSocketDescriptor_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKSocketDescriptor_JCalls_clone(descriptor_conv.this_arg); @@ -14910,8 +14942,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1 LDKChannelPublicKeys val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelPublicKeys_clone(&val_conv); + val_conv = ChannelPublicKeys_clone(&val_conv); ChannelTransactionParameters_set_holder_pubkeys(&this_ptr_conv, val_conv); } @@ -14966,8 +14997,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1 LDKCounterpartyChannelTransactionParameters val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv); + val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv); ChannelTransactionParameters_set_counterparty_parameters(&this_ptr_conv, val_conv); } @@ -14992,8 +15022,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1 LDKOutPoint val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = OutPoint_clone(&val_conv); + val_conv = OutPoint_clone(&val_conv); ChannelTransactionParameters_set_funding_outpoint(&this_ptr_conv, val_conv); } @@ -15001,18 +15030,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter LDKChannelPublicKeys holder_pubkeys_arg_conv; holder_pubkeys_arg_conv.inner = (void*)(holder_pubkeys_arg & (~1)); holder_pubkeys_arg_conv.is_owned = (holder_pubkeys_arg & 1) || (holder_pubkeys_arg == 0); - if (holder_pubkeys_arg_conv.inner != NULL) - holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv); + holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv); LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg_conv; counterparty_parameters_arg_conv.inner = (void*)(counterparty_parameters_arg & (~1)); counterparty_parameters_arg_conv.is_owned = (counterparty_parameters_arg & 1) || (counterparty_parameters_arg == 0); - if (counterparty_parameters_arg_conv.inner != NULL) - counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv); + counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv); LDKOutPoint funding_outpoint_arg_conv; funding_outpoint_arg_conv.inner = (void*)(funding_outpoint_arg & (~1)); funding_outpoint_arg_conv.is_owned = (funding_outpoint_arg & 1) || (funding_outpoint_arg == 0); - if (funding_outpoint_arg_conv.inner != NULL) - funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv); + funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv); LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_new(holder_pubkeys_arg_conv, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg_conv, funding_outpoint_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -15065,8 +15091,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction LDKChannelPublicKeys val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelPublicKeys_clone(&val_conv); + val_conv = ChannelPublicKeys_clone(&val_conv); CounterpartyChannelTransactionParameters_set_pubkeys(&this_ptr_conv, val_conv); } @@ -15089,8 +15114,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact LDKChannelPublicKeys pubkeys_arg_conv; pubkeys_arg_conv.inner = (void*)(pubkeys_arg & (~1)); pubkeys_arg_conv.is_owned = (pubkeys_arg & 1) || (pubkeys_arg == 0); - if (pubkeys_arg_conv.inner != NULL) - pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv); + pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv); LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_new(pubkeys_arg_conv, selected_contest_delay_arg); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -15344,8 +15368,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction LDKCommitmentTransaction commitment_tx_conv; commitment_tx_conv.inner = (void*)(commitment_tx & (~1)); commitment_tx_conv.is_owned = (commitment_tx & 1) || (commitment_tx == 0); - if (commitment_tx_conv.inner != NULL) - commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv); + commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv); LDKSignature counterparty_sig_ref; CHECK((*env)->GetArrayLength(env, counterparty_sig) == 64); (*env)->GetByteArrayRegion(env, counterparty_sig, 0, 64, counterparty_sig_ref.compact_form); @@ -15780,7 +15803,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features( LDKNodeFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures RouteHop_set_node_features(&this_ptr_conv, val_conv); } @@ -15820,7 +15843,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1featur LDKChannelFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures RouteHop_set_channel_features(&this_ptr_conv, val_conv); } @@ -15861,11 +15884,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env, LDKNodeFeatures node_features_arg_conv; node_features_arg_conv.inner = (void*)(node_features_arg & (~1)); node_features_arg_conv.is_owned = (node_features_arg & 1) || (node_features_arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures LDKChannelFeatures channel_features_arg_conv; channel_features_arg_conv.inner = (void*)(channel_features_arg & (~1)); channel_features_arg_conv.is_owned = (channel_features_arg & 1) || (channel_features_arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -15921,8 +15944,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env, LDKRouteHop arr_conv_10_conv; arr_conv_10_conv.inner = (void*)(arr_conv_10 & (~1)); arr_conv_10_conv.is_owned = (arr_conv_10 & 1) || (arr_conv_10 == 0); - if (arr_conv_10_conv.inner != NULL) - arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); + arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); arr_conv_12_constr.data[k] = arr_conv_10_conv; } (*env)->ReleaseLongArrayElements(env, arr_conv_12, arr_conv_12_vals, 0); @@ -15952,8 +15974,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl LDKRouteHop arr_conv_10_conv; arr_conv_10_conv.inner = (void*)(arr_conv_10 & (~1)); arr_conv_10_conv.is_owned = (arr_conv_10 & 1) || (arr_conv_10 == 0); - if (arr_conv_10_conv.inner != NULL) - arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); + arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); arr_conv_12_constr.data[k] = arr_conv_10_conv; } (*env)->ReleaseLongArrayElements(env, arr_conv_12, arr_conv_12_vals, 0); @@ -16066,8 +16087,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1fees(JNIEnv *e LDKRoutingFees val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = RoutingFees_clone(&val_conv); + val_conv = RoutingFees_clone(&val_conv); RouteHint_set_fees(&this_ptr_conv, val_conv); } @@ -16108,8 +16128,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env, LDKRoutingFees fees_arg_conv; fees_arg_conv.inner = (void*)(fees_arg & (~1)); fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0); - if (fees_arg_conv.inner != NULL) - fees_arg_conv = RoutingFees_clone(&fees_arg_conv); + fees_arg_conv = RoutingFees_clone(&fees_arg_conv); LDKRouteHint ret_var = RouteHint_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -16157,12 +16176,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_get_1route(JNIEnv *env, jcl LDKRouteHint arr_conv_11_conv; arr_conv_11_conv.inner = (void*)(arr_conv_11 & (~1)); arr_conv_11_conv.is_owned = (arr_conv_11 & 1) || (arr_conv_11 == 0); - if (arr_conv_11_conv.inner != NULL) - arr_conv_11_conv = RouteHint_clone(&arr_conv_11_conv); + arr_conv_11_conv = RouteHint_clone(&arr_conv_11_conv); last_hops_constr.data[l] = arr_conv_11_conv; } (*env)->ReleaseLongArrayElements(env, last_hops, last_hops_vals, 0); - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -16199,7 +16217,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1new(JNI CHECK((*env)->GetArrayLength(env, genesis_hash) == 32); (*env)->GetByteArrayRegion(env, genesis_hash, 0, 32, genesis_hash_ref.data); LDKAccess* chain_access_conv = (LDKAccess*)chain_access; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -16216,7 +16234,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1new(JNI JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1from_1net_1graph(JNIEnv *env, jclass clz, int64_t chain_access, int64_t logger, int64_t network_graph) { LDKAccess* chain_access_conv = (LDKAccess*)chain_access; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); if (logger_conv.free == LDKLogger_JCalls_free) { // If this_arg is a JCalls struct, then we need to increment the refcnt in it. LDKLogger_JCalls_clone(logger_conv.this_arg); @@ -16224,7 +16242,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1from_1n LDKNetworkGraph network_graph_conv; network_graph_conv.inner = (void*)(network_graph & (~1)); network_graph_conv.is_owned = (network_graph & 1) || (network_graph == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNetworkGraph LDKNetGraphMsgHandler ret_var = NetGraphMsgHandler_from_net_graph(chain_access_conv, logger_conv, network_graph_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -16288,6 +16306,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1free(J DirectionalChannelInfo_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKDirectionalChannelInfo orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) { LDKDirectionalChannelInfo this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -16369,8 +16401,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1f LDKRoutingFees val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = RoutingFees_clone(&val_conv); + val_conv = RoutingFees_clone(&val_conv); DirectionalChannelInfo_set_fees(&this_ptr_conv, val_conv); } @@ -16395,8 +16426,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1l LDKChannelUpdate val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelUpdate_clone(&val_conv); + val_conv = ChannelUpdate_clone(&val_conv); DirectionalChannelInfo_set_last_update_message(&this_ptr_conv, val_conv); } @@ -16454,7 +16484,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNI LDKChannelFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures ChannelInfo_set_features(&this_ptr_conv, val_conv); } @@ -16498,7 +16528,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two LDKDirectionalChannelInfo val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + val_conv = DirectionalChannelInfo_clone(&val_conv); ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv); } @@ -16542,7 +16572,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one LDKDirectionalChannelInfo val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + val_conv = DirectionalChannelInfo_clone(&val_conv); ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv); } @@ -16567,8 +16597,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement LDKChannelAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelAnnouncement_clone(&val_conv); + val_conv = ChannelAnnouncement_clone(&val_conv); ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv); } @@ -16688,6 +16717,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNI NodeAnnouncementInfo_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKNodeAnnouncementInfo orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) { LDKNodeAnnouncementInfo this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -16709,7 +16752,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1fea LDKNodeFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv); } @@ -16779,7 +16822,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1add int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL); for (size_t m = 0; m < val_constr.datalen; m++) { int64_t arr_conv_12 = val_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); val_constr.data[m] = arr_conv_12_conv; } @@ -16808,8 +16851,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ann LDKNodeAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = NodeAnnouncement_clone(&val_conv); + val_conv = NodeAnnouncement_clone(&val_conv); NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv); } @@ -16817,7 +16859,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J LDKNodeFeatures features_arg_conv; features_arg_conv.inner = (void*)(features_arg & (~1)); features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures LDKThreeBytes rgb_arg_ref; CHECK((*env)->GetArrayLength(env, rgb_arg) == 3); (*env)->GetByteArrayRegion(env, rgb_arg, 0, 3, rgb_arg_ref.data); @@ -16833,7 +16875,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J int64_t* addresses_arg_vals = (*env)->GetLongArrayElements (env, addresses_arg, NULL); for (size_t m = 0; m < addresses_arg_constr.datalen; m++) { int64_t arr_conv_12 = addresses_arg_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); addresses_arg_constr.data[m] = arr_conv_12_conv; } @@ -16841,8 +16883,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J LDKNodeAnnouncement announcement_message_arg_conv; announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1)); announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0); - if (announcement_message_arg_conv.inner != NULL) - announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv); + announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv); LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_ref, addresses_arg_constr, announcement_message_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -16881,6 +16922,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jc NodeInfo_free(this_ptr_conv); } +JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) { + LDKNodeInfo orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1channels(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) { LDKNodeInfo this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -16921,8 +16976,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1lowest_1inbound LDKRoutingFees val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = RoutingFees_clone(&val_conv); + val_conv = RoutingFees_clone(&val_conv); NodeInfo_set_lowest_inbound_channel_fees(&this_ptr_conv, val_conv); } @@ -16947,7 +17001,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1i LDKNodeAnnouncementInfo val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + val_conv = NodeAnnouncementInfo_clone(&val_conv); NodeInfo_set_announcement_info(&this_ptr_conv, val_conv); } @@ -16967,12 +17021,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env, LDKRoutingFees lowest_inbound_channel_fees_arg_conv; lowest_inbound_channel_fees_arg_conv.inner = (void*)(lowest_inbound_channel_fees_arg & (~1)); lowest_inbound_channel_fees_arg_conv.is_owned = (lowest_inbound_channel_fees_arg & 1) || (lowest_inbound_channel_fees_arg == 0); - if (lowest_inbound_channel_fees_arg_conv.inner != NULL) - lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv); + lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv); LDKNodeAnnouncementInfo announcement_info_arg_conv; announcement_info_arg_conv.inner = (void*)(announcement_info_arg & (~1)); announcement_info_arg_conv.is_owned = (announcement_info_arg & 1) || (announcement_info_arg == 0); - // Warning: we may need a move here but can't clone! + announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv); LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, lowest_inbound_channel_fees_arg_conv, announcement_info_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. diff --git a/src/main/jni/org_ldk_impl_bindings.h b/src/main/jni/org_ldk_impl_bindings.h index eb34b84a..ad8358be 100644 --- a/src/main/jni/org_ldk_impl_bindings.h +++ b/src/main/jni/org_ldk_impl_bindings.h @@ -479,30 +479,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNon JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1get_1err (JNIEnv *, jclass, jlong); -/* - * Class: org_ldk_impl_bindings - * Method: LDKCResult_CVec_SignatureZNoneZ_result_ok - * Signature: (J)Z - */ -JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok - (JNIEnv *, jclass, jlong); - -/* - * Class: org_ldk_impl_bindings - * Method: LDKCResult_CVec_SignatureZNoneZ_get_ok - * Signature: (J)[[B - */ -JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1ok - (JNIEnv *, jclass, jlong); - -/* - * Class: org_ldk_impl_bindings - * Method: LDKCResult_CVec_SignatureZNoneZ_get_err - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1err - (JNIEnv *, jclass, jlong); - /* * Class: org_ldk_impl_bindings * Method: LDKChannelKeys_new @@ -545,18 +521,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1counterpar /* * Class: org_ldk_impl_bindings - * Method: ChannelKeys_sign_holder_commitment + * Method: ChannelKeys_sign_holder_commitment_and_htlcs * Signature: (JJ)J */ -JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1commitment - (JNIEnv *, jclass, jlong, jlong); - -/* - * Class: org_ldk_impl_bindings - * Method: ChannelKeys_sign_holder_commitment_htlc_transactions - * Signature: (JJ)J - */ -JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1commitment_1htlc_1transactions +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1commitment_1and_1htlcs (JNIEnv *, jclass, jlong, jlong); /* @@ -1687,6 +1655,30 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitment JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1get_1err (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: LDKCResult_CVec_SignatureZNoneZ_result_ok + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok + (JNIEnv *, jclass, jlong); + +/* + * Class: org_ldk_impl_bindings + * Method: LDKCResult_CVec_SignatureZNoneZ_get_ok + * Signature: (J)[[B + */ +JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1ok + (JNIEnv *, jclass, jlong); + +/* + * Class: org_ldk_impl_bindings + * Method: LDKCResult_CVec_SignatureZNoneZ_get_err + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1err + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: LDKCVec_RouteHopZ_new @@ -2327,6 +2319,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUp JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NoneChannelMonitorUpdateErrZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CVec_MonitorEventZ_free @@ -2383,6 +2383,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErr JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NoneMonitorUpdateErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: C2Tuple_OutPointScriptZ_free @@ -2407,6 +2415,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1new JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free (JNIEnv *, jclass, jobjectArray); +/* + * Class: org_ldk_impl_bindings + * Method: C2Tuple_u32TxOutZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: C2Tuple_u32TxOutZ_free @@ -2495,6 +2511,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashCh JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: C2Tuple_u64u64Z_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u64Z_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: C2Tuple_u64u64Z_free @@ -2535,6 +2559,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescr JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_SpendableOutputDescriptorDecodeErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CVec_SignatureZ_free @@ -2543,6 +2575,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescri JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SignatureZ_1free (JNIEnv *, jclass, jobjectArray); +/* + * Class: org_ldk_impl_bindings + * Method: C2Tuple_SignatureCVec_SignatureZZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: C2Tuple_SignatureCVec_SignatureZZ_free @@ -2623,38 +2663,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone (JNIEnv *, jclass, jlong); -/* - * Class: org_ldk_impl_bindings - * Method: CResult_CVec_SignatureZNoneZ_ok - * Signature: ([[B)J - */ -JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok - (JNIEnv *, jclass, jobjectArray); - -/* - * Class: org_ldk_impl_bindings - * Method: CResult_CVec_SignatureZNoneZ_err - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err - (JNIEnv *, jclass); - -/* - * Class: org_ldk_impl_bindings - * Method: CResult_CVec_SignatureZNoneZ_free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free - (JNIEnv *, jclass, jlong); - -/* - * Class: org_ldk_impl_bindings - * Method: CResult_CVec_SignatureZNoneZ_clone - * Signature: (J)J - */ -JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone - (JNIEnv *, jclass, jlong); - /* * Class: org_ldk_impl_bindings * Method: CResult_ChanKeySignerDecodeErrorZ_ok @@ -2679,6 +2687,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecodeE JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecodeErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_ChanKeySignerDecodeErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChanKeySignerDecodeErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_InMemoryChannelKeysDecodeErrorZ_ok @@ -2727,6 +2743,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1e JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_TxOutAccessErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_NoneAPIErrorZ_ok @@ -2783,6 +2807,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailu JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NonePaymentSendFailureZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CVec_NetAddressZ_free @@ -2863,6 +2895,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1err JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NetAddressu8Z_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressu8Z_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_CResult_NetAddressu8ZDecodeErrorZ_ok @@ -2951,6 +2991,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_boolLightningErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free @@ -3007,6 +3055,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NoneLightningErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_ChannelReestablishDecodeErrorZ_ok @@ -3359,6 +3415,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleE JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_CVec_u8ZPeerHandleErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_NonePeerHandleErrorZ_ok @@ -3383,6 +3447,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NonePeerHandleErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_boolPeerHandleErrorZ_ok @@ -3407,6 +3479,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_boolPeerHandleErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_SecretKeySecpErrorZ_ok @@ -3503,6 +3583,38 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTra JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_CVec_SignatureZNoneZ_ok + * Signature: ([[B)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok + (JNIEnv *, jclass, jobjectArray); + +/* + * Class: org_ldk_impl_bindings + * Method: CResult_CVec_SignatureZNoneZ_err + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err + (JNIEnv *, jclass); + +/* + * Class: org_ldk_impl_bindings + * Method: CResult_CVec_SignatureZNoneZ_free + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free + (JNIEnv *, jclass, jlong); + +/* + * Class: org_ldk_impl_bindings + * Method: CResult_CVec_SignatureZNoneZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CVec_RouteHopZ_free @@ -3623,6 +3735,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfo JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NodeAnnouncementInfoDecodeErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_NodeInfoDecodeErrorZ_ok @@ -3647,6 +3767,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: CResult_NodeInfoDecodeErrorZ_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: CResult_NetworkGraphDecodeErrorZ_ok @@ -4383,6 +4511,14 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateErr_1cl JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: MonitorUpdateError_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: MonitorEvent_free @@ -4439,6 +4575,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1read JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: ChannelMonitor_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: ChannelMonitor_write @@ -5047,6 +5191,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1live JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: PaymentSendFailure_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: ChannelManager_new @@ -5090,9 +5242,9 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1close_1channe /* * Class: org_ldk_impl_bindings * Method: ChannelManager_force_close_channel - * Signature: (J[B)V + * Signature: (J[B)J */ -JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1channel +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1channel (JNIEnv *, jclass, jlong, jbyteArray); /* @@ -5351,6 +5503,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMana JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DecodeError_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: DecodeError_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: Init_free @@ -8063,6 +8223,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: LightningError_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LightningError_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: LightningError_get_err @@ -8791,6 +8959,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1free JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: PeerHandleError_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: PeerHandleError_get_no_connection_possible @@ -10247,6 +10423,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1Messa JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: DirectionalChannelInfo_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: DirectionalChannelInfo_get_last_update @@ -10559,6 +10743,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: NodeAnnouncementInfo_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: NodeAnnouncementInfo_get_features @@ -10679,6 +10871,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1read JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free (JNIEnv *, jclass, jlong); +/* + * Class: org_ldk_impl_bindings + * Method: NodeInfo_clone + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone + (JNIEnv *, jclass, jlong); + /* * Class: org_ldk_impl_bindings * Method: NodeInfo_set_channels diff --git a/ts/bindings.c b/ts/bindings.c index 54ab899b..a383cb9d 100644 --- a/ts/bindings.c +++ b/ts/bindings.c @@ -271,19 +271,12 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_u64u64Z_new(int64 ret->b = b; return (long)ret; } -static inline LDKC2Tuple_u64u64Z C2Tuple_u64u64Z_clone(const LDKC2Tuple_u64u64Z *orig) { - LDKC2Tuple_u64u64Z ret = { - .a = orig->a, - .b = orig->b, - }; - return ret; -} int64_t __attribute__((visibility("default"))) TS_LDKC2Tuple_u64u64Z_get_a(uint32_t ptr) { - LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)ptr; + LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)(ptr & ~1); return tuple->a; } int64_t __attribute__((visibility("default"))) TS_LDKC2Tuple_u64u64Z_get_b(uint32_t ptr) { - LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)ptr; + LDKC2Tuple_u64u64Z *tuple = (LDKC2Tuple_u64u64Z*)(ptr & ~1); return tuple->b; } uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_ref_from_ptr(uint32_t ptr) { @@ -294,7 +287,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_ CHECK((((long)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long outpoint_ref = (long)outpoint_var.inner & ~1; - long output_ref = (long)&obj->static_output.output; + long output_ref = ((long)&obj->static_output.output) | 1; return 0 /* LDKSpendableOutputDescriptor - StaticOutput */; (void) outpoint_ref; (void) (long)output_ref; } case LDKSpendableOutputDescriptor_DynamicOutputP2WSH: { @@ -304,8 +297,8 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_ long outpoint_ref = (long)outpoint_var.inner & ~1; int8_tArray per_commitment_point_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(per_commitment_point_arr + 4), obj->dynamic_output_p2wsh.per_commitment_point.compressed_form, 33); - long output_ref = (long)&obj->dynamic_output_p2wsh.output; - long key_derivation_params_ref = (long)&obj->dynamic_output_p2wsh.key_derivation_params; + long output_ref = ((long)&obj->dynamic_output_p2wsh.output) | 1; + long key_derivation_params_ref = (long)(&obj->dynamic_output_p2wsh.key_derivation_params) | 1; int8_tArray revocation_pubkey_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(revocation_pubkey_arr + 4), obj->dynamic_output_p2wsh.revocation_pubkey.compressed_form, 33); return 0 /* LDKSpendableOutputDescriptor - DynamicOutputP2WSH */; (void) outpoint_ref; (void) per_commitment_point_arr; (void) obj->dynamic_output_p2wsh.to_self_delay; (void) (long)output_ref; (void) key_derivation_params_ref; (void) revocation_pubkey_arr; @@ -315,8 +308,8 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_ CHECK((((long)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long outpoint_ref = (long)outpoint_var.inner & ~1; - long output_ref = (long)&obj->static_output_counterparty_payment.output; - long key_derivation_params_ref = (long)&obj->static_output_counterparty_payment.key_derivation_params; + long output_ref = ((long)&obj->static_output_counterparty_payment.output) | 1; + long key_derivation_params_ref = (long)(&obj->static_output_counterparty_payment.key_derivation_params) | 1; return 0 /* LDKSpendableOutputDescriptor - StaticOutputCounterpartyPayment */; (void) outpoint_ref; (void) (long)output_ref; (void) key_derivation_params_ref; } default: abort(); @@ -332,7 +325,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_SpendableOutputDescr uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)arr_elem; + LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -520,11 +513,11 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_ case LDKMessageSendEvent_HandleError: { int8_tArray node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(node_id_arr + 4), obj->handle_error.node_id.compressed_form, 33); - long action_ref = (long)&obj->handle_error.action; + long action_ref = ((long)&obj->handle_error.action) | 1; return 0 /* LDKMessageSendEvent - HandleError */; (void) node_id_arr; (void) action_ref; } case LDKMessageSendEvent_PaymentFailureNetworkUpdate: { - long update_ref = (long)&obj->payment_failure_network_update.update; + long update_ref = ((long)&obj->payment_failure_network_update.update) | 1; return 0 /* LDKMessageSendEvent - PaymentFailureNetworkUpdate */; (void) update_ref; } case LDKMessageSendEvent_SendChannelRangeQuery: { @@ -558,7 +551,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_MessageSendEventZ_ne uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)arr_elem; + LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -615,7 +608,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKEvent_ref_from_ptr(uint32_ uint32_tArray outputs_arr = init_arr(outputs_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes"); uint32_t *outputs_arr_ptr = (uint32_t*)(outputs_arr + 4); for (size_t b = 0; b < outputs_var.datalen; b++) { - long arr_conv_27_ref = (long)&outputs_var.data[b]; + long arr_conv_27_ref = ((long)&outputs_var.data[b]) | 1; outputs_arr_ptr[b] = arr_conv_27_ref; } return 0 /* LDKEvent - SpendableOutputs */; (void) outputs_arr; @@ -633,7 +626,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_EventZ_new(uint32_tA uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKEvent arr_elem_conv = *(LDKEvent*)arr_elem; + LDKEvent arr_elem_conv = *(LDKEvent*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -659,11 +652,11 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_usizeTransactionZ return (long)ret; } intptr_t __attribute__((visibility("default"))) TS_LDKC2Tuple_usizeTransactionZ_get_a(uint32_t ptr) { - LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)ptr; + LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)(ptr & ~1); return tuple->a; } int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_usizeTransactionZ_get_b(uint32_t ptr) { - LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)ptr; + LDKC2Tuple_usizeTransactionZ *tuple = (LDKC2Tuple_usizeTransactionZ*)(ptr & ~1); LDKTransaction b_var = tuple->b; int8_tArray b_arr = init_arr(b_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(b_arr + 4), b_var.data, b_var.datalen); @@ -679,7 +672,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_usizeTransac uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_elem; + LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -690,27 +683,16 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonito return ((LDKCResult_NoneChannelMonitorUpdateErrZ*)arg)->result_ok; } void __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonitorUpdateErrZ_get_ok(uint32_t arg) { - LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)arg; + LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonitorUpdateErrZ_get_err(uint32_t arg) { - LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)arg; + LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1); CHECK(!val->result_ok); uint32_t err_conv = LDKChannelMonitorUpdateErr_to_js((*val->contents.err)); return err_conv; } -static inline LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_clone(const LDKCResult_NoneChannelMonitorUpdateErrZ *orig) { - LDKCResult_NoneChannelMonitorUpdateErrZ res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - res.contents.result = NULL; - } else { - LDKChannelMonitorUpdateErr* contents = MALLOC(sizeof(LDKChannelMonitorUpdateErr), "LDKChannelMonitorUpdateErr result Err clone"); - *contents = ChannelMonitorUpdateErr_clone(orig->contents.err); - res.contents.err = contents; - } - return res; -} uint32_t __attribute__((visibility("default"))) TS_LDKCVec_MonitorEventZ_new(uint32_tArray elems) { LDKCVec_MonitorEventZ *ret = MALLOC(sizeof(LDKCVec_MonitorEventZ), "LDKCVec_MonitorEventZ"); ret->datalen = *((uint32_t*)elems); @@ -724,8 +706,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_MonitorEventZ_new(ui LDKMonitorEvent arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = MonitorEvent_clone(&arr_elem_conv); + arr_elem_conv = MonitorEvent_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -742,7 +723,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpd return ((LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg; + LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKChannelMonitorUpdate res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -751,7 +732,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpd return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg; + LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -763,12 +744,12 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdate return ((LDKCResult_NoneMonitorUpdateErrorZ*)arg)->result_ok; } void __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdateErrorZ_get_ok(uint32_t arg) { - LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)arg; + LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdateErrorZ_get_err(uint32_t arg) { - LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)arg; + LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKMonitorUpdateError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -781,8 +762,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_OutPointScriptZ_n LDKOutPoint a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = OutPoint_clone(&a_conv); + a_conv = OutPoint_clone(&a_conv); ret->a = a_conv; LDKCVec_u8Z b_ref; b_ref.datalen = *((uint32_t*)b); @@ -791,15 +771,8 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_OutPointScriptZ_n ret->b = b_ref; return (long)ret; } -static inline LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_clone(const LDKC2Tuple_OutPointScriptZ *orig) { - LDKC2Tuple_OutPointScriptZ ret = { - .a = OutPoint_clone(&orig->a), - .b = CVec_u8Z_clone(&orig->b), - }; - return ret; -} uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_OutPointScriptZ_get_a(uint32_t ptr) { - LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)ptr; + LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)(ptr & ~1); LDKOutPoint a_var = tuple->a; CHECK((((long)a_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&a_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -807,7 +780,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_OutPointScriptZ_g return a_ref; } int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_OutPointScriptZ_get_b(uint32_t ptr) { - LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)ptr; + LDKC2Tuple_OutPointScriptZ *tuple = (LDKC2Tuple_OutPointScriptZ*)(ptr & ~1); LDKCVec_u8Z b_var = tuple->b; int8_tArray b_arr = init_arr(b_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(b_arr + 4), b_var.data, b_var.datalen); @@ -816,25 +789,18 @@ int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_OutPointScript uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_u32TxOutZ_new(int32_t a, uint32_t b) { LDKC2Tuple_u32TxOutZ* ret = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ"); ret->a = a; - LDKTxOut b_conv = *(LDKTxOut*)b; + LDKTxOut b_conv = *(LDKTxOut*)(((uint64_t)b) & ~1); FREE((void*)b); ret->b = b_conv; return (long)ret; } -static inline LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_clone(const LDKC2Tuple_u32TxOutZ *orig) { - LDKC2Tuple_u32TxOutZ ret = { - .a = orig->a, - .b = TxOut_clone(&orig->b), - }; - return ret; -} int32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_u32TxOutZ_get_a(uint32_t ptr) { - LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)ptr; + LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)(ptr & ~1); return tuple->a; } uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_u32TxOutZ_get_b(uint32_t ptr) { - LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)ptr; - long b_ref = (long)&tuple->b; + LDKC2Tuple_u32TxOutZ *tuple = (LDKC2Tuple_u32TxOutZ*)(ptr & ~1); + long b_ref = ((long)&tuple->b) | 1; return (long)b_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_u32TxOutZZ_new(uint32_tArray elems) { @@ -847,7 +813,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_u32TxOutZZ_n uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)arr_elem; + LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -876,33 +842,26 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_TxidCVec_C2Tuple_ uint32_t* b_vals = (uint32_t*)(b + 4); for (size_t z = 0; z < b_constr.datalen; z++) { uint32_t arr_conv_25 = b_vals[z]; - LDKC2Tuple_u32TxOutZ arr_conv_25_conv = *(LDKC2Tuple_u32TxOutZ*)arr_conv_25; + LDKC2Tuple_u32TxOutZ arr_conv_25_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_conv_25) & ~1); FREE((void*)arr_conv_25); b_constr.data[z] = arr_conv_25_conv; } ret->b = b_constr; return (long)ret; } -static inline LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(const LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *orig) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ ret = { - .a = ThirtyTwoBytes_clone(&orig->a), - .b = CVec_C2Tuple_u32TxOutZZ_clone(&orig->b), - }; - return ret; -} int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(uint32_t ptr) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)ptr; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(ptr & ~1); int8_tArray a_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(a_arr + 4), tuple->a.data, 32); return a_arr; } uint32_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(uint32_t ptr) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)ptr; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *tuple = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(ptr & ~1); LDKCVec_C2Tuple_u32TxOutZZ b_var = tuple->b; uint32_tArray b_arr = init_arr(b_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes"); uint32_t *b_arr_ptr = (uint32_t*)(b_arr + 4); for (size_t z = 0; z < b_var.datalen; z++) { - long arr_conv_25_ref = (long)&b_var.data[z]; + long arr_conv_25_ref = (long)(&b_var.data[z]) | 1; b_arr_ptr[z] = arr_conv_25_ref; } return b_arr; @@ -917,20 +876,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_TxidCVec_C2T uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)arr_elem; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } } return (long)ret; } -static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) { - LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen }; - for (size_t i = 0; i < ret.datalen; i++) { - ret.data[i] = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(&orig->data[i]); - } - return ret; -} uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_SignatureCVec_SignatureZZ_new(int8_tArray a, ptrArray b) { LDKC2Tuple_SignatureCVec_SignatureZZ* ret = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ"); LDKSignature a_ref; @@ -955,13 +907,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_SignatureCVec_Sig return (long)ret; } int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_SignatureCVec_SignatureZZ_get_a(uint32_t ptr) { - LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)ptr; + LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(ptr & ~1); int8_tArray a_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(a_arr + 4), tuple->a.compact_form, 64); return a_arr; } ptrArray __attribute__((visibility("default"))) TS_LDKC2Tuple_SignatureCVec_SignatureZZ_get_b(uint32_t ptr) { - LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)ptr; + LDKC2Tuple_SignatureCVec_SignatureZZ *tuple = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(ptr & ~1); LDKCVec_SignatureZ b_var = tuple->b; ptrArray b_arr = init_arr(b_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes"); int8_tArray *b_arr_ptr = (int8_tArray*)(b_arr + 4); @@ -976,13 +928,13 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_Signature return ((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(uint32_t arg) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = (long)(&(*val->contents.result)) | 1; return res_ref; } void __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(uint32_t arg) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } @@ -990,35 +942,14 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_re return ((LDKCResult_SignatureNoneZ*)arg)->result_ok; } int8_tArray __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_get_ok(uint32_t arg) { - LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)arg; + LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1); CHECK(val->result_ok); int8_tArray res_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(res_arr + 4), (*val->contents.result).compact_form, 64); return res_arr; } void __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_get_err(uint32_t arg) { - LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)arg; - CHECK(!val->result_ok); - return *val->contents.err; -} -jboolean __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_result_ok(uint32_t arg) { - return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok; -} -ptrArray __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_get_ok(uint32_t arg) { - LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)arg; - CHECK(val->result_ok); - LDKCVec_SignatureZ res_var = (*val->contents.result); - ptrArray res_arr = init_arr(res_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes"); - int8_tArray *res_arr_ptr = (int8_tArray*)(res_arr + 4); - for (size_t m = 0; m < res_var.datalen; m++) { - int8_tArray arr_conv_12_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes"); - memcpy((uint8_t*)(arr_conv_12_arr + 4), res_var.data[m].compact_form, 64); - res_arr_ptr[m] = arr_conv_12_arr; - } - return res_arr; -} -void __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_get_err(uint32_t arg) { - LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)arg; + LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } @@ -1028,8 +959,7 @@ typedef struct LDKChannelKeys_JCalls { uint32_t release_commitment_secret_meth; uint32_t key_derivation_params_meth; uint32_t sign_counterparty_commitment_meth; - uint32_t sign_holder_commitment_meth; - uint32_t sign_holder_commitment_htlc_transactions_meth; + uint32_t sign_holder_commitment_and_htlcs_meth; uint32_t sign_justice_transaction_meth; uint32_t sign_counterparty_htlc_transaction_meth; uint32_t sign_closing_transaction_meth; @@ -1044,8 +974,7 @@ static void LDKChannelKeys_JCalls_free(void* this_arg) { js_free(j_calls->release_commitment_secret_meth); js_free(j_calls->key_derivation_params_meth); js_free(j_calls->sign_counterparty_commitment_meth); - js_free(j_calls->sign_holder_commitment_meth); - js_free(j_calls->sign_holder_commitment_htlc_transactions_meth); + js_free(j_calls->sign_holder_commitment_and_htlcs_meth); js_free(j_calls->sign_justice_transaction_meth); js_free(j_calls->sign_counterparty_htlc_transaction_meth); js_free(j_calls->sign_closing_transaction_meth); @@ -1074,15 +1003,14 @@ LDKThirtyTwoBytes release_commitment_secret_jcall(const void* this_arg, uint64_t LDKC2Tuple_u64u64Z key_derivation_params_jcall(const void* this_arg) { LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; LDKC2Tuple_u64u64Z* ret = (LDKC2Tuple_u64u64Z*)js_invoke_function_0(j_calls->key_derivation_params_meth); - LDKC2Tuple_u64u64Z ret_conv = *(LDKC2Tuple_u64u64Z*)ret; + LDKC2Tuple_u64u64Z ret_conv = *(LDKC2Tuple_u64u64Z*)(((uint64_t)ret) & ~1); ret_conv = C2Tuple_u64u64Z_clone((LDKC2Tuple_u64u64Z*)ret); return ret_conv; } LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_jcall(const void* this_arg, const LDKCommitmentTransaction * commitment_tx) { LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; LDKCommitmentTransaction commitment_tx_var = *commitment_tx; - if (commitment_tx->inner != NULL) - commitment_tx_var = CommitmentTransaction_clone(commitment_tx); + commitment_tx_var = CommitmentTransaction_clone(commitment_tx); CHECK((((long)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long commitment_tx_ref = (long)commitment_tx_var.inner; @@ -1090,40 +1018,23 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_j commitment_tx_ref |= 1; } LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)js_invoke_function_1(j_calls->sign_counterparty_commitment_meth, commitment_tx_ref); - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)ret; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)ret); return ret_conv; } -LDKCResult_SignatureNoneZ sign_holder_commitment_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) { +LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) { LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; LDKHolderCommitmentTransaction commitment_tx_var = *commitment_tx; - if (commitment_tx->inner != NULL) - commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx); + commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx); CHECK((((long)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long commitment_tx_ref = (long)commitment_tx_var.inner; if (commitment_tx_var.is_owned) { commitment_tx_ref |= 1; } - LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)js_invoke_function_1(j_calls->sign_holder_commitment_meth, commitment_tx_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; - ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); - return ret_conv; -} -LDKCResult_CVec_SignatureZNoneZ sign_holder_commitment_htlc_transactions_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) { - LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; - LDKHolderCommitmentTransaction commitment_tx_var = *commitment_tx; - if (commitment_tx->inner != NULL) - commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx); - CHECK((((long)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. - CHECK((((long)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long commitment_tx_ref = (long)commitment_tx_var.inner; - if (commitment_tx_var.is_owned) { - commitment_tx_ref |= 1; - } - LDKCResult_CVec_SignatureZNoneZ* ret = (LDKCResult_CVec_SignatureZNoneZ*)js_invoke_function_1(j_calls->sign_holder_commitment_htlc_transactions_meth, commitment_tx_ref); - LDKCResult_CVec_SignatureZNoneZ ret_conv = *(LDKCResult_CVec_SignatureZNoneZ*)ret; - ret_conv = CResult_CVec_SignatureZNoneZ_clone((LDKCResult_CVec_SignatureZNoneZ*)ret); + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)js_invoke_function_1(j_calls->sign_holder_commitment_and_htlcs_meth, commitment_tx_ref); + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)ret); return ret_conv; } LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) { @@ -1135,8 +1046,7 @@ LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, L int8_tArray per_commitment_key_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(per_commitment_key_arr + 4), *per_commitment_key, 32); LDKHTLCOutputInCommitment htlc_var = *htlc; - if (htlc->inner != NULL) - htlc_var = HTLCOutputInCommitment_clone(htlc); + htlc_var = HTLCOutputInCommitment_clone(htlc); CHECK((((long)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long htlc_ref = (long)htlc_var.inner; @@ -1144,7 +1054,7 @@ LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, L htlc_ref |= 1; } LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)js_invoke_function_5(j_calls->sign_justice_transaction_meth, justice_tx_arr, input, amount, per_commitment_key_arr, htlc_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } @@ -1157,8 +1067,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_jcall(const void* t int8_tArray per_commitment_point_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(per_commitment_point_arr + 4), per_commitment_point.compressed_form, 33); LDKHTLCOutputInCommitment htlc_var = *htlc; - if (htlc->inner != NULL) - htlc_var = HTLCOutputInCommitment_clone(htlc); + htlc_var = HTLCOutputInCommitment_clone(htlc); CHECK((((long)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long htlc_ref = (long)htlc_var.inner; @@ -1166,7 +1075,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_jcall(const void* t htlc_ref |= 1; } LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)js_invoke_function_5(j_calls->sign_counterparty_htlc_transaction_meth, htlc_tx_arr, input, amount, per_commitment_point_arr, htlc_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } @@ -1177,15 +1086,14 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_jcall(const void* this_arg, L memcpy((uint8_t*)(closing_tx_arr + 4), closing_tx_var.data, closing_tx_var.datalen); Transaction_free(closing_tx_var); LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)js_invoke_function_1(j_calls->sign_closing_transaction_meth, closing_tx_arr); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } LDKCResult_SignatureNoneZ sign_channel_announcement_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) { LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; LDKUnsignedChannelAnnouncement msg_var = *msg; - if (msg->inner != NULL) - msg_var = UnsignedChannelAnnouncement_clone(msg); + msg_var = UnsignedChannelAnnouncement_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -1193,15 +1101,14 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_jcall(const void* this_arg, msg_ref |= 1; } LDKCResult_SignatureNoneZ* ret = (LDKCResult_SignatureNoneZ*)js_invoke_function_1(j_calls->sign_channel_announcement_meth, msg_ref); - LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)ret; + LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)ret); return ret_conv; } void ready_channel_jcall(void* this_arg, const LDKChannelTransactionParameters * channel_parameters) { LDKChannelKeys_JCalls *j_calls = (LDKChannelKeys_JCalls*) this_arg; LDKChannelTransactionParameters channel_parameters_var = *channel_parameters; - if (channel_parameters->inner != NULL) - channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters); + channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters); CHECK((((long)channel_parameters_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&channel_parameters_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long channel_parameters_ref = (long)channel_parameters_var.inner; @@ -1232,8 +1139,7 @@ static inline LDKChannelKeys LDKChannelKeys_init (/*TODO: JS Object Reference */ LDKChannelPublicKeys pubkeys_conv; pubkeys_conv.inner = (void*)(pubkeys & (~1)); pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0); - if (pubkeys_conv.inner != NULL) - pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv); + pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv); LDKChannelKeys ret = { .this_arg = (void*) calls, @@ -1241,8 +1147,7 @@ static inline LDKChannelKeys LDKChannelKeys_init (/*TODO: JS Object Reference */ .release_commitment_secret = release_commitment_secret_jcall, .key_derivation_params = key_derivation_params_jcall, .sign_counterparty_commitment = sign_counterparty_commitment_jcall, - .sign_holder_commitment = sign_holder_commitment_jcall, - .sign_holder_commitment_htlc_transactions = sign_holder_commitment_htlc_transactions_jcall, + .sign_holder_commitment_and_htlcs = sign_holder_commitment_and_htlcs_jcall, .sign_justice_transaction = sign_justice_transaction_jcall, .sign_counterparty_htlc_transaction = sign_counterparty_htlc_transaction_jcall, .sign_closing_transaction = sign_closing_transaction_jcall, @@ -1292,23 +1197,13 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelKeys_sign_counterpart return (long)ret_conv; } -uint32_t __attribute__((visibility("default"))) TS_ChannelKeys_sign_holder_commitment(uint32_t this_arg, uint32_t commitment_tx) { - LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; - LDKHolderCommitmentTransaction commitment_tx_conv; - commitment_tx_conv.inner = (void*)(commitment_tx & (~1)); - commitment_tx_conv.is_owned = false; - LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ"); - *ret_conv = (this_arg_conv->sign_holder_commitment)(this_arg_conv->this_arg, &commitment_tx_conv); - return (long)ret_conv; -} - -uint32_t __attribute__((visibility("default"))) TS_ChannelKeys_sign_holder_commitment_htlc_transactions(uint32_t this_arg, uint32_t commitment_tx) { +uint32_t __attribute__((visibility("default"))) TS_ChannelKeys_sign_holder_commitment_and_htlcs(uint32_t this_arg, uint32_t commitment_tx) { LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; LDKHolderCommitmentTransaction commitment_tx_conv; commitment_tx_conv.inner = (void*)(commitment_tx & (~1)); commitment_tx_conv.is_owned = false; - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = (this_arg_conv->sign_holder_commitment_htlc_transactions)(this_arg_conv->this_arg, &commitment_tx_conv); + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ"); + *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv); return (long)ret_conv; } @@ -1414,18 +1309,18 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_BlockHashChannelM LDKChannelMonitor b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + b_conv = ChannelMonitor_clone(&b_conv); ret->b = b_conv; return (long)ret; } int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_BlockHashChannelMonitorZ_get_a(uint32_t ptr) { - LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)ptr; + LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)(ptr & ~1); int8_tArray a_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(a_arr + 4), tuple->a.data, 32); return a_arr; } uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_BlockHashChannelMonitorZ_get_b(uint32_t ptr) { - LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)ptr; + LDKC2Tuple_BlockHashChannelMonitorZ *tuple = (LDKC2Tuple_BlockHashChannelMonitorZ*)(ptr & ~1); LDKChannelMonitor b_var = tuple->b; CHECK((((long)b_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&b_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -1436,13 +1331,13 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHash return ((LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = (long)(&(*val->contents.result)) | 1; return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1454,13 +1349,13 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDe return ((LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg; + LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = ((long)&(*val->contents.result)) | 1; return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg; + LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1472,14 +1367,14 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_ChanKeySignerDeco return ((LDKCResult_ChanKeySignerDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChanKeySignerDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)arg; + LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKChannelKeys* ret = MALLOC(sizeof(LDKChannelKeys), "LDKChannelKeys"); - *ret = (*val->contents.result); + *ret = ChannelKeys_clone(&(*val->contents.result)); return (long)ret; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChanKeySignerDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)arg; + LDKCResult_ChanKeySignerDecodeErrorZ *val = (LDKCResult_ChanKeySignerDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1491,7 +1386,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_InMemoryChannelKe return ((LDKCResult_InMemoryChannelKeysDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_InMemoryChannelKeysDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)arg; + LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKInMemoryChannelKeys res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1500,7 +1395,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_InMemoryChannelKe return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_InMemoryChannelKeysDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)arg; + LDKCResult_InMemoryChannelKeysDecodeErrorZ *val = (LDKCResult_InMemoryChannelKeysDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1512,30 +1407,17 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ return ((LDKCResult_TxOutAccessErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ_get_ok(uint32_t arg) { - LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)arg; + LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = ((long)&(*val->contents.result)) | 1; return (long)res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ_get_err(uint32_t arg) { - LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)arg; + LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1); CHECK(!val->result_ok); uint32_t err_conv = LDKAccessError_to_js((*val->contents.err)); return err_conv; } -static inline LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_clone(const LDKCResult_TxOutAccessErrorZ *orig) { - LDKCResult_TxOutAccessErrorZ res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - LDKTxOut* contents = MALLOC(sizeof(LDKTxOut), "LDKTxOut result OK clone"); - *contents = TxOut_clone(orig->contents.result); - res.contents.result = contents; - } else { - LDKAccessError* contents = MALLOC(sizeof(LDKAccessError), "LDKAccessError result Err clone"); - *contents = AccessError_clone(orig->contents.err); - res.contents.err = contents; - } - return res; -} uint32_t __attribute__((visibility("default"))) TS_LDKAPIError_ref_from_ptr(uint32_t ptr) { LDKAPIError *obj = (LDKAPIError*)ptr; switch(obj->tag) { @@ -1572,27 +1454,16 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_res return ((LDKCResult_NoneAPIErrorZ*)arg)->result_ok; } void __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_get_ok(uint32_t arg) { - LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)arg; + LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_get_err(uint32_t arg) { - LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)arg; + LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1); CHECK(!val->result_ok); - long err_ref = (long)&(*val->contents.err); + long err_ref = ((long)&(*val->contents.err)) | 1; return err_ref; } -static inline LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_clone(const LDKCResult_NoneAPIErrorZ *orig) { - LDKCResult_NoneAPIErrorZ res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - res.contents.result = NULL; - } else { - LDKAPIError* contents = MALLOC(sizeof(LDKAPIError), "LDKAPIError result Err clone"); - *contents = APIError_clone(orig->contents.err); - res.contents.err = contents; - } - return res; -} uint32_t __attribute__((visibility("default"))) TS_LDKCVec_ChannelDetailsZ_new(uint32_tArray elems) { LDKCVec_ChannelDetailsZ *ret = MALLOC(sizeof(LDKCVec_ChannelDetailsZ), "LDKCVec_ChannelDetailsZ"); ret->datalen = *((uint32_t*)elems); @@ -1606,8 +1477,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_ChannelDetailsZ_new( LDKChannelDetails arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = ChannelDetails_clone(&arr_elem_conv); + arr_elem_conv = ChannelDetails_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -1624,12 +1494,12 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFa return ((LDKCResult_NonePaymentSendFailureZ*)arg)->result_ok; } void __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFailureZ_get_ok(uint32_t arg) { - LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)arg; + LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFailureZ_get_err(uint32_t arg) { - LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)arg; + LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1); CHECK(!val->result_ok); LDKPaymentSendFailure err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -1673,7 +1543,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_NetAddressZ_new(uint uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKNetAddress arr_elem_conv = *(LDKNetAddress*)arr_elem; + LDKNetAddress arr_elem_conv = *(LDKNetAddress*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } @@ -1700,12 +1570,19 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_ChannelMonitorZ_new( LDKChannelMonitor arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - // Warning: we may need a move here but can't clone! + arr_elem_conv = ChannelMonitor_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } return (long)ret; } +static inline LDKCVec_ChannelMonitorZ CVec_ChannelMonitorZ_clone(const LDKCVec_ChannelMonitorZ *orig) { + LDKCVec_ChannelMonitorZ ret = { .data = MALLOC(sizeof(LDKChannelMonitor) * orig->datalen, "LDKCVec_ChannelMonitorZ clone bytes"), .datalen = orig->datalen }; + for (size_t i = 0; i < ret.datalen; i++) { + ret.data[i] = ChannelMonitor_clone(&orig->data[i]); + } + return ret; +} typedef struct LDKWatch_JCalls { atomic_size_t refcnt; uint32_t watch_channel_meth; @@ -1738,7 +1615,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_jcall(const void* this_arg monitor_ref |= 1; } LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)js_invoke_function_2(j_calls->watch_channel_meth, funding_txo_ref, monitor_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -1759,7 +1636,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_jcall(const void* this_ar update_ref |= 1; } LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)js_invoke_function_2(j_calls->update_channel_meth, funding_txo_ref, update_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -1778,8 +1655,7 @@ LDKCVec_MonitorEventZ release_pending_monitor_events_jcall(const void* this_arg) LDKMonitorEvent arr_conv_14_conv; arr_conv_14_conv.inner = (void*)(arr_conv_14 & (~1)); arr_conv_14_conv.is_owned = (arr_conv_14 & 1) || (arr_conv_14 == 0); - if (arr_conv_14_conv.inner != NULL) - arr_conv_14_conv = MonitorEvent_clone(&arr_conv_14_conv); + arr_conv_14_conv = MonitorEvent_clone(&arr_conv_14_conv); arg_constr.data[o] = arr_conv_14_conv; } return arg_constr; @@ -1813,12 +1689,11 @@ uint32_t __attribute__((visibility("default"))) TS_Watch_watch_channel(uint32_t LDKOutPoint funding_txo_conv; funding_txo_conv.inner = (void*)(funding_txo & (~1)); funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0); - if (funding_txo_conv.inner != NULL) - funding_txo_conv = OutPoint_clone(&funding_txo_conv); + funding_txo_conv = OutPoint_clone(&funding_txo_conv); LDKChannelMonitor monitor_conv; monitor_conv.inner = (void*)(monitor & (~1)); monitor_conv.is_owned = (monitor & 1) || (monitor == 0); - // Warning: we may need a move here but can't clone! + monitor_conv = ChannelMonitor_clone(&monitor_conv); LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ"); *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv); return (long)ret_conv; @@ -1829,13 +1704,11 @@ uint32_t __attribute__((visibility("default"))) TS_Watch_update_channel(uint32_ LDKOutPoint funding_txo_conv; funding_txo_conv.inner = (void*)(funding_txo & (~1)); funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0); - if (funding_txo_conv.inner != NULL) - funding_txo_conv = OutPoint_clone(&funding_txo_conv); + funding_txo_conv = OutPoint_clone(&funding_txo_conv); LDKChannelMonitorUpdate update_conv; update_conv.inner = (void*)(update & (~1)); update_conv.is_owned = (update & 1) || (update == 0); - if (update_conv.inner != NULL) - update_conv = ChannelMonitorUpdate_clone(&update_conv); + update_conv = ChannelMonitorUpdate_clone(&update_conv); LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ"); *ret_conv = (this_arg_conv->update_channel)(this_arg_conv->this_arg, funding_txo_conv, update_conv); return (long)ret_conv; @@ -1960,7 +1833,7 @@ LDKPublicKey get_shutdown_pubkey_jcall(const void* this_arg) { LDKChannelKeys get_channel_keys_jcall(const void* this_arg, bool inbound, uint64_t channel_value_satoshis) { LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg; LDKChannelKeys* ret = (LDKChannelKeys*)js_invoke_function_2(j_calls->get_channel_keys_meth, inbound, channel_value_satoshis); - LDKChannelKeys ret_conv = *(LDKChannelKeys*)ret; + LDKChannelKeys ret_conv = *(LDKChannelKeys*)(((uint64_t)ret) & ~1); ret_conv = ChannelKeys_clone(ret); return ret_conv; } @@ -1978,8 +1851,8 @@ LDKCResult_ChanKeySignerDecodeErrorZ read_chan_signer_jcall(const void* this_arg int8_tArray reader_arr = init_arr(reader_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(reader_arr + 4), reader_var.data, reader_var.datalen); LDKCResult_ChanKeySignerDecodeErrorZ* ret = (LDKCResult_ChanKeySignerDecodeErrorZ*)js_invoke_function_1(j_calls->read_chan_signer_meth, reader_arr); - LDKCResult_ChanKeySignerDecodeErrorZ ret_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_ChanKeySignerDecodeErrorZ ret_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_ChanKeySignerDecodeErrorZ_clone((LDKCResult_ChanKeySignerDecodeErrorZ*)ret); return ret_conv; } static void* LDKKeysInterface_JCalls_clone(const void* this_arg) { @@ -2149,18 +2022,18 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_BlockHashChannelM LDKChannelManager b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelManager ret->b = b_conv; return (long)ret; } int8_tArray __attribute__((visibility("default"))) TS_LDKC2Tuple_BlockHashChannelManagerZ_get_a(uint32_t ptr) { - LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)ptr; + LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)(ptr & ~1); int8_tArray a_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(a_arr + 4), tuple->a.data, 32); return a_arr; } uint32_t __attribute__((visibility("default"))) TS_LDKC2Tuple_BlockHashChannelManagerZ_get_b(uint32_t ptr) { - LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)ptr; + LDKC2Tuple_BlockHashChannelManagerZ *tuple = (LDKC2Tuple_BlockHashChannelManagerZ*)(ptr & ~1); LDKChannelManager b_var = tuple->b; CHECK((((long)b_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&b_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -2171,13 +2044,13 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHash return ((LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = (long)(&(*val->contents.result)) | 1; return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg; + LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2189,34 +2062,21 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NetAddressu8Z_res return ((LDKCResult_NetAddressu8Z*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NetAddressu8Z_get_ok(uint32_t arg) { - LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)arg; + LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)(arg & ~1); CHECK(val->result_ok); - long res_ref = (long)&(*val->contents.result); + long res_ref = ((long)&(*val->contents.result)) | 1; return res_ref; } int8_t __attribute__((visibility("default"))) TS_LDKCResult_NetAddressu8Z_get_err(uint32_t arg) { - LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)arg; + LDKCResult_NetAddressu8Z *val = (LDKCResult_NetAddressu8Z*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } -static inline LDKCResult_NetAddressu8Z CResult_NetAddressu8Z_clone(const LDKCResult_NetAddressu8Z *orig) { - LDKCResult_NetAddressu8Z res = { .result_ok = orig->result_ok }; - if (orig->result_ok) { - LDKNetAddress* contents = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress result OK clone"); - *contents = NetAddress_clone(orig->contents.result); - res.contents.result = contents; - } else { - int8_t* contents = MALLOC(sizeof(int8_t), "int8_t result Err clone"); - *contents = *orig->contents.err; - res.contents.err = contents; - } - return res; -} jboolean __attribute__((visibility("default"))) TS_LDKCResult_CResult_NetAddressu8ZDecodeErrorZ_result_ok(uint32_t arg) { return ((LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_CResult_NetAddressu8ZDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)arg; + LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKCResult_NetAddressu8Z* res_conv = MALLOC(sizeof(LDKCResult_NetAddressu8Z), "LDKCResult_NetAddressu8Z"); *res_conv = (*val->contents.result); @@ -2224,7 +2084,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_CResult_NetAddres return (long)res_conv; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_CResult_NetAddressu8ZDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)arg; + LDKCResult_CResult_NetAddressu8ZDecodeErrorZ *val = (LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2264,8 +2124,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_UpdateAddHTLCZ_new(u LDKUpdateAddHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2291,8 +2150,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_UpdateFulfillHTLCZ_n LDKUpdateFulfillHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2318,8 +2176,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_UpdateFailHTLCZ_new( LDKUpdateFailHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2345,8 +2202,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_UpdateFailMalformedH LDKUpdateFailMalformedHTLC arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv); + arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2363,12 +2219,12 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErro return ((LDKCResult_boolLightningErrorZ*)arg)->result_ok; } jboolean __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErrorZ_get_ok(uint32_t arg) { - LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)arg; + LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErrorZ_get_err(uint32_t arg) { - LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)arg; + LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2381,33 +2237,22 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC3Tuple_ChannelAnnounceme LDKChannelAnnouncement a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = ChannelAnnouncement_clone(&a_conv); + a_conv = ChannelAnnouncement_clone(&a_conv); ret->a = a_conv; LDKChannelUpdate b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - if (b_conv.inner != NULL) - b_conv = ChannelUpdate_clone(&b_conv); + b_conv = ChannelUpdate_clone(&b_conv); ret->b = b_conv; LDKChannelUpdate c_conv; c_conv.inner = (void*)(c & (~1)); c_conv.is_owned = (c & 1) || (c == 0); - if (c_conv.inner != NULL) - c_conv = ChannelUpdate_clone(&c_conv); + c_conv = ChannelUpdate_clone(&c_conv); ret->c = c_conv; return (long)ret; } -static inline LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(const LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *orig) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret = { - .a = ChannelAnnouncement_clone(&orig->a), - .b = ChannelUpdate_clone(&orig->b), - .c = ChannelUpdate_clone(&orig->c), - }; - return ret; -} uint32_t __attribute__((visibility("default"))) TS_LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(uint32_t ptr) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)ptr; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ptr & ~1); LDKChannelAnnouncement a_var = tuple->a; CHECK((((long)a_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&a_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -2415,7 +2260,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC3Tuple_ChannelAnnounceme return a_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_b(uint32_t ptr) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)ptr; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ptr & ~1); LDKChannelUpdate b_var = tuple->b; CHECK((((long)b_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&b_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -2423,7 +2268,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKC3Tuple_ChannelAnnounceme return b_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(uint32_t ptr) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)ptr; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *tuple = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ptr & ~1); LDKChannelUpdate c_var = tuple->c; CHECK((((long)c_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&c_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -2440,20 +2285,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_C3Tuple_ChannelAnnou uint32_t *java_elems = (uint32_t*)(elems + 4); for (size_t i = 0; i < ret->datalen; i++) { uint32_t arr_elem = java_elems[i]; - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)arr_elem; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_elem) & ~1); FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } } return (long)ret; } -static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_clone(const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *orig) { - LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * orig->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ clone bytes"), .datalen = orig->datalen }; - for (size_t i = 0; i < ret.datalen; i++) { - ret.data[i] = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(&orig->data[i]); - } - return ret; -} uint32_t __attribute__((visibility("default"))) TS_LDKCVec_NodeAnnouncementZ_new(uint32_tArray elems) { LDKCVec_NodeAnnouncementZ *ret = MALLOC(sizeof(LDKCVec_NodeAnnouncementZ), "LDKCVec_NodeAnnouncementZ"); ret->datalen = *((uint32_t*)elems); @@ -2467,8 +2305,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_NodeAnnouncementZ_ne LDKNodeAnnouncement arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv); + arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2485,12 +2322,12 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErro return ((LDKCResult_NoneLightningErrorZ*)arg)->result_ok; } void __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErrorZ_get_ok(uint32_t arg) { - LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)arg; + LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErrorZ_get_err(uint32_t arg) { - LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)arg; + LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2502,7 +2339,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablis return ((LDKCResult_ChannelReestablishDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)arg; + LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKChannelReestablish res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2511,7 +2348,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablis return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablishDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)arg; + LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2523,7 +2360,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_ return ((LDKCResult_InitDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)arg; + LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKInit res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2532,7 +2369,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_ return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)arg; + LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2544,7 +2381,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_ return ((LDKCResult_PingDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)arg; + LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKPing res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2553,7 +2390,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_ return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)arg; + LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2565,7 +2402,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_ return ((LDKCResult_PongDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)arg; + LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKPong res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2574,7 +2411,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_ return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)arg; + LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2586,7 +2423,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAn return ((LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKUnsignedChannelAnnouncement res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2595,7 +2432,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAn return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2607,7 +2444,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUp return ((LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKUnsignedChannelUpdate res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2616,7 +2453,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUp return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg; + LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2628,7 +2465,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecod return ((LDKCResult_ErrorMessageDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)arg; + LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKErrorMessage res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2637,7 +2474,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecod return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)arg; + LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2649,7 +2486,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnou return ((LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKUnsignedNodeAnnouncement res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2658,7 +2495,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnou return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg; + LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2670,7 +2507,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannel return ((LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg; + LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKQueryShortChannelIds res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2679,7 +2516,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannel return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg; + LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2691,7 +2528,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannel return ((LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg; + LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKReplyShortChannelIdsEnd res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2700,7 +2537,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannel return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg; + LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2712,7 +2549,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRange return ((LDKCResult_QueryChannelRangeDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)arg; + LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKQueryChannelRange res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2721,7 +2558,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRange return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRangeDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)arg; + LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2733,7 +2570,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRange return ((LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg; + LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKReplyChannelRange res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2742,7 +2579,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRange return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRangeDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg; + LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2754,7 +2591,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFi return ((LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg; + LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKGossipTimestampFilter res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2763,7 +2600,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFi return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFilterDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg; + LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2775,7 +2612,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandl return ((LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg)->result_ok; } int8_tArray __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok(uint32_t arg) { - LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg; + LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKCVec_u8Z res_var = (*val->contents.result); int8_tArray res_arr = init_arr(res_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes"); @@ -2783,7 +2620,7 @@ int8_tArray __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHa return res_arr; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandleErrorZ_get_err(uint32_t arg) { - LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg; + LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2795,12 +2632,12 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErr return ((LDKCResult_NonePeerHandleErrorZ*)arg)->result_ok; } void __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErrorZ_get_ok(uint32_t arg) { - LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)arg; + LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErrorZ_get_err(uint32_t arg) { - LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)arg; + LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2812,12 +2649,12 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErr return ((LDKCResult_boolPeerHandleErrorZ*)arg)->result_ok; } jboolean __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErrorZ_get_ok(uint32_t arg) { - LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)arg; + LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1); CHECK(val->result_ok); return *val->contents.result; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErrorZ_get_err(uint32_t arg) { - LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)arg; + LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2829,14 +2666,14 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_SecretKeySecpErro return ((LDKCResult_SecretKeySecpErrorZ*)arg)->result_ok; } int8_tArray __attribute__((visibility("default"))) TS_LDKCResult_SecretKeySecpErrorZ_get_ok(uint32_t arg) { - LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)arg; + LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)(arg & ~1); CHECK(val->result_ok); int8_tArray res_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(res_arr + 4), (*val->contents.result).bytes, 32); return res_arr; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_SecretKeySecpErrorZ_get_err(uint32_t arg) { - LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)arg; + LDKCResult_SecretKeySecpErrorZ *val = (LDKCResult_SecretKeySecpErrorZ*)(arg & ~1); CHECK(!val->result_ok); uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err)); return err_conv; @@ -2845,14 +2682,14 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_PublicKeySecpErro return ((LDKCResult_PublicKeySecpErrorZ*)arg)->result_ok; } int8_tArray __attribute__((visibility("default"))) TS_LDKCResult_PublicKeySecpErrorZ_get_ok(uint32_t arg) { - LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)arg; + LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)(arg & ~1); CHECK(val->result_ok); int8_tArray res_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(res_arr + 4), (*val->contents.result).compressed_form, 33); return res_arr; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_PublicKeySecpErrorZ_get_err(uint32_t arg) { - LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)arg; + LDKCResult_PublicKeySecpErrorZ *val = (LDKCResult_PublicKeySecpErrorZ*)(arg & ~1); CHECK(!val->result_ok); uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err)); return err_conv; @@ -2861,7 +2698,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysSec return ((LDKCResult_TxCreationKeysSecpErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysSecpErrorZ_get_ok(uint32_t arg) { - LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)arg; + LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKTxCreationKeys res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2870,7 +2707,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysSec return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysSecpErrorZ_get_err(uint32_t arg) { - LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)arg; + LDKCResult_TxCreationKeysSecpErrorZ *val = (LDKCResult_TxCreationKeysSecpErrorZ*)(arg & ~1); CHECK(!val->result_ok); uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err)); return err_conv; @@ -2879,7 +2716,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitment return ((LDKCResult_TrustedCommitmentTransactionNoneZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(uint32_t arg) { - LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)arg; + LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1); CHECK(val->result_ok); LDKTrustedCommitmentTransaction res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2888,7 +2725,28 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitment return res_ref; } void __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTransactionNoneZ_get_err(uint32_t arg) { - LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)arg; + LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1); + CHECK(!val->result_ok); + return *val->contents.err; +} +jboolean __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_result_ok(uint32_t arg) { + return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok; +} +ptrArray __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_get_ok(uint32_t arg) { + LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1); + CHECK(val->result_ok); + LDKCVec_SignatureZ res_var = (*val->contents.result); + ptrArray res_arr = init_arr(res_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes"); + int8_tArray *res_arr_ptr = (int8_tArray*)(res_arr + 4); + for (size_t m = 0; m < res_var.datalen; m++) { + int8_tArray arr_conv_12_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes"); + memcpy((uint8_t*)(arr_conv_12_arr + 4), res_var.data[m].compact_form, 64); + res_arr_ptr[m] = arr_conv_12_arr; + } + return res_arr; +} +void __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_get_err(uint32_t arg) { + LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1); CHECK(!val->result_ok); return *val->contents.err; } @@ -2905,8 +2763,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_RouteHopZ_new(uint32 LDKRouteHop arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = RouteHop_clone(&arr_elem_conv); + arr_elem_conv = RouteHop_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2930,7 +2787,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ return ((LDKCResult_RouteDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)arg; + LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKRoute res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2939,7 +2796,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)arg; + LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2960,8 +2817,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCVec_RouteHintZ_new(uint3 LDKRouteHint arr_elem_conv; arr_elem_conv.inner = (void*)(arr_elem & (~1)); arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0); - if (arr_elem_conv.inner != NULL) - arr_elem_conv = RouteHint_clone(&arr_elem_conv); + arr_elem_conv = RouteHint_clone(&arr_elem_conv); ret->data[i] = arr_elem_conv; } } @@ -2978,7 +2834,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErr return ((LDKCResult_RouteLightningErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErrorZ_get_ok(uint32_t arg) { - LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)arg; + LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKRoute res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2987,7 +2843,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErr return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErrorZ_get_err(uint32_t arg) { - LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)arg; + LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2999,7 +2855,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecode return ((LDKCResult_RoutingFeesDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)arg; + LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKRoutingFees res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3008,7 +2864,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecode return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)arg; + LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3020,7 +2876,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementI return ((LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg; + LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKNodeAnnouncementInfo res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3029,7 +2885,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementI return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg; + LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3041,7 +2897,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErr return ((LDKCResult_NodeInfoDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)arg; + LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKNodeInfo res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3050,7 +2906,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErr return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)arg; + LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3062,7 +2918,7 @@ jboolean __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecod return ((LDKCResult_NetworkGraphDecodeErrorZ*)arg)->result_ok; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecodeErrorZ_get_ok(uint32_t arg) { - LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)arg; + LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1); CHECK(val->result_ok); LDKNetworkGraph res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3071,7 +2927,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecod return res_ref; } uint32_t __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecodeErrorZ_get_err(uint32_t arg) { - LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)arg; + LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1); CHECK(!val->result_ok); LDKDecodeError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -3102,7 +2958,7 @@ LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_jcall(const void* thi uint32_t* arg_vals = (uint32_t*)(arg + 4); for (size_t s = 0; s < arg_constr.datalen; s++) { uint32_t arr_conv_18 = arg_vals[s]; - LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)arr_conv_18; + LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)(((uint64_t)arr_conv_18) & ~1); FREE((void*)arr_conv_18); arg_constr.data[s] = arr_conv_18_conv; } @@ -3168,7 +3024,7 @@ LDKCVec_EventZ get_and_clear_pending_events_jcall(const void* this_arg) { uint32_t* arg_vals = (uint32_t*)(arg + 4); for (size_t h = 0; h < arg_constr.datalen; h++) { uint32_t arr_conv_7 = arg_vals[h]; - LDKEvent arr_conv_7_conv = *(LDKEvent*)arr_conv_7; + LDKEvent arr_conv_7_conv = *(LDKEvent*)(((uint64_t)arr_conv_7) & ~1); FREE((void*)arr_conv_7); arg_constr.data[h] = arr_conv_7_conv; } @@ -3227,7 +3083,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_jcall(const void* this_arg, const uint8_t int8_tArray genesis_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(genesis_hash_arr + 4), *genesis_hash, 32); LDKCResult_TxOutAccessErrorZ* ret = (LDKCResult_TxOutAccessErrorZ*)js_invoke_function_2(j_calls->get_utxo_meth, genesis_hash_arr, short_channel_id); - LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)ret; + LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_TxOutAccessErrorZ_clone((LDKCResult_TxOutAccessErrorZ*)ret); return ret_conv; } @@ -3289,8 +3145,7 @@ void register_tx_jcall(const void* this_arg, const uint8_t (* txid)[32], LDKu8sl void register_output_jcall(const void* this_arg, const LDKOutPoint * outpoint, LDKu8slice script_pubkey) { LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) this_arg; LDKOutPoint outpoint_var = *outpoint; - if (outpoint->inner != NULL) - outpoint_var = OutPoint_clone(outpoint); + outpoint_var = OutPoint_clone(outpoint); CHECK((((long)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long outpoint_ref = (long)outpoint_var.inner; @@ -3371,7 +3226,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_jcall(const void* th id_ref |= 1; } LDKChannelMonitor data_var = *data; - // Warning: we may need a move here but can't clone! + data_var = ChannelMonitor_clone(data); CHECK((((long)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long data_ref = (long)data_var.inner; @@ -3379,7 +3234,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_jcall(const void* th data_ref |= 1; } LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)js_invoke_function_2(j_calls->persist_new_channel_meth, id_ref, data_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -3393,8 +3248,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_jcall(const voi id_ref |= 1; } LDKChannelMonitorUpdate update_var = *update; - if (update->inner != NULL) - update_var = ChannelMonitorUpdate_clone(update); + update_var = ChannelMonitorUpdate_clone(update); CHECK((((long)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long update_ref = (long)update_var.inner; @@ -3402,7 +3256,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_jcall(const voi update_ref |= 1; } LDKChannelMonitor data_var = *data; - // Warning: we may need a move here but can't clone! + data_var = ChannelMonitor_clone(data); CHECK((((long)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long data_ref = (long)data_var.inner; @@ -3410,7 +3264,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_jcall(const voi data_ref |= 1; } LDKCResult_NoneChannelMonitorUpdateErrZ* ret = (LDKCResult_NoneChannelMonitorUpdateErrZ*)js_invoke_function_3(j_calls->update_persisted_channel_meth, id_ref, update_ref, data_ref); - LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)ret; + LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1); ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)ret); return ret_conv; } @@ -3442,8 +3296,7 @@ uint32_t __attribute__((visibility("default"))) TS_Persist_persist_new_channel( LDKOutPoint id_conv; id_conv.inner = (void*)(id & (~1)); id_conv.is_owned = (id & 1) || (id == 0); - if (id_conv.inner != NULL) - id_conv = OutPoint_clone(&id_conv); + id_conv = OutPoint_clone(&id_conv); LDKChannelMonitor data_conv; data_conv.inner = (void*)(data & (~1)); data_conv.is_owned = false; @@ -3457,8 +3310,7 @@ uint32_t __attribute__((visibility("default"))) TS_Persist_update_persisted_cha LDKOutPoint id_conv; id_conv.inner = (void*)(id & (~1)); id_conv.is_owned = (id & 1) || (id == 0); - if (id_conv.inner != NULL) - id_conv = OutPoint_clone(&id_conv); + id_conv = OutPoint_clone(&id_conv); LDKChannelMonitorUpdate update_conv; update_conv.inner = (void*)(update & (~1)); update_conv.is_owned = false; @@ -3530,8 +3382,7 @@ void handle_open_channel_jcall(const void* this_arg, LDKPublicKey their_node_id, their_features_ref |= 1; } LDKOpenChannel msg_var = *msg; - if (msg->inner != NULL) - msg_var = OpenChannel_clone(msg); + msg_var = OpenChannel_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3552,8 +3403,7 @@ void handle_accept_channel_jcall(const void* this_arg, LDKPublicKey their_node_i their_features_ref |= 1; } LDKAcceptChannel msg_var = *msg; - if (msg->inner != NULL) - msg_var = AcceptChannel_clone(msg); + msg_var = AcceptChannel_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3567,8 +3417,7 @@ void handle_funding_created_jcall(const void* this_arg, LDKPublicKey their_node_ int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKFundingCreated msg_var = *msg; - if (msg->inner != NULL) - msg_var = FundingCreated_clone(msg); + msg_var = FundingCreated_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3582,8 +3431,7 @@ void handle_funding_signed_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKFundingSigned msg_var = *msg; - if (msg->inner != NULL) - msg_var = FundingSigned_clone(msg); + msg_var = FundingSigned_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3597,8 +3445,7 @@ void handle_funding_locked_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKFundingLocked msg_var = *msg; - if (msg->inner != NULL) - msg_var = FundingLocked_clone(msg); + msg_var = FundingLocked_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3612,8 +3459,7 @@ void handle_shutdown_jcall(const void* this_arg, LDKPublicKey their_node_id, con int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKShutdown msg_var = *msg; - if (msg->inner != NULL) - msg_var = Shutdown_clone(msg); + msg_var = Shutdown_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3627,8 +3473,7 @@ void handle_closing_signed_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKClosingSigned msg_var = *msg; - if (msg->inner != NULL) - msg_var = ClosingSigned_clone(msg); + msg_var = ClosingSigned_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3642,8 +3487,7 @@ void handle_update_add_htlc_jcall(const void* this_arg, LDKPublicKey their_node_ int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKUpdateAddHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateAddHTLC_clone(msg); + msg_var = UpdateAddHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3657,8 +3501,7 @@ void handle_update_fulfill_htlc_jcall(const void* this_arg, LDKPublicKey their_n int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKUpdateFulfillHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFulfillHTLC_clone(msg); + msg_var = UpdateFulfillHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3672,8 +3515,7 @@ void handle_update_fail_htlc_jcall(const void* this_arg, LDKPublicKey their_node int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKUpdateFailHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFailHTLC_clone(msg); + msg_var = UpdateFailHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3687,8 +3529,7 @@ void handle_update_fail_malformed_htlc_jcall(const void* this_arg, LDKPublicKey int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKUpdateFailMalformedHTLC msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFailMalformedHTLC_clone(msg); + msg_var = UpdateFailMalformedHTLC_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3702,8 +3543,7 @@ void handle_commitment_signed_jcall(const void* this_arg, LDKPublicKey their_nod int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKCommitmentSigned msg_var = *msg; - if (msg->inner != NULL) - msg_var = CommitmentSigned_clone(msg); + msg_var = CommitmentSigned_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3717,8 +3557,7 @@ void handle_revoke_and_ack_jcall(const void* this_arg, LDKPublicKey their_node_i int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKRevokeAndACK msg_var = *msg; - if (msg->inner != NULL) - msg_var = RevokeAndACK_clone(msg); + msg_var = RevokeAndACK_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3732,8 +3571,7 @@ void handle_update_fee_jcall(const void* this_arg, LDKPublicKey their_node_id, c int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKUpdateFee msg_var = *msg; - if (msg->inner != NULL) - msg_var = UpdateFee_clone(msg); + msg_var = UpdateFee_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3747,8 +3585,7 @@ void handle_announcement_signatures_jcall(const void* this_arg, LDKPublicKey the int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKAnnouncementSignatures msg_var = *msg; - if (msg->inner != NULL) - msg_var = AnnouncementSignatures_clone(msg); + msg_var = AnnouncementSignatures_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3768,8 +3605,7 @@ void peer_connected_jcall(const void* this_arg, LDKPublicKey their_node_id, cons int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKInit msg_var = *msg; - if (msg->inner != NULL) - msg_var = Init_clone(msg); + msg_var = Init_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3783,8 +3619,7 @@ void handle_channel_reestablish_jcall(const void* this_arg, LDKPublicKey their_n int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKChannelReestablish msg_var = *msg; - if (msg->inner != NULL) - msg_var = ChannelReestablish_clone(msg); + msg_var = ChannelReestablish_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3798,8 +3633,7 @@ void handle_error_jcall(const void* this_arg, LDKPublicKey their_node_id, const int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKErrorMessage msg_var = *msg; - if (msg->inner != NULL) - msg_var = ErrorMessage_clone(msg); + msg_var = ErrorMessage_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -3859,7 +3693,7 @@ void __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_ope LDKInitFeatures their_features_conv; their_features_conv.inner = (void*)(their_features & (~1)); their_features_conv.is_owned = (their_features & 1) || (their_features == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKInitFeatures LDKOpenChannel msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = false; @@ -3874,7 +3708,7 @@ void __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_acc LDKInitFeatures their_features_conv; their_features_conv.inner = (void*)(their_features & (~1)); their_features_conv.is_owned = (their_features & 1) || (their_features == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKInitFeatures LDKAcceptChannel msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = false; @@ -4100,8 +3934,7 @@ static void LDKRoutingMessageHandler_JCalls_free(void* this_arg) { LDKCResult_boolLightningErrorZ handle_node_announcement_jcall(const void* this_arg, const LDKNodeAnnouncement * msg) { LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg; LDKNodeAnnouncement msg_var = *msg; - if (msg->inner != NULL) - msg_var = NodeAnnouncement_clone(msg); + msg_var = NodeAnnouncement_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4109,15 +3942,14 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_jcall(const void* this_a msg_ref |= 1; } LDKCResult_boolLightningErrorZ* ret = (LDKCResult_boolLightningErrorZ*)js_invoke_function_1(j_calls->handle_node_announcement_meth, msg_ref); - LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)ret); return ret_conv; } LDKCResult_boolLightningErrorZ handle_channel_announcement_jcall(const void* this_arg, const LDKChannelAnnouncement * msg) { LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg; LDKChannelAnnouncement msg_var = *msg; - if (msg->inner != NULL) - msg_var = ChannelAnnouncement_clone(msg); + msg_var = ChannelAnnouncement_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4125,15 +3957,14 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_jcall(const void* thi msg_ref |= 1; } LDKCResult_boolLightningErrorZ* ret = (LDKCResult_boolLightningErrorZ*)js_invoke_function_1(j_calls->handle_channel_announcement_meth, msg_ref); - LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)ret); return ret_conv; } LDKCResult_boolLightningErrorZ handle_channel_update_jcall(const void* this_arg, const LDKChannelUpdate * msg) { LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg; LDKChannelUpdate msg_var = *msg; - if (msg->inner != NULL) - msg_var = ChannelUpdate_clone(msg); + msg_var = ChannelUpdate_clone(msg); CHECK((((long)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long msg_ref = (long)msg_var.inner; @@ -4141,8 +3972,8 @@ LDKCResult_boolLightningErrorZ handle_channel_update_jcall(const void* this_arg, msg_ref |= 1; } LDKCResult_boolLightningErrorZ* ret = (LDKCResult_boolLightningErrorZ*)js_invoke_function_1(j_calls->handle_channel_update_meth, msg_ref); - LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)ret); return ret_conv; } void handle_htlc_fail_channel_update_jcall(const void* this_arg, const LDKHTLCFailChannelUpdate * update) { @@ -4162,7 +3993,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel uint32_t* arg_vals = (uint32_t*)(arg + 4); for (size_t l = 0; l < arg_constr.datalen; l++) { uint32_t arr_conv_63 = arg_vals[l]; - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)arr_conv_63; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_conv_63) & ~1); FREE((void*)arr_conv_63); arg_constr.data[l] = arr_conv_63_conv; } @@ -4185,8 +4016,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_jcall(const void* this_arg LDKNodeAnnouncement arr_conv_18_conv; arr_conv_18_conv.inner = (void*)(arr_conv_18 & (~1)); arr_conv_18_conv.is_owned = (arr_conv_18 & 1) || (arr_conv_18 == 0); - if (arr_conv_18_conv.inner != NULL) - arr_conv_18_conv = NodeAnnouncement_clone(&arr_conv_18_conv); + arr_conv_18_conv = NodeAnnouncement_clone(&arr_conv_18_conv); arg_constr.data[s] = arr_conv_18_conv; } return arg_constr; @@ -4196,8 +4026,7 @@ void sync_routing_table_jcall(const void* this_arg, LDKPublicKey their_node_id, int8_tArray their_node_id_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes"); memcpy((uint8_t*)(their_node_id_arr + 4), their_node_id.compressed_form, 33); LDKInit init_var = *init; - if (init->inner != NULL) - init_var = Init_clone(init); + init_var = Init_clone(init); CHECK((((long)init_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&init_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. long init_ref = (long)init_var.inner; @@ -4218,8 +4047,8 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_jcall(const void* this msg_ref |= 1; } LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)js_invoke_function_2(j_calls->handle_reply_channel_range_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKReplyShortChannelIdsEnd msg) { @@ -4234,8 +4063,8 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_jcall(const vo msg_ref |= 1; } LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)js_invoke_function_2(j_calls->handle_reply_short_channel_ids_end_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } LDKCResult_NoneLightningErrorZ handle_query_channel_range_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryChannelRange msg) { @@ -4250,8 +4079,8 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_jcall(const void* this msg_ref |= 1; } LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)js_invoke_function_2(j_calls->handle_query_channel_range_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryShortChannelIds msg) { @@ -4266,8 +4095,8 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_jcall(const void* msg_ref |= 1; } LDKCResult_NoneLightningErrorZ* ret = (LDKCResult_NoneLightningErrorZ*)js_invoke_function_2(j_calls->handle_query_short_channel_ids_meth, their_node_id_arr, msg_ref); - LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)ret; - // Warning: we may need a move here but can't do a full clone! + LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1); + ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)ret); return ret_conv; } static void* LDKRoutingMessageHandler_JCalls_clone(const void* this_arg) { @@ -4349,9 +4178,6 @@ uint32_tArray __attribute__((visibility("default"))) TS_RoutingMessageHandler_g for (size_t l = 0; l < ret_var.datalen; l++) { LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* arr_conv_63_ref = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ"); *arr_conv_63_ref = ret_var.data[l]; - arr_conv_63_ref->a = ChannelAnnouncement_clone(&arr_conv_63_ref->a); - arr_conv_63_ref->b = ChannelUpdate_clone(&arr_conv_63_ref->b); - arr_conv_63_ref->c = ChannelUpdate_clone(&arr_conv_63_ref->c); ret_arr_ptr[l] = (long)arr_conv_63_ref; } FREE(ret_var.data); @@ -4399,8 +4225,7 @@ uint32_t __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle LDKReplyChannelRange msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = ReplyChannelRange_clone(&msg_conv); + msg_conv = ReplyChannelRange_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_reply_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -4414,8 +4239,7 @@ uint32_t __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle LDKReplyShortChannelIdsEnd msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv); + msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_reply_short_channel_ids_end)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -4429,8 +4253,7 @@ uint32_t __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle LDKQueryChannelRange msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = QueryChannelRange_clone(&msg_conv); + msg_conv = QueryChannelRange_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_query_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -4444,8 +4267,7 @@ uint32_t __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle LDKQueryShortChannelIds msg_conv; msg_conv.inner = (void*)(msg & (~1)); msg_conv.is_owned = (msg & 1) || (msg == 0); - if (msg_conv.inner != NULL) - msg_conv = QueryShortChannelIds_clone(&msg_conv); + msg_conv = QueryShortChannelIds_clone(&msg_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = (this_arg_conv->handle_query_short_channel_ids)(this_arg_conv->this_arg, their_node_id_ref, msg_conv); return (long)ret_conv; @@ -4545,13 +4367,14 @@ void __attribute__((visibility("default"))) TS_Transaction_free(int8_tArray _re } void __attribute__((visibility("default"))) TS_TxOut_free(uint32_t _res) { - LDKTxOut _res_conv = *(LDKTxOut*)_res; + if ((_res & 1) != 0) return; + LDKTxOut _res_conv = *(LDKTxOut*)(((uint64_t)_res) & ~1); FREE((void*)_res); TxOut_free(_res_conv); } uint32_t __attribute__((visibility("default"))) TS_TxOut_clone(uint32_t orig) { - LDKTxOut* orig_conv = (LDKTxOut*)orig; + LDKTxOut* orig_conv = (LDKTxOut*)(orig & ~1); LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut"); *ret_ref = TxOut_clone(orig_conv); return (long)ret_ref; @@ -4567,7 +4390,7 @@ void __attribute__((visibility("default"))) TS_CVec_SpendableOutputDescriptorZ_ uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t b = 0; b < _res_constr.datalen; b++) { uint32_t arr_conv_27 = _res_vals[b]; - LDKSpendableOutputDescriptor arr_conv_27_conv = *(LDKSpendableOutputDescriptor*)arr_conv_27; + LDKSpendableOutputDescriptor arr_conv_27_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)arr_conv_27) & ~1); FREE((void*)arr_conv_27); _res_constr.data[b] = arr_conv_27_conv; } @@ -4584,7 +4407,7 @@ void __attribute__((visibility("default"))) TS_CVec_MessageSendEventZ_free(uint uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t s = 0; s < _res_constr.datalen; s++) { uint32_t arr_conv_18 = _res_vals[s]; - LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)arr_conv_18; + LDKMessageSendEvent arr_conv_18_conv = *(LDKMessageSendEvent*)(((uint64_t)arr_conv_18) & ~1); FREE((void*)arr_conv_18); _res_constr.data[s] = arr_conv_18_conv; } @@ -4601,7 +4424,7 @@ void __attribute__((visibility("default"))) TS_CVec_EventZ_free(uint32_tArray _ uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t h = 0; h < _res_constr.datalen; h++) { uint32_t arr_conv_7 = _res_vals[h]; - LDKEvent arr_conv_7_conv = *(LDKEvent*)arr_conv_7; + LDKEvent arr_conv_7_conv = *(LDKEvent*)(((uint64_t)arr_conv_7) & ~1); FREE((void*)arr_conv_7); _res_constr.data[h] = arr_conv_7_conv; } @@ -4609,7 +4432,8 @@ void __attribute__((visibility("default"))) TS_CVec_EventZ_free(uint32_tArray _ } void __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ_free(uint32_t _res) { - LDKC2Tuple_usizeTransactionZ _res_conv = *(LDKC2Tuple_usizeTransactionZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_usizeTransactionZ _res_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_usizeTransactionZ_free(_res_conv); } @@ -4622,7 +4446,6 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ_ne b_ref.data_is_owned = true; LDKC2Tuple_usizeTransactionZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ"); *ret_ref = C2Tuple_usizeTransactionZ_new(a, b_ref); - // XXX: We likely need to clone here, but no _clone fn is available for Uint8Array return (long)ret_ref; } @@ -4636,7 +4459,7 @@ void __attribute__((visibility("default"))) TS_CVec_C2Tuple_usizeTransactionZZ_ uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t e = 0; e < _res_constr.datalen; e++) { uint32_t arr_conv_30 = _res_vals[e]; - LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_30; + LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_30) & ~1); FREE((void*)arr_conv_30); _res_constr.data[e] = arr_conv_30_conv; } @@ -4657,11 +4480,19 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUp } void __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_free(uint32_t _res) { - LDKCResult_NoneChannelMonitorUpdateErrZ _res_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneChannelMonitorUpdateErrZ _res_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneChannelMonitorUpdateErrZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_clone(uint32_t orig) { + LDKCResult_NoneChannelMonitorUpdateErrZ* orig_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(orig & ~1); + LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ"); + *ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone(orig_conv); + return (long)ret_conv; +} + void __attribute__((visibility("default"))) TS_CVec_MonitorEventZ_free(uint32_tArray _res) { LDKCVec_MonitorEventZ _res_constr; _res_constr.datalen = *((uint32_t*)_res); @@ -4684,8 +4515,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate LDKChannelMonitorUpdate o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ChannelMonitorUpdate_clone(&o_conv); + o_conv = ChannelMonitorUpdate_clone(&o_conv); LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ"); *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -4695,14 +4525,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ"); *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_free(uint32_t _res) { - LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res_conv = *(LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res_conv = *(LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res_conv); } @@ -4717,20 +4548,29 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErr LDKMonitorUpdateError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = MonitorUpdateError_clone(&e_conv); LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ"); *ret_conv = CResult_NoneMonitorUpdateErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_free(uint32_t _res) { - LDKCResult_NoneMonitorUpdateErrorZ _res_conv = *(LDKCResult_NoneMonitorUpdateErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneMonitorUpdateErrorZ _res_conv = *(LDKCResult_NoneMonitorUpdateErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneMonitorUpdateErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_clone(uint32_t orig) { + LDKCResult_NoneMonitorUpdateErrorZ* orig_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(orig & ~1); + LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ"); + *ret_conv = CResult_NoneMonitorUpdateErrorZ_clone(orig_conv); + return (long)ret_conv; +} + void __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_free(uint32_t _res) { - LDKC2Tuple_OutPointScriptZ _res_conv = *(LDKC2Tuple_OutPointScriptZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_OutPointScriptZ _res_conv = *(LDKC2Tuple_OutPointScriptZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_OutPointScriptZ_free(_res_conv); } @@ -4739,16 +4579,13 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_new( LDKOutPoint a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = OutPoint_clone(&a_conv); + a_conv = OutPoint_clone(&a_conv); LDKCVec_u8Z b_ref; b_ref.datalen = *((uint32_t*)b); b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes"); memcpy(b_ref.data, (uint8_t*)(b + 4), b_ref.datalen); LDKC2Tuple_OutPointScriptZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ"); *ret_ref = C2Tuple_OutPointScriptZ_new(a_conv, b_ref); - ret_ref->a = OutPoint_clone(&ret_ref->a); - ret_ref->b = CVec_u8Z_clone(&ret_ref->b); return (long)ret_ref; } @@ -4772,18 +4609,25 @@ void __attribute__((visibility("default"))) TS_CVec_TransactionZ_free(ptrArray CVec_TransactionZ_free(_res_constr); } +uint32_t __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_clone(uint32_t orig) { + LDKC2Tuple_u32TxOutZ* orig_conv = (LDKC2Tuple_u32TxOutZ*)(orig & ~1); + LDKC2Tuple_u32TxOutZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ"); + *ret_ref = C2Tuple_u32TxOutZ_clone(orig_conv); + return (long)ret_ref; +} + void __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_free(uint32_t _res) { - LDKC2Tuple_u32TxOutZ _res_conv = *(LDKC2Tuple_u32TxOutZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_u32TxOutZ _res_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_u32TxOutZ_free(_res_conv); } uint32_t __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_new(int32_t a, uint32_t b) { - LDKTxOut b_conv = *(LDKTxOut*)b; + LDKTxOut b_conv = *(LDKTxOut*)(((uint64_t)b) & ~1); FREE((void*)b); LDKC2Tuple_u32TxOutZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ"); *ret_ref = C2Tuple_u32TxOutZ_new(a, b_conv); - ret_ref->b = TxOut_clone(&ret_ref->b); return (long)ret_ref; } @@ -4797,7 +4641,7 @@ void __attribute__((visibility("default"))) TS_CVec_C2Tuple_u32TxOutZZ_free(uin uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t z = 0; z < _res_constr.datalen; z++) { uint32_t arr_conv_25 = _res_vals[z]; - LDKC2Tuple_u32TxOutZ arr_conv_25_conv = *(LDKC2Tuple_u32TxOutZ*)arr_conv_25; + LDKC2Tuple_u32TxOutZ arr_conv_25_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_conv_25) & ~1); FREE((void*)arr_conv_25); _res_constr.data[z] = arr_conv_25_conv; } @@ -4805,7 +4649,8 @@ void __attribute__((visibility("default"))) TS_CVec_C2Tuple_u32TxOutZZ_free(uin } void __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(uint32_t _res) { - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(_res_conv); } @@ -4823,14 +4668,12 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32 uint32_t* b_vals = (uint32_t*)(b + 4); for (size_t z = 0; z < b_constr.datalen; z++) { uint32_t arr_conv_25 = b_vals[z]; - LDKC2Tuple_u32TxOutZ arr_conv_25_conv = *(LDKC2Tuple_u32TxOutZ*)arr_conv_25; + LDKC2Tuple_u32TxOutZ arr_conv_25_conv = *(LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_conv_25) & ~1); FREE((void*)arr_conv_25); b_constr.data[z] = arr_conv_25_conv; } LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ"); *ret_ref = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(a_ref, b_constr); - ret_ref->a = ThirtyTwoBytes_clone(&ret_ref->a); - ret_ref->b = CVec_C2Tuple_u32TxOutZZ_clone(&ret_ref->b); return (long)ret_ref; } @@ -4844,7 +4687,7 @@ void __attribute__((visibility("default"))) TS_CVec_C2Tuple_TxidCVec_C2Tuple_u3 uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t x = 0; x < _res_constr.datalen; x++) { uint32_t arr_conv_49 = _res_vals[x]; - LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_conv_49_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)arr_conv_49; + LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_conv_49_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_conv_49) & ~1); FREE((void*)arr_conv_49); _res_constr.data[x] = arr_conv_49_conv; } @@ -4852,7 +4695,8 @@ void __attribute__((visibility("default"))) TS_CVec_C2Tuple_TxidCVec_C2Tuple_u3 } void __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMonitorZ_free(uint32_t _res) { - LDKC2Tuple_BlockHashChannelMonitorZ _res_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_BlockHashChannelMonitorZ _res_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_BlockHashChannelMonitorZ_free(_res_conv); } @@ -4864,16 +4708,14 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni LDKChannelMonitor b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + b_conv = ChannelMonitor_clone(&b_conv); LDKC2Tuple_BlockHashChannelMonitorZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ"); *ret_ref = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv); - ret_ref->a = ThirtyTwoBytes_clone(&ret_ref->a); - // XXX: We likely need to clone here, but no _clone fn is available for ChannelMonitor return (long)ret_ref; } uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(uint32_t o) { - LDKC2Tuple_BlockHashChannelMonitorZ o_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)o; + LDKC2Tuple_BlockHashChannelMonitorZ o_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(o_conv); @@ -4884,20 +4726,29 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashCha LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(uint32_t _res) { - LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_C2Tuple_u64u64Z_clone(uint32_t orig) { + LDKC2Tuple_u64u64Z* orig_conv = (LDKC2Tuple_u64u64Z*)(orig & ~1); + LDKC2Tuple_u64u64Z* ret_ref = MALLOC(sizeof(LDKC2Tuple_u64u64Z), "LDKC2Tuple_u64u64Z"); + *ret_ref = C2Tuple_u64u64Z_clone(orig_conv); + return (long)ret_ref; +} + void __attribute__((visibility("default"))) TS_C2Tuple_u64u64Z_free(uint32_t _res) { - LDKC2Tuple_u64u64Z _res_conv = *(LDKC2Tuple_u64u64Z*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_u64u64Z _res_conv = *(LDKC2Tuple_u64u64Z*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_u64u64Z_free(_res_conv); } @@ -4909,7 +4760,7 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_u64u64Z_new(int64_t } uint32_t __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_ok(uint32_t o) { - LDKSpendableOutputDescriptor o_conv = *(LDKSpendableOutputDescriptor*)o; + LDKSpendableOutputDescriptor o_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ"); *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_ok(o_conv); @@ -4920,18 +4771,26 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescr LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ"); *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_free(uint32_t _res) { - LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res_conv = *(LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res_conv = *(LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_clone(uint32_t orig) { + LDKCResult_SpendableOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(orig & ~1); + LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ"); + *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + void __attribute__((visibility("default"))) TS_CVec_SignatureZ_free(ptrArray _res) { LDKCVec_SignatureZ _res_constr; _res_constr.datalen = *((uint32_t*)_res); @@ -4950,8 +4809,16 @@ void __attribute__((visibility("default"))) TS_CVec_SignatureZ_free(ptrArray _r CVec_SignatureZ_free(_res_constr); } +uint32_t __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_SignatureZZ_clone(uint32_t orig) { + LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(orig & ~1); + LDKC2Tuple_SignatureCVec_SignatureZZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ"); + *ret_ref = C2Tuple_SignatureCVec_SignatureZZ_clone(orig_conv); + return (long)ret_ref; +} + void __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_SignatureZZ_free(uint32_t _res) { - LDKC2Tuple_SignatureCVec_SignatureZZ _res_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_SignatureCVec_SignatureZZ _res_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_SignatureCVec_SignatureZZ_free(_res_conv); } @@ -4976,13 +4843,11 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_Signat } LDKC2Tuple_SignatureCVec_SignatureZZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ"); *ret_ref = C2Tuple_SignatureCVec_SignatureZZ_new(a_ref, b_constr); - // XXX: We likely need to clone here, but no _clone fn is available for Uint8Array - // XXX: We likely need to clone here, but no _clone fn is available for Uint8Array[] return (long)ret_ref; } uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(uint32_t o) { - LDKC2Tuple_SignatureCVec_SignatureZZ o_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)o; + LDKC2Tuple_SignatureCVec_SignatureZZ o_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ"); *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(o_conv); @@ -4996,13 +4861,14 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVe } void __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(uint32_t _res) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv); } uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(uint32_t orig) { - LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)orig; + LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(orig & ~1); LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ"); *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(orig_conv); return (long)ret_conv; @@ -5024,59 +4890,21 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_err() } void __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_free(uint32_t _res) { - LDKCResult_SignatureNoneZ _res_conv = *(LDKCResult_SignatureNoneZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_SignatureNoneZ _res_conv = *(LDKCResult_SignatureNoneZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_SignatureNoneZ_free(_res_conv); } uint32_t __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_clone(uint32_t orig) { - LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)orig; + LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)(orig & ~1); LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ"); *ret_conv = CResult_SignatureNoneZ_clone(orig_conv); return (long)ret_conv; } -uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_ok(ptrArray o) { - LDKCVec_SignatureZ o_constr; - o_constr.datalen = *((uint32_t*)o); - if (o_constr.datalen > 0) - o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements"); - else - o_constr.data = NULL; - int8_tArray* o_vals = (int8_tArray*)(o + 4); - for (size_t m = 0; m < o_constr.datalen; m++) { - int8_tArray arr_conv_12 = o_vals[m]; - LDKSignature arr_conv_12_ref; - CHECK(*((uint32_t*)arr_conv_12) == 64); - memcpy(arr_conv_12_ref.compact_form, (uint8_t*)(arr_conv_12 + 4), 64); - o_constr.data[m] = arr_conv_12_ref; - } - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = CResult_CVec_SignatureZNoneZ_ok(o_constr); - return (long)ret_conv; -} - -uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_err() { - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = CResult_CVec_SignatureZNoneZ_err(); - return (long)ret_conv; -} - -void __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_free(uint32_t _res) { - LDKCResult_CVec_SignatureZNoneZ _res_conv = *(LDKCResult_CVec_SignatureZNoneZ*)_res; - FREE((void*)_res); - CResult_CVec_SignatureZNoneZ_free(_res_conv); -} - -uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_clone(uint32_t orig) { - LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)orig; - LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); - *ret_conv = CResult_CVec_SignatureZNoneZ_clone(orig_conv); - return (long)ret_conv; -} - uint32_t __attribute__((visibility("default"))) TS_CResult_ChanKeySignerDecodeErrorZ_ok(uint32_t o) { - LDKChannelKeys o_conv = *(LDKChannelKeys*)o; + LDKChannelKeys o_conv = *(LDKChannelKeys*)(((uint64_t)o) & ~1); LDKCResult_ChanKeySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChanKeySignerDecodeErrorZ), "LDKCResult_ChanKeySignerDecodeErrorZ"); *ret_conv = CResult_ChanKeySignerDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5086,24 +4914,31 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ChanKeySignerDecodeE LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ChanKeySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChanKeySignerDecodeErrorZ), "LDKCResult_ChanKeySignerDecodeErrorZ"); *ret_conv = CResult_ChanKeySignerDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_ChanKeySignerDecodeErrorZ_free(uint32_t _res) { - LDKCResult_ChanKeySignerDecodeErrorZ _res_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ChanKeySignerDecodeErrorZ _res_conv = *(LDKCResult_ChanKeySignerDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ChanKeySignerDecodeErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_ChanKeySignerDecodeErrorZ_clone(uint32_t orig) { + LDKCResult_ChanKeySignerDecodeErrorZ* orig_conv = (LDKCResult_ChanKeySignerDecodeErrorZ*)(orig & ~1); + LDKCResult_ChanKeySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChanKeySignerDecodeErrorZ), "LDKCResult_ChanKeySignerDecodeErrorZ"); + *ret_conv = CResult_ChanKeySignerDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_InMemoryChannelKeysDecodeErrorZ_ok(uint32_t o) { LDKInMemoryChannelKeys o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = InMemoryChannelKeys_clone(&o_conv); + o_conv = InMemoryChannelKeys_clone(&o_conv); LDKCResult_InMemoryChannelKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemoryChannelKeysDecodeErrorZ), "LDKCResult_InMemoryChannelKeysDecodeErrorZ"); *ret_conv = CResult_InMemoryChannelKeysDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5113,20 +4948,21 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_InMemoryChannelKeysD LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_InMemoryChannelKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemoryChannelKeysDecodeErrorZ), "LDKCResult_InMemoryChannelKeysDecodeErrorZ"); *ret_conv = CResult_InMemoryChannelKeysDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_InMemoryChannelKeysDecodeErrorZ_free(uint32_t _res) { - LDKCResult_InMemoryChannelKeysDecodeErrorZ _res_conv = *(LDKCResult_InMemoryChannelKeysDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_InMemoryChannelKeysDecodeErrorZ _res_conv = *(LDKCResult_InMemoryChannelKeysDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_InMemoryChannelKeysDecodeErrorZ_free(_res_conv); } uint32_t __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_ok(uint32_t o) { - LDKTxOut o_conv = *(LDKTxOut*)o; + LDKTxOut o_conv = *(LDKTxOut*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ"); *ret_conv = CResult_TxOutAccessErrorZ_ok(o_conv); @@ -5141,11 +4977,19 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_er } void __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_free(uint32_t _res) { - LDKCResult_TxOutAccessErrorZ _res_conv = *(LDKCResult_TxOutAccessErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_TxOutAccessErrorZ _res_conv = *(LDKCResult_TxOutAccessErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_TxOutAccessErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_clone(uint32_t orig) { + LDKCResult_TxOutAccessErrorZ* orig_conv = (LDKCResult_TxOutAccessErrorZ*)(orig & ~1); + LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ"); + *ret_conv = CResult_TxOutAccessErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_ok() { LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); *ret_conv = CResult_NoneAPIErrorZ_ok(); @@ -5153,7 +4997,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_ok() { } uint32_t __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_err(uint32_t e) { - LDKAPIError e_conv = *(LDKAPIError*)e; + LDKAPIError e_conv = *(LDKAPIError*)(((uint64_t)e) & ~1); FREE((void*)e); LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); *ret_conv = CResult_NoneAPIErrorZ_err(e_conv); @@ -5161,7 +5005,8 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_err(ui } void __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_free(uint32_t _res) { - LDKCResult_NoneAPIErrorZ _res_conv = *(LDKCResult_NoneAPIErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneAPIErrorZ _res_conv = *(LDKCResult_NoneAPIErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneAPIErrorZ_free(_res_conv); } @@ -5194,18 +5039,26 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailu LDKPaymentSendFailure e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PaymentSendFailure_clone(&e_conv); LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ"); *ret_conv = CResult_NonePaymentSendFailureZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_free(uint32_t _res) { - LDKCResult_NonePaymentSendFailureZ _res_conv = *(LDKCResult_NonePaymentSendFailureZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NonePaymentSendFailureZ _res_conv = *(LDKCResult_NonePaymentSendFailureZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NonePaymentSendFailureZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_clone(uint32_t orig) { + LDKCResult_NonePaymentSendFailureZ* orig_conv = (LDKCResult_NonePaymentSendFailureZ*)(orig & ~1); + LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ"); + *ret_conv = CResult_NonePaymentSendFailureZ_clone(orig_conv); + return (long)ret_conv; +} + void __attribute__((visibility("default"))) TS_CVec_NetAddressZ_free(uint32_tArray _res) { LDKCVec_NetAddressZ _res_constr; _res_constr.datalen = *((uint32_t*)_res); @@ -5216,7 +5069,7 @@ void __attribute__((visibility("default"))) TS_CVec_NetAddressZ_free(uint32_tAr uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t m = 0; m < _res_constr.datalen; m++) { uint32_t arr_conv_12 = _res_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); _res_constr.data[m] = arr_conv_12_conv; } @@ -5242,7 +5095,8 @@ void __attribute__((visibility("default"))) TS_CVec_ChannelMonitorZ_free(uint32 } void __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelManagerZ_free(uint32_t _res) { - LDKC2Tuple_BlockHashChannelManagerZ _res_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)_res; + if ((_res & 1) != 0) return; + LDKC2Tuple_BlockHashChannelManagerZ _res_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C2Tuple_BlockHashChannelManagerZ_free(_res_conv); } @@ -5254,16 +5108,14 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana LDKChannelManager b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelManager LDKC2Tuple_BlockHashChannelManagerZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ"); *ret_ref = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv); - ret_ref->a = ThirtyTwoBytes_clone(&ret_ref->a); - // XXX: We likely need to clone here, but no _clone fn is available for ChannelManager return (long)ret_ref; } uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(uint32_t o) { - LDKC2Tuple_BlockHashChannelManagerZ o_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)o; + LDKC2Tuple_BlockHashChannelManagerZ o_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(o_conv); @@ -5274,20 +5126,21 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashCha LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ"); *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(uint32_t _res) { - LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(_res_conv); } uint32_t __attribute__((visibility("default"))) TS_CResult_NetAddressu8Z_ok(uint32_t o) { - LDKNetAddress o_conv = *(LDKNetAddress*)o; + LDKNetAddress o_conv = *(LDKNetAddress*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_NetAddressu8Z* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressu8Z), "LDKCResult_NetAddressu8Z"); *ret_conv = CResult_NetAddressu8Z_ok(o_conv); @@ -5301,13 +5154,21 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NetAddressu8Z_err(in } void __attribute__((visibility("default"))) TS_CResult_NetAddressu8Z_free(uint32_t _res) { - LDKCResult_NetAddressu8Z _res_conv = *(LDKCResult_NetAddressu8Z*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NetAddressu8Z _res_conv = *(LDKCResult_NetAddressu8Z*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NetAddressu8Z_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NetAddressu8Z_clone(uint32_t orig) { + LDKCResult_NetAddressu8Z* orig_conv = (LDKCResult_NetAddressu8Z*)(orig & ~1); + LDKCResult_NetAddressu8Z* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressu8Z), "LDKCResult_NetAddressu8Z"); + *ret_conv = CResult_NetAddressu8Z_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(uint32_t o) { - LDKCResult_NetAddressu8Z o_conv = *(LDKCResult_NetAddressu8Z*)o; + LDKCResult_NetAddressu8Z o_conv = *(LDKCResult_NetAddressu8Z*)(((uint64_t)o) & ~1); FREE((void*)o); LDKCResult_CResult_NetAddressu8ZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ), "LDKCResult_CResult_NetAddressu8ZDecodeErrorZ"); *ret_conv = CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(o_conv); @@ -5318,14 +5179,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_CResult_NetAddressu8 LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_CResult_NetAddressu8ZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ), "LDKCResult_CResult_NetAddressu8ZDecodeErrorZ"); *ret_conv = CResult_CResult_NetAddressu8ZDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_CResult_NetAddressu8ZDecodeErrorZ_free(uint32_t _res) { - LDKCResult_CResult_NetAddressu8ZDecodeErrorZ _res_conv = *(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_CResult_NetAddressu8ZDecodeErrorZ _res_conv = *(LDKCResult_CResult_NetAddressu8ZDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_CResult_NetAddressu8ZDecodeErrorZ_free(_res_conv); } @@ -5427,20 +5289,29 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_ LDKLightningError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = LightningError_clone(&e_conv); LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ"); *ret_conv = CResult_boolLightningErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_free(uint32_t _res) { - LDKCResult_boolLightningErrorZ _res_conv = *(LDKCResult_boolLightningErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_boolLightningErrorZ _res_conv = *(LDKCResult_boolLightningErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_boolLightningErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_clone(uint32_t orig) { + LDKCResult_boolLightningErrorZ* orig_conv = (LDKCResult_boolLightningErrorZ*)(orig & ~1); + LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ"); + *ret_conv = CResult_boolLightningErrorZ_clone(orig_conv); + return (long)ret_conv; +} + void __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(uint32_t _res) { - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ _res_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)_res; + if ((_res & 1) != 0) return; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ _res_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(_res_conv); } @@ -5449,23 +5320,17 @@ uint32_t __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC LDKChannelAnnouncement a_conv; a_conv.inner = (void*)(a & (~1)); a_conv.is_owned = (a & 1) || (a == 0); - if (a_conv.inner != NULL) - a_conv = ChannelAnnouncement_clone(&a_conv); + a_conv = ChannelAnnouncement_clone(&a_conv); LDKChannelUpdate b_conv; b_conv.inner = (void*)(b & (~1)); b_conv.is_owned = (b & 1) || (b == 0); - if (b_conv.inner != NULL) - b_conv = ChannelUpdate_clone(&b_conv); + b_conv = ChannelUpdate_clone(&b_conv); LDKChannelUpdate c_conv; c_conv.inner = (void*)(c & (~1)); c_conv.is_owned = (c & 1) || (c == 0); - if (c_conv.inner != NULL) - c_conv = ChannelUpdate_clone(&c_conv); + c_conv = ChannelUpdate_clone(&c_conv); LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_ref = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ"); *ret_ref = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a_conv, b_conv, c_conv); - ret_ref->a = ChannelAnnouncement_clone(&ret_ref->a); - ret_ref->b = ChannelUpdate_clone(&ret_ref->b); - ret_ref->c = ChannelUpdate_clone(&ret_ref->c); return (long)ret_ref; } @@ -5479,7 +5344,7 @@ void __attribute__((visibility("default"))) TS_CVec_C3Tuple_ChannelAnnouncement uint32_t* _res_vals = (uint32_t*)(_res + 4); for (size_t l = 0; l < _res_constr.datalen; l++) { uint32_t arr_conv_63 = _res_vals[l]; - LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)arr_conv_63; + LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_conv_63_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_conv_63) & ~1); FREE((void*)arr_conv_63); _res_constr.data[l] = arr_conv_63_conv; } @@ -5514,24 +5379,31 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_ LDKLightningError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = LightningError_clone(&e_conv); LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); *ret_conv = CResult_NoneLightningErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_free(uint32_t _res) { - LDKCResult_NoneLightningErrorZ _res_conv = *(LDKCResult_NoneLightningErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NoneLightningErrorZ _res_conv = *(LDKCResult_NoneLightningErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NoneLightningErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_clone(uint32_t orig) { + LDKCResult_NoneLightningErrorZ* orig_conv = (LDKCResult_NoneLightningErrorZ*)(orig & ~1); + LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ"); + *ret_conv = CResult_NoneLightningErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_ok(uint32_t o) { LDKChannelReestablish o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ChannelReestablish_clone(&o_conv); + o_conv = ChannelReestablish_clone(&o_conv); LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ"); *ret_conv = CResult_ChannelReestablishDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5541,14 +5413,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDe LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ"); *ret_conv = CResult_ChannelReestablishDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_free(uint32_t _res) { - LDKCResult_ChannelReestablishDecodeErrorZ _res_conv = *(LDKCResult_ChannelReestablishDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ChannelReestablishDecodeErrorZ _res_conv = *(LDKCResult_ChannelReestablishDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ChannelReestablishDecodeErrorZ_free(_res_conv); } @@ -5557,8 +5430,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_ok( LDKInit o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Init_clone(&o_conv); + o_conv = Init_clone(&o_conv); LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ"); *ret_conv = CResult_InitDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5568,14 +5440,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_err LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ"); *ret_conv = CResult_InitDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_free(uint32_t _res) { - LDKCResult_InitDecodeErrorZ _res_conv = *(LDKCResult_InitDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_InitDecodeErrorZ _res_conv = *(LDKCResult_InitDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_InitDecodeErrorZ_free(_res_conv); } @@ -5584,8 +5457,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_ok( LDKPing o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Ping_clone(&o_conv); + o_conv = Ping_clone(&o_conv); LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ"); *ret_conv = CResult_PingDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5595,14 +5467,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_err LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ"); *ret_conv = CResult_PingDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_free(uint32_t _res) { - LDKCResult_PingDecodeErrorZ _res_conv = *(LDKCResult_PingDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_PingDecodeErrorZ _res_conv = *(LDKCResult_PingDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_PingDecodeErrorZ_free(_res_conv); } @@ -5611,8 +5484,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_ok( LDKPong o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Pong_clone(&o_conv); + o_conv = Pong_clone(&o_conv); LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ"); *ret_conv = CResult_PongDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5622,14 +5494,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_err LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ"); *ret_conv = CResult_PongDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_free(uint32_t _res) { - LDKCResult_PongDecodeErrorZ _res_conv = *(LDKCResult_PongDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_PongDecodeErrorZ _res_conv = *(LDKCResult_PongDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_PongDecodeErrorZ_free(_res_conv); } @@ -5638,8 +5511,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnou LDKUnsignedChannelAnnouncement o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = UnsignedChannelAnnouncement_clone(&o_conv); + o_conv = UnsignedChannelAnnouncement_clone(&o_conv); LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5649,14 +5521,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnou LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(uint32_t _res) { - LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res_conv); } @@ -5665,8 +5538,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdat LDKUnsignedChannelUpdate o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = UnsignedChannelUpdate_clone(&o_conv); + o_conv = UnsignedChannelUpdate_clone(&o_conv); LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5676,14 +5548,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdat LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ"); *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_free(uint32_t _res) { - LDKCResult_UnsignedChannelUpdateDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_UnsignedChannelUpdateDecodeErrorZ _res_conv = *(LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res_conv); } @@ -5692,8 +5565,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeEr LDKErrorMessage o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ErrorMessage_clone(&o_conv); + o_conv = ErrorMessage_clone(&o_conv); LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ"); *ret_conv = CResult_ErrorMessageDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5703,14 +5575,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeEr LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ"); *ret_conv = CResult_ErrorMessageDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_free(uint32_t _res) { - LDKCResult_ErrorMessageDecodeErrorZ _res_conv = *(LDKCResult_ErrorMessageDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ErrorMessageDecodeErrorZ _res_conv = *(LDKCResult_ErrorMessageDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ErrorMessageDecodeErrorZ_free(_res_conv); } @@ -5719,8 +5592,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnounce LDKUnsignedNodeAnnouncement o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = UnsignedNodeAnnouncement_clone(&o_conv); + o_conv = UnsignedNodeAnnouncement_clone(&o_conv); LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5730,14 +5602,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnounce LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ"); *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(uint32_t _res) { - LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ _res_conv = *(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res_conv); } @@ -5746,8 +5619,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIds LDKQueryShortChannelIds o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = QueryShortChannelIds_clone(&o_conv); + o_conv = QueryShortChannelIds_clone(&o_conv); LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ"); *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5757,14 +5629,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIds LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ"); *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_free(uint32_t _res) { - LDKCResult_QueryShortChannelIdsDecodeErrorZ _res_conv = *(LDKCResult_QueryShortChannelIdsDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_QueryShortChannelIdsDecodeErrorZ _res_conv = *(LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_QueryShortChannelIdsDecodeErrorZ_free(_res_conv); } @@ -5773,8 +5646,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIds LDKReplyShortChannelIdsEnd o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ReplyShortChannelIdsEnd_clone(&o_conv); + o_conv = ReplyShortChannelIdsEnd_clone(&o_conv); LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ"); *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5784,14 +5656,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIds LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ"); *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(uint32_t _res) { - LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ _res_conv = *(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ _res_conv = *(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res_conv); } @@ -5800,8 +5673,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDec LDKQueryChannelRange o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = QueryChannelRange_clone(&o_conv); + o_conv = QueryChannelRange_clone(&o_conv); LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ"); *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5811,14 +5683,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDec LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ"); *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_free(uint32_t _res) { - LDKCResult_QueryChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_QueryChannelRangeDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_QueryChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_QueryChannelRangeDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_QueryChannelRangeDecodeErrorZ_free(_res_conv); } @@ -5827,8 +5700,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDec LDKReplyChannelRange o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = ReplyChannelRange_clone(&o_conv); + o_conv = ReplyChannelRange_clone(&o_conv); LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ"); *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5838,14 +5710,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDec LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ"); *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_free(uint32_t _res) { - LDKCResult_ReplyChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_ReplyChannelRangeDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_ReplyChannelRangeDecodeErrorZ _res_conv = *(LDKCResult_ReplyChannelRangeDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_ReplyChannelRangeDecodeErrorZ_free(_res_conv); } @@ -5854,8 +5727,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilte LDKGossipTimestampFilter o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = GossipTimestampFilter_clone(&o_conv); + o_conv = GossipTimestampFilter_clone(&o_conv); LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ"); *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -5865,14 +5737,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilte LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ"); *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_free(uint32_t _res) { - LDKCResult_GossipTimestampFilterDecodeErrorZ _res_conv = *(LDKCResult_GossipTimestampFilterDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_GossipTimestampFilterDecodeErrorZ _res_conv = *(LDKCResult_GossipTimestampFilterDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_GossipTimestampFilterDecodeErrorZ_free(_res_conv); } @@ -5917,18 +5790,26 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleEr LDKPeerHandleError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PeerHandleError_clone(&e_conv); LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ"); *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_free(uint32_t _res) { - LDKCResult_CVec_u8ZPeerHandleErrorZ _res_conv = *(LDKCResult_CVec_u8ZPeerHandleErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_CVec_u8ZPeerHandleErrorZ _res_conv = *(LDKCResult_CVec_u8ZPeerHandleErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_CVec_u8ZPeerHandleErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_clone(uint32_t orig) { + LDKCResult_CVec_u8ZPeerHandleErrorZ* orig_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(orig & ~1); + LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ"); + *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_ok() { LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); *ret_conv = CResult_NonePeerHandleErrorZ_ok(); @@ -5939,18 +5820,26 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ LDKPeerHandleError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PeerHandleError_clone(&e_conv); LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); *ret_conv = CResult_NonePeerHandleErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_free(uint32_t _res) { - LDKCResult_NonePeerHandleErrorZ _res_conv = *(LDKCResult_NonePeerHandleErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NonePeerHandleErrorZ _res_conv = *(LDKCResult_NonePeerHandleErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NonePeerHandleErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_clone(uint32_t orig) { + LDKCResult_NonePeerHandleErrorZ* orig_conv = (LDKCResult_NonePeerHandleErrorZ*)(orig & ~1); + LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); + *ret_conv = CResult_NonePeerHandleErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_ok(jboolean o) { LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ"); *ret_conv = CResult_boolPeerHandleErrorZ_ok(o); @@ -5961,18 +5850,26 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ LDKPeerHandleError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = PeerHandleError_clone(&e_conv); LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ"); *ret_conv = CResult_boolPeerHandleErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_free(uint32_t _res) { - LDKCResult_boolPeerHandleErrorZ _res_conv = *(LDKCResult_boolPeerHandleErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_boolPeerHandleErrorZ _res_conv = *(LDKCResult_boolPeerHandleErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_boolPeerHandleErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_clone(uint32_t orig) { + LDKCResult_boolPeerHandleErrorZ* orig_conv = (LDKCResult_boolPeerHandleErrorZ*)(orig & ~1); + LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ"); + *ret_conv = CResult_boolPeerHandleErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_SecretKeySecpErrorZ_ok(int8_tArray o) { LDKSecretKey o_ref; CHECK(*((uint32_t*)o) == 32); @@ -5990,7 +5887,8 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_SecretKeySecpErrorZ_ } void __attribute__((visibility("default"))) TS_CResult_SecretKeySecpErrorZ_free(uint32_t _res) { - LDKCResult_SecretKeySecpErrorZ _res_conv = *(LDKCResult_SecretKeySecpErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_SecretKeySecpErrorZ _res_conv = *(LDKCResult_SecretKeySecpErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_SecretKeySecpErrorZ_free(_res_conv); } @@ -6012,7 +5910,8 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_PublicKeySecpErrorZ_ } void __attribute__((visibility("default"))) TS_CResult_PublicKeySecpErrorZ_free(uint32_t _res) { - LDKCResult_PublicKeySecpErrorZ _res_conv = *(LDKCResult_PublicKeySecpErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_PublicKeySecpErrorZ _res_conv = *(LDKCResult_PublicKeySecpErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_PublicKeySecpErrorZ_free(_res_conv); } @@ -6021,8 +5920,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_TxCreationKeysSecpEr LDKTxCreationKeys o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = TxCreationKeys_clone(&o_conv); + o_conv = TxCreationKeys_clone(&o_conv); LDKCResult_TxCreationKeysSecpErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysSecpErrorZ), "LDKCResult_TxCreationKeysSecpErrorZ"); *ret_conv = CResult_TxCreationKeysSecpErrorZ_ok(o_conv); return (long)ret_conv; @@ -6036,7 +5934,8 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_TxCreationKeysSecpEr } void __attribute__((visibility("default"))) TS_CResult_TxCreationKeysSecpErrorZ_free(uint32_t _res) { - LDKCResult_TxCreationKeysSecpErrorZ _res_conv = *(LDKCResult_TxCreationKeysSecpErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_TxCreationKeysSecpErrorZ _res_conv = *(LDKCResult_TxCreationKeysSecpErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_TxCreationKeysSecpErrorZ_free(_res_conv); } @@ -6045,7 +5944,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTra LDKTrustedCommitmentTransaction o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKTrustedCommitmentTransaction LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ"); *ret_conv = CResult_TrustedCommitmentTransactionNoneZ_ok(o_conv); return (long)ret_conv; @@ -6058,11 +5957,52 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTra } void __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTransactionNoneZ_free(uint32_t _res) { - LDKCResult_TrustedCommitmentTransactionNoneZ _res_conv = *(LDKCResult_TrustedCommitmentTransactionNoneZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_TrustedCommitmentTransactionNoneZ _res_conv = *(LDKCResult_TrustedCommitmentTransactionNoneZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_TrustedCommitmentTransactionNoneZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_ok(ptrArray o) { + LDKCVec_SignatureZ o_constr; + o_constr.datalen = *((uint32_t*)o); + if (o_constr.datalen > 0) + o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements"); + else + o_constr.data = NULL; + int8_tArray* o_vals = (int8_tArray*)(o + 4); + for (size_t m = 0; m < o_constr.datalen; m++) { + int8_tArray arr_conv_12 = o_vals[m]; + LDKSignature arr_conv_12_ref; + CHECK(*((uint32_t*)arr_conv_12) == 64); + memcpy(arr_conv_12_ref.compact_form, (uint8_t*)(arr_conv_12 + 4), 64); + o_constr.data[m] = arr_conv_12_ref; + } + LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); + *ret_conv = CResult_CVec_SignatureZNoneZ_ok(o_constr); + return (long)ret_conv; +} + +uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_err() { + LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); + *ret_conv = CResult_CVec_SignatureZNoneZ_err(); + return (long)ret_conv; +} + +void __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_free(uint32_t _res) { + if ((_res & 1) != 0) return; + LDKCResult_CVec_SignatureZNoneZ _res_conv = *(LDKCResult_CVec_SignatureZNoneZ*)(((uint64_t)_res) & ~1); + FREE((void*)_res); + CResult_CVec_SignatureZNoneZ_free(_res_conv); +} + +uint32_t __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_clone(uint32_t orig) { + LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)(orig & ~1); + LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ"); + *ret_conv = CResult_CVec_SignatureZNoneZ_clone(orig_conv); + return (long)ret_conv; +} + void __attribute__((visibility("default"))) TS_CVec_RouteHopZ_free(uint32_tArray _res) { LDKCVec_RouteHopZ _res_constr; _res_constr.datalen = *((uint32_t*)_res); @@ -6114,8 +6054,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_ok LDKRoute o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Route_clone(&o_conv); + o_conv = Route_clone(&o_conv); LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ"); *ret_conv = CResult_RouteDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6125,14 +6064,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_er LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ"); *ret_conv = CResult_RouteDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_free(uint32_t _res) { - LDKCResult_RouteDecodeErrorZ _res_conv = *(LDKCResult_RouteDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_RouteDecodeErrorZ _res_conv = *(LDKCResult_RouteDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_RouteDecodeErrorZ_free(_res_conv); } @@ -6159,8 +6099,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ LDKRoute o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = Route_clone(&o_conv); + o_conv = Route_clone(&o_conv); LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ"); *ret_conv = CResult_RouteLightningErrorZ_ok(o_conv); return (long)ret_conv; @@ -6170,14 +6109,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ LDKLightningError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = LightningError_clone(&e_conv); LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ"); *ret_conv = CResult_RouteLightningErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_free(uint32_t _res) { - LDKCResult_RouteLightningErrorZ _res_conv = *(LDKCResult_RouteLightningErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_RouteLightningErrorZ _res_conv = *(LDKCResult_RouteLightningErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_RouteLightningErrorZ_free(_res_conv); } @@ -6186,8 +6126,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErr LDKRoutingFees o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - if (o_conv.inner != NULL) - o_conv = RoutingFees_clone(&o_conv); + o_conv = RoutingFees_clone(&o_conv); LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ"); *ret_conv = CResult_RoutingFeesDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6197,14 +6136,15 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErr LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ"); *ret_conv = CResult_RoutingFeesDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_free(uint32_t _res) { - LDKCResult_RoutingFeesDecodeErrorZ _res_conv = *(LDKCResult_RoutingFeesDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_RoutingFeesDecodeErrorZ _res_conv = *(LDKCResult_RoutingFeesDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_RoutingFeesDecodeErrorZ_free(_res_conv); } @@ -6213,7 +6153,7 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfo LDKNodeAnnouncementInfo o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + o_conv = NodeAnnouncementInfo_clone(&o_conv); LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ"); *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6223,23 +6163,31 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfo LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ"); *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_free(uint32_t _res) { - LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_clone(uint32_t orig) { + LDKCResult_NodeAnnouncementInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(orig & ~1); + LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ"); + *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_ok(uint32_t o) { LDKNodeInfo o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + o_conv = NodeInfo_clone(&o_conv); LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ"); *ret_conv = CResult_NodeInfoDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6249,23 +6197,31 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ"); *ret_conv = CResult_NodeInfoDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_free(uint32_t _res) { - LDKCResult_NodeInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeInfoDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NodeInfoDecodeErrorZ _res_conv = *(LDKCResult_NodeInfoDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NodeInfoDecodeErrorZ_free(_res_conv); } +uint32_t __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_clone(uint32_t orig) { + LDKCResult_NodeInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(orig & ~1); + LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ"); + *ret_conv = CResult_NodeInfoDecodeErrorZ_clone(orig_conv); + return (long)ret_conv; +} + uint32_t __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_ok(uint32_t o) { LDKNetworkGraph o_conv; o_conv.inner = (void*)(o & (~1)); o_conv.is_owned = (o & 1) || (o == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNetworkGraph LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ"); *ret_conv = CResult_NetworkGraphDecodeErrorZ_ok(o_conv); return (long)ret_conv; @@ -6275,20 +6231,22 @@ uint32_t __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeEr LDKDecodeError e_conv; e_conv.inner = (void*)(e & (~1)); e_conv.is_owned = (e & 1) || (e == 0); - // Warning: we may need a move here but can't clone! + e_conv = DecodeError_clone(&e_conv); LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ"); *ret_conv = CResult_NetworkGraphDecodeErrorZ_err(e_conv); return (long)ret_conv; } void __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_free(uint32_t _res) { - LDKCResult_NetworkGraphDecodeErrorZ _res_conv = *(LDKCResult_NetworkGraphDecodeErrorZ*)_res; + if ((_res & 1) != 0) return; + LDKCResult_NetworkGraphDecodeErrorZ _res_conv = *(LDKCResult_NetworkGraphDecodeErrorZ*)(((uint64_t)_res) & ~1); FREE((void*)_res); CResult_NetworkGraphDecodeErrorZ_free(_res_conv); } void __attribute__((visibility("default"))) TS_Event_free(uint32_t this_ptr) { - LDKEvent this_ptr_conv = *(LDKEvent*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKEvent this_ptr_conv = *(LDKEvent*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Event_free(this_ptr_conv); } @@ -6311,7 +6269,8 @@ int8_tArray __attribute__((visibility("default"))) TS_Event_write(uint32_t obj) } void __attribute__((visibility("default"))) TS_MessageSendEvent_free(uint32_t this_ptr) { - LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); MessageSendEvent_free(this_ptr_conv); } @@ -6325,19 +6284,22 @@ uint32_t __attribute__((visibility("default"))) TS_MessageSendEvent_clone(uint3 } void __attribute__((visibility("default"))) TS_MessageSendEventsProvider_free(uint32_t this_ptr) { - LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); MessageSendEventsProvider_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_EventsProvider_free(uint32_t this_ptr) { - LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); EventsProvider_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_APIError_free(uint32_t this_ptr) { - LDKAPIError this_ptr_conv = *(LDKAPIError*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKAPIError this_ptr_conv = *(LDKAPIError*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); APIError_free(this_ptr_conv); } @@ -6351,7 +6313,7 @@ uint32_t __attribute__((visibility("default"))) TS_APIError_clone(uint32_t orig } uint32_t __attribute__((visibility("default"))) TS_Level_clone(uint32_t orig) { - LDKLevel* orig_conv = (LDKLevel*)orig; + LDKLevel* orig_conv = (LDKLevel*)(orig & ~1); uint32_t ret_conv = LDKLevel_to_js(Level_clone(orig_conv)); return ret_conv; } @@ -6362,7 +6324,8 @@ uint32_t __attribute__((visibility("default"))) TS_Level_max() { } void __attribute__((visibility("default"))) TS_Logger_free(uint32_t this_ptr) { - LDKLogger this_ptr_conv = *(LDKLogger*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKLogger this_ptr_conv = *(LDKLogger*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Logger_free(this_ptr_conv); } @@ -6803,8 +6766,7 @@ void __attribute__((visibility("default"))) TS_UserConfig_set_own_channel_confi LDKChannelHandshakeConfig val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelHandshakeConfig_clone(&val_conv); + val_conv = ChannelHandshakeConfig_clone(&val_conv); UserConfig_set_own_channel_config(&this_ptr_conv, val_conv); } @@ -6829,8 +6791,7 @@ void __attribute__((visibility("default"))) TS_UserConfig_set_peer_channel_conf LDKChannelHandshakeLimits val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelHandshakeLimits_clone(&val_conv); + val_conv = ChannelHandshakeLimits_clone(&val_conv); UserConfig_set_peer_channel_config_limits(&this_ptr_conv, val_conv); } @@ -6855,8 +6816,7 @@ void __attribute__((visibility("default"))) TS_UserConfig_set_channel_options(u LDKChannelConfig val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelConfig_clone(&val_conv); + val_conv = ChannelConfig_clone(&val_conv); UserConfig_set_channel_options(&this_ptr_conv, val_conv); } @@ -6864,18 +6824,15 @@ uint32_t __attribute__((visibility("default"))) TS_UserConfig_new(uint32_t own_ LDKChannelHandshakeConfig own_channel_config_arg_conv; own_channel_config_arg_conv.inner = (void*)(own_channel_config_arg & (~1)); own_channel_config_arg_conv.is_owned = (own_channel_config_arg & 1) || (own_channel_config_arg == 0); - if (own_channel_config_arg_conv.inner != NULL) - own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv); + own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv); LDKChannelHandshakeLimits peer_channel_config_limits_arg_conv; peer_channel_config_limits_arg_conv.inner = (void*)(peer_channel_config_limits_arg & (~1)); peer_channel_config_limits_arg_conv.is_owned = (peer_channel_config_limits_arg & 1) || (peer_channel_config_limits_arg == 0); - if (peer_channel_config_limits_arg_conv.inner != NULL) - peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv); + peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv); LDKChannelConfig channel_options_arg_conv; channel_options_arg_conv.inner = (void*)(channel_options_arg & (~1)); channel_options_arg_conv.is_owned = (channel_options_arg & 1) || (channel_options_arg == 0); - if (channel_options_arg_conv.inner != NULL) - channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv); + channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv); LDKUserConfig ret_var = UserConfig_new(own_channel_config_arg_conv, peer_channel_config_limits_arg_conv, channel_options_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -6898,43 +6855,48 @@ uint32_t __attribute__((visibility("default"))) TS_UserConfig_default() { } uint32_t __attribute__((visibility("default"))) TS_AccessError_clone(uint32_t orig) { - LDKAccessError* orig_conv = (LDKAccessError*)orig; + LDKAccessError* orig_conv = (LDKAccessError*)(orig & ~1); uint32_t ret_conv = LDKAccessError_to_js(AccessError_clone(orig_conv)); return ret_conv; } void __attribute__((visibility("default"))) TS_Access_free(uint32_t this_ptr) { - LDKAccess this_ptr_conv = *(LDKAccess*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKAccess this_ptr_conv = *(LDKAccess*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Access_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_Watch_free(uint32_t this_ptr) { - LDKWatch this_ptr_conv = *(LDKWatch*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKWatch this_ptr_conv = *(LDKWatch*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Watch_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_Filter_free(uint32_t this_ptr) { - LDKFilter this_ptr_conv = *(LDKFilter*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKFilter this_ptr_conv = *(LDKFilter*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Filter_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_BroadcasterInterface_free(uint32_t this_ptr) { - LDKBroadcasterInterface this_ptr_conv = *(LDKBroadcasterInterface*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKBroadcasterInterface this_ptr_conv = *(LDKBroadcasterInterface*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); BroadcasterInterface_free(this_ptr_conv); } uint32_t __attribute__((visibility("default"))) TS_ConfirmationTarget_clone(uint32_t orig) { - LDKConfirmationTarget* orig_conv = (LDKConfirmationTarget*)orig; + LDKConfirmationTarget* orig_conv = (LDKConfirmationTarget*)(orig & ~1); uint32_t ret_conv = LDKConfirmationTarget_to_js(ConfirmationTarget_clone(orig_conv)); return ret_conv; } void __attribute__((visibility("default"))) TS_FeeEstimator_free(uint32_t this_ptr) { - LDKFeeEstimator this_ptr_conv = *(LDKFeeEstimator*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKFeeEstimator this_ptr_conv = *(LDKFeeEstimator*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); FeeEstimator_free(this_ptr_conv); } @@ -6963,7 +6925,7 @@ void __attribute__((visibility("default"))) TS_ChainMonitor_block_connected(uin uint32_t* txdata_vals = (uint32_t*)(txdata + 4); for (size_t e = 0; e < txdata_constr.datalen; e++) { uint32_t arr_conv_30 = txdata_vals[e]; - LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_30; + LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_30) & ~1); FREE((void*)arr_conv_30); txdata_constr.data[e] = arr_conv_30_conv; } @@ -6983,10 +6945,10 @@ void __attribute__((visibility("default"))) TS_ChainMonitor_block_disconnected( uint32_t __attribute__((visibility("default"))) TS_ChainMonitor_new(uint32_t chain_source, uint32_t broadcaster, uint32_t logger, uint32_t feeest, uint32_t persister) { LDKFilter* chain_source_conv = (LDKFilter*)chain_source; - LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)broadcaster; - LDKLogger logger_conv = *(LDKLogger*)logger; - LDKFeeEstimator feeest_conv = *(LDKFeeEstimator*)feeest; - LDKPersist persister_conv = *(LDKPersist*)persister; + LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)broadcaster) & ~1); + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); + LDKFeeEstimator feeest_conv = *(LDKFeeEstimator*)(((uint64_t)feeest) & ~1); + LDKPersist persister_conv = *(LDKPersist*)(((uint64_t)persister) & ~1); LDKChainMonitor ret_var = ChainMonitor_new(chain_source_conv, broadcaster_conv, logger_conv, feeest_conv, persister_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -7072,7 +7034,7 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_read(in } uint32_t __attribute__((visibility("default"))) TS_ChannelMonitorUpdateErr_clone(uint32_t orig) { - LDKChannelMonitorUpdateErr* orig_conv = (LDKChannelMonitorUpdateErr*)orig; + LDKChannelMonitorUpdateErr* orig_conv = (LDKChannelMonitorUpdateErr*)(orig & ~1); uint32_t ret_conv = LDKChannelMonitorUpdateErr_to_js(ChannelMonitorUpdateErr_clone(orig_conv)); return ret_conv; } @@ -7084,6 +7046,20 @@ void __attribute__((visibility("default"))) TS_MonitorUpdateError_free(uint32_t MonitorUpdateError_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_MonitorUpdateError_clone(uint32_t orig) { + LDKMonitorUpdateError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + void __attribute__((visibility("default"))) TS_MonitorEvent_free(uint32_t this_ptr) { LDKMonitorEvent this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -7158,6 +7134,20 @@ void __attribute__((visibility("default"))) TS_ChannelMonitor_free(uint32_t thi ChannelMonitor_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_ChannelMonitor_clone(uint32_t orig) { + LDKChannelMonitor orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKChannelMonitor ret_var = ChannelMonitor_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + int8_tArray __attribute__((visibility("default"))) TS_ChannelMonitor_write(uint32_t obj) { LDKChannelMonitor obj_conv; obj_conv.inner = (void*)(obj & (~1)); @@ -7198,8 +7188,6 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelMonitor_get_funding_t this_arg_conv.is_owned = false; LDKC2Tuple_OutPointScriptZ* ret_ref = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ"); *ret_ref = ChannelMonitor_get_funding_txo(&this_arg_conv); - ret_ref->a = OutPoint_clone(&ret_ref->a); - ret_ref->b = CVec_u8Z_clone(&ret_ref->b); return (long)ret_ref; } @@ -7277,21 +7265,19 @@ uint32_tArray __attribute__((visibility("default"))) TS_ChannelMonitor_block_co uint32_t* txdata_vals = (uint32_t*)(txdata + 4); for (size_t e = 0; e < txdata_constr.datalen; e++) { uint32_t arr_conv_30 = txdata_vals[e]; - LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_30; + LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_30) & ~1); FREE((void*)arr_conv_30); txdata_constr.data[e] = arr_conv_30_conv; } - LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)broadcaster; - LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)fee_estimator; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)broadcaster) & ~1); + LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(((uint64_t)fee_estimator) & ~1); + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_block_connected(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_conv); uint32_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes"); uint32_t *ret_arr_ptr = (uint32_t*)(ret_arr + 4); for (size_t x = 0; x < ret_var.datalen; x++) { LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arr_conv_49_ref = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ"); *arr_conv_49_ref = ret_var.data[x]; - arr_conv_49_ref->a = ThirtyTwoBytes_clone(&arr_conv_49_ref->a); - arr_conv_49_ref->b = CVec_C2Tuple_u32TxOutZZ_clone(&arr_conv_49_ref->b); ret_arr_ptr[x] = (long)arr_conv_49_ref; } FREE(ret_var.data); @@ -7306,14 +7292,15 @@ void __attribute__((visibility("default"))) TS_ChannelMonitor_block_disconnecte CHECK(*((uint32_t*)header) == 80); memcpy(header_arr, (uint8_t*)(header + 4), 80); unsigned char (*header_ref)[80] = &header_arr; - LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)broadcaster; - LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)fee_estimator; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)broadcaster) & ~1); + LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(((uint64_t)fee_estimator) & ~1); + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); ChannelMonitor_block_disconnected(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_conv); } void __attribute__((visibility("default"))) TS_Persist_free(uint32_t this_ptr) { - LDKPersist this_ptr_conv = *(LDKPersist*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKPersist this_ptr_conv = *(LDKPersist*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); Persist_free(this_ptr_conv); } @@ -7432,7 +7419,8 @@ uint32_t __attribute__((visibility("default"))) TS_OutPoint_read(int8_tArray se } void __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_free(uint32_t this_ptr) { - LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); SpendableOutputDescriptor_free(this_ptr_conv); } @@ -7471,13 +7459,15 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelKeys_clone(uint32_t o } void __attribute__((visibility("default"))) TS_ChannelKeys_free(uint32_t this_ptr) { - LDKChannelKeys this_ptr_conv = *(LDKChannelKeys*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKChannelKeys this_ptr_conv = *(LDKChannelKeys*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); ChannelKeys_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_KeysInterface_free(uint32_t this_ptr) { - LDKKeysInterface this_ptr_conv = *(LDKKeysInterface*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKKeysInterface this_ptr_conv = *(LDKKeysInterface*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); KeysInterface_free(this_ptr_conv); } @@ -7636,7 +7626,7 @@ uint32_t __attribute__((visibility("default"))) TS_InMemoryChannelKeys_new(int8 LDKThirtyTwoBytes commitment_seed_ref; CHECK(*((uint32_t*)commitment_seed) == 32); memcpy(commitment_seed_ref.data, (uint8_t*)(commitment_seed + 4), 32); - LDKC2Tuple_u64u64Z key_derivation_params_conv = *(LDKC2Tuple_u64u64Z*)key_derivation_params; + LDKC2Tuple_u64u64Z key_derivation_params_conv = *(LDKC2Tuple_u64u64Z*)(((uint64_t)key_derivation_params) & ~1); FREE((void*)key_derivation_params); LDKInMemoryChannelKeys ret_var = InMemoryChannelKeys_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, key_derivation_params_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -7876,7 +7866,7 @@ void __attribute__((visibility("default"))) TS_ChannelDetails_set_counterparty_ LDKInitFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKInitFeatures ChannelDetails_set_counterparty_features(&this_ptr_conv, val_conv); } @@ -7962,18 +7952,31 @@ void __attribute__((visibility("default"))) TS_PaymentSendFailure_free(uint32_t PaymentSendFailure_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_PaymentSendFailure_clone(uint32_t orig) { + LDKPaymentSendFailure orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKPaymentSendFailure ret_var = PaymentSendFailure_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + uint32_t __attribute__((visibility("default"))) TS_ChannelManager_new(uint32_t network, uint32_t fee_est, uint32_t chain_monitor, uint32_t tx_broadcaster, uint32_t logger, uint32_t keys_manager, uint32_t config, intptr_t current_blockchain_height) { LDKNetwork network_conv = LDKNetwork_from_js(network); - LDKFeeEstimator fee_est_conv = *(LDKFeeEstimator*)fee_est; - LDKWatch chain_monitor_conv = *(LDKWatch*)chain_monitor; - LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)tx_broadcaster; - LDKLogger logger_conv = *(LDKLogger*)logger; - LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)keys_manager; + LDKFeeEstimator fee_est_conv = *(LDKFeeEstimator*)(((uint64_t)fee_est) & ~1); + LDKWatch chain_monitor_conv = *(LDKWatch*)(((uint64_t)chain_monitor) & ~1); + LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)tx_broadcaster) & ~1); + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); + LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(((uint64_t)keys_manager) & ~1); LDKUserConfig config_conv; config_conv.inner = (void*)(config & (~1)); config_conv.is_owned = (config & 1) || (config == 0); - if (config_conv.inner != NULL) - config_conv = UserConfig_clone(&config_conv); + config_conv = UserConfig_clone(&config_conv); LDKChannelManager ret_var = ChannelManager_new(network_conv, fee_est_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, keys_manager_conv, config_conv, current_blockchain_height); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -7994,8 +7997,7 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelManager_create_channe LDKUserConfig override_config_conv; override_config_conv.inner = (void*)(override_config & (~1)); override_config_conv.is_owned = (override_config & 1) || (override_config == 0); - if (override_config_conv.inner != NULL) - override_config_conv = UserConfig_clone(&override_config_conv); + override_config_conv = UserConfig_clone(&override_config_conv); LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_id, override_config_conv); return (long)ret_conv; @@ -8056,7 +8058,7 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelManager_close_channel return (long)ret_conv; } -void __attribute__((visibility("default"))) TS_ChannelManager_force_close_channel(uint32_t this_arg, int8_tArray channel_id) { +uint32_t __attribute__((visibility("default"))) TS_ChannelManager_force_close_channel(uint32_t this_arg, int8_tArray channel_id) { LDKChannelManager this_arg_conv; this_arg_conv.inner = (void*)(this_arg & (~1)); this_arg_conv.is_owned = false; @@ -8064,7 +8066,9 @@ void __attribute__((visibility("default"))) TS_ChannelManager_force_close_chann CHECK(*((uint32_t*)channel_id) == 32); memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32); unsigned char (*channel_id_ref)[32] = &channel_id_arr; - ChannelManager_force_close_channel(&this_arg_conv, channel_id_ref); + LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ"); + *ret_conv = ChannelManager_force_close_channel(&this_arg_conv, channel_id_ref); + return (long)ret_conv; } void __attribute__((visibility("default"))) TS_ChannelManager_force_close_all_channels(uint32_t this_arg) { @@ -8103,8 +8107,7 @@ void __attribute__((visibility("default"))) TS_ChannelManager_funding_transacti LDKOutPoint funding_txo_conv; funding_txo_conv.inner = (void*)(funding_txo & (~1)); funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0); - if (funding_txo_conv.inner != NULL) - funding_txo_conv = OutPoint_clone(&funding_txo_conv); + funding_txo_conv = OutPoint_clone(&funding_txo_conv); ChannelManager_funding_transaction_generated(&this_arg_conv, temporary_channel_id_ref, funding_txo_conv); } @@ -8127,7 +8130,7 @@ void __attribute__((visibility("default"))) TS_ChannelManager_broadcast_node_an uint32_t* addresses_vals = (uint32_t*)(addresses + 4); for (size_t m = 0; m < addresses_constr.datalen; m++) { uint32_t arr_conv_12 = addresses_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); addresses_constr.data[m] = arr_conv_12_conv; } @@ -8231,7 +8234,7 @@ void __attribute__((visibility("default"))) TS_ChannelManager_block_connected(u uint32_t* txdata_vals = (uint32_t*)(txdata + 4); for (size_t e = 0; e < txdata_constr.datalen; e++) { uint32_t arr_conv_30 = txdata_vals[e]; - LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)arr_conv_30; + LDKC2Tuple_usizeTransactionZ arr_conv_30_conv = *(LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_conv_30) & ~1); FREE((void*)arr_conv_30); txdata_constr.data[e] = arr_conv_30_conv; } @@ -8288,7 +8291,7 @@ void __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_keys_ LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKKeysInterface val_conv = *(LDKKeysInterface*)val; + LDKKeysInterface val_conv = *(LDKKeysInterface*)(((uint64_t)val) & ~1); ChannelManagerReadArgs_set_keys_manager(&this_ptr_conv, val_conv); } @@ -8304,7 +8307,7 @@ void __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_fee_e LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKFeeEstimator val_conv = *(LDKFeeEstimator*)val; + LDKFeeEstimator val_conv = *(LDKFeeEstimator*)(((uint64_t)val) & ~1); ChannelManagerReadArgs_set_fee_estimator(&this_ptr_conv, val_conv); } @@ -8320,7 +8323,7 @@ void __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_chain LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKWatch val_conv = *(LDKWatch*)val; + LDKWatch val_conv = *(LDKWatch*)(((uint64_t)val) & ~1); ChannelManagerReadArgs_set_chain_monitor(&this_ptr_conv, val_conv); } @@ -8336,7 +8339,7 @@ void __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_tx_br LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)val; + LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)(((uint64_t)val) & ~1); ChannelManagerReadArgs_set_tx_broadcaster(&this_ptr_conv, val_conv); } @@ -8352,7 +8355,7 @@ void __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_logge LDKChannelManagerReadArgs this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKLogger val_conv = *(LDKLogger*)val; + LDKLogger val_conv = *(LDKLogger*)(((uint64_t)val) & ~1); ChannelManagerReadArgs_set_logger(&this_ptr_conv, val_conv); } @@ -8377,22 +8380,20 @@ void __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_defau LDKUserConfig val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UserConfig_clone(&val_conv); + val_conv = UserConfig_clone(&val_conv); ChannelManagerReadArgs_set_default_config(&this_ptr_conv, val_conv); } uint32_t __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_new(uint32_t keys_manager, uint32_t fee_estimator, uint32_t chain_monitor, uint32_t tx_broadcaster, uint32_t logger, uint32_t default_config, uint32_tArray channel_monitors) { - LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)keys_manager; - LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)fee_estimator; - LDKWatch chain_monitor_conv = *(LDKWatch*)chain_monitor; - LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)tx_broadcaster; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(((uint64_t)keys_manager) & ~1); + LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(((uint64_t)fee_estimator) & ~1); + LDKWatch chain_monitor_conv = *(LDKWatch*)(((uint64_t)chain_monitor) & ~1); + LDKBroadcasterInterface tx_broadcaster_conv = *(LDKBroadcasterInterface*)(((uint64_t)tx_broadcaster) & ~1); + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); LDKUserConfig default_config_conv; default_config_conv.inner = (void*)(default_config & (~1)); default_config_conv.is_owned = (default_config & 1) || (default_config == 0); - if (default_config_conv.inner != NULL) - default_config_conv = UserConfig_clone(&default_config_conv); + default_config_conv = UserConfig_clone(&default_config_conv); LDKCVec_ChannelMonitorZ channel_monitors_constr; channel_monitors_constr.datalen = *((uint32_t*)channel_monitors); if (channel_monitors_constr.datalen > 0) @@ -8405,7 +8406,6 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_new(u LDKChannelMonitor arr_conv_16_conv; arr_conv_16_conv.inner = (void*)(arr_conv_16 & (~1)); arr_conv_16_conv.is_owned = (arr_conv_16 & 1) || (arr_conv_16 == 0); - // Warning: we may need a move here but can't clone! channel_monitors_constr.data[q] = arr_conv_16_conv; } LDKChannelManagerReadArgs ret_var = ChannelManagerReadArgs_new(keys_manager_conv, fee_estimator_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, default_config_conv, channel_monitors_constr); @@ -8425,7 +8425,7 @@ uint32_t __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana LDKChannelManagerReadArgs arg_conv; arg_conv.inner = (void*)(arg & (~1)); arg_conv.is_owned = (arg & 1) || (arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelManagerReadArgs LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ"); *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv); return (long)ret_conv; @@ -8438,6 +8438,20 @@ void __attribute__((visibility("default"))) TS_DecodeError_free(uint32_t this_p DecodeError_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_DecodeError_clone(uint32_t orig) { + LDKDecodeError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKDecodeError ret_var = DecodeError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + void __attribute__((visibility("default"))) TS_Init_free(uint32_t this_ptr) { LDKInit this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -10521,7 +10535,8 @@ uint32_t __attribute__((visibility("default"))) TS_AnnouncementSignatures_new(i } void __attribute__((visibility("default"))) TS_NetAddress_free(uint32_t this_ptr) { - LDKNetAddress this_ptr_conv = *(LDKNetAddress*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKNetAddress this_ptr_conv = *(LDKNetAddress*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); NetAddress_free(this_ptr_conv); } @@ -10594,7 +10609,7 @@ void __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_fea LDKNodeFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures UnsignedNodeAnnouncement_set_features(&this_ptr_conv, val_conv); } @@ -10683,7 +10698,7 @@ void __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_add uint32_t* val_vals = (uint32_t*)(val + 4); for (size_t m = 0; m < val_constr.datalen; m++) { uint32_t arr_conv_12 = val_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); val_constr.data[m] = arr_conv_12_conv; } @@ -10751,8 +10766,7 @@ void __attribute__((visibility("default"))) TS_NodeAnnouncement_set_contents(ui LDKUnsignedNodeAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UnsignedNodeAnnouncement_clone(&val_conv); + val_conv = UnsignedNodeAnnouncement_clone(&val_conv); NodeAnnouncement_set_contents(&this_ptr_conv, val_conv); } @@ -10763,8 +10777,7 @@ uint32_t __attribute__((visibility("default"))) TS_NodeAnnouncement_new(int8_tA LDKUnsignedNodeAnnouncement contents_arg_conv; contents_arg_conv.inner = (void*)(contents_arg & (~1)); contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0); - if (contents_arg_conv.inner != NULL) - contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv); + contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv); LDKNodeAnnouncement ret_var = NodeAnnouncement_new(signature_arg_ref, contents_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -10817,7 +10830,7 @@ void __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_ LDKChannelFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures UnsignedChannelAnnouncement_set_features(&this_ptr_conv, val_conv); } @@ -11049,8 +11062,7 @@ void __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_contents LDKUnsignedChannelAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UnsignedChannelAnnouncement_clone(&val_conv); + val_conv = UnsignedChannelAnnouncement_clone(&val_conv); ChannelAnnouncement_set_contents(&this_ptr_conv, val_conv); } @@ -11070,8 +11082,7 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelAnnouncement_new(int8 LDKUnsignedChannelAnnouncement contents_arg_conv; contents_arg_conv.inner = (void*)(contents_arg & (~1)); contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0); - if (contents_arg_conv.inner != NULL) - contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv); + contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv); LDKChannelAnnouncement ret_var = ChannelAnnouncement_new(node_signature_1_arg_ref, node_signature_2_arg_ref, bitcoin_signature_1_arg_ref, bitcoin_signature_2_arg_ref, contents_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -11288,8 +11299,7 @@ void __attribute__((visibility("default"))) TS_ChannelUpdate_set_contents(uint3 LDKUnsignedChannelUpdate val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UnsignedChannelUpdate_clone(&val_conv); + val_conv = UnsignedChannelUpdate_clone(&val_conv); ChannelUpdate_set_contents(&this_ptr_conv, val_conv); } @@ -11300,8 +11310,7 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelUpdate_new(int8_tArra LDKUnsignedChannelUpdate contents_arg_conv; contents_arg_conv.inner = (void*)(contents_arg & (~1)); contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0); - if (contents_arg_conv.inner != NULL) - contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv); + contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv); LDKChannelUpdate ret_var = ChannelUpdate_new(signature_arg_ref, contents_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -11761,7 +11770,8 @@ uint32_t __attribute__((visibility("default"))) TS_GossipTimestampFilter_new(in } void __attribute__((visibility("default"))) TS_ErrorAction_free(uint32_t this_ptr) { - LDKErrorAction this_ptr_conv = *(LDKErrorAction*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKErrorAction this_ptr_conv = *(LDKErrorAction*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); ErrorAction_free(this_ptr_conv); } @@ -11781,6 +11791,20 @@ void __attribute__((visibility("default"))) TS_LightningError_free(uint32_t thi LightningError_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_LightningError_clone(uint32_t orig) { + LDKLightningError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKLightningError ret_var = LightningError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + jstring __attribute__((visibility("default"))) TS_LightningError_get_err(uint32_t this_ptr) { LDKLightningError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -11815,7 +11839,7 @@ void __attribute__((visibility("default"))) TS_LightningError_set_action(uint32 LDKLightningError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKErrorAction val_conv = *(LDKErrorAction*)val; + LDKErrorAction val_conv = *(LDKErrorAction*)(((uint64_t)val) & ~1); FREE((void*)val); LightningError_set_action(&this_ptr_conv, val_conv); } @@ -11825,7 +11849,7 @@ uint32_t __attribute__((visibility("default"))) TS_LightningError_new(int8_tArr err_arg_ref.datalen = *((uint32_t*)err_arg); err_arg_ref.data = MALLOC(err_arg_ref.datalen, "LDKCVec_u8Z Bytes"); memcpy(err_arg_ref.data, (uint8_t*)(err_arg + 4), err_arg_ref.datalen); - LDKErrorAction action_arg_conv = *(LDKErrorAction*)action_arg; + LDKErrorAction action_arg_conv = *(LDKErrorAction*)(((uint64_t)action_arg) & ~1); FREE((void*)action_arg); LDKLightningError ret_var = LightningError_new(err_arg_ref, action_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -11874,8 +11898,7 @@ void __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_add_ LDKUpdateAddHTLC arr_conv_15_conv; arr_conv_15_conv.inner = (void*)(arr_conv_15 & (~1)); arr_conv_15_conv.is_owned = (arr_conv_15 & 1) || (arr_conv_15 == 0); - if (arr_conv_15_conv.inner != NULL) - arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); + arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); val_constr.data[p] = arr_conv_15_conv; } CommitmentUpdate_set_update_add_htlcs(&this_ptr_conv, val_constr); @@ -11897,8 +11920,7 @@ void __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fulf LDKUpdateFulfillHTLC arr_conv_19_conv; arr_conv_19_conv.inner = (void*)(arr_conv_19 & (~1)); arr_conv_19_conv.is_owned = (arr_conv_19 & 1) || (arr_conv_19 == 0); - if (arr_conv_19_conv.inner != NULL) - arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); + arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); val_constr.data[t] = arr_conv_19_conv; } CommitmentUpdate_set_update_fulfill_htlcs(&this_ptr_conv, val_constr); @@ -11920,8 +11942,7 @@ void __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail LDKUpdateFailHTLC arr_conv_16_conv; arr_conv_16_conv.inner = (void*)(arr_conv_16 & (~1)); arr_conv_16_conv.is_owned = (arr_conv_16 & 1) || (arr_conv_16 == 0); - if (arr_conv_16_conv.inner != NULL) - arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); + arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); val_constr.data[q] = arr_conv_16_conv; } CommitmentUpdate_set_update_fail_htlcs(&this_ptr_conv, val_constr); @@ -11943,8 +11964,7 @@ void __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail LDKUpdateFailMalformedHTLC arr_conv_25_conv; arr_conv_25_conv.inner = (void*)(arr_conv_25 & (~1)); arr_conv_25_conv.is_owned = (arr_conv_25 & 1) || (arr_conv_25 == 0); - if (arr_conv_25_conv.inner != NULL) - arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); + arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); val_constr.data[z] = arr_conv_25_conv; } CommitmentUpdate_set_update_fail_malformed_htlcs(&this_ptr_conv, val_constr); @@ -11971,8 +11991,7 @@ void __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fee( LDKUpdateFee val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = UpdateFee_clone(&val_conv); + val_conv = UpdateFee_clone(&val_conv); CommitmentUpdate_set_update_fee(&this_ptr_conv, val_conv); } @@ -11997,8 +12016,7 @@ void __attribute__((visibility("default"))) TS_CommitmentUpdate_set_commitment_ LDKCommitmentSigned val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = CommitmentSigned_clone(&val_conv); + val_conv = CommitmentSigned_clone(&val_conv); CommitmentUpdate_set_commitment_signed(&this_ptr_conv, val_conv); } @@ -12015,8 +12033,7 @@ uint32_t __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_ LDKUpdateAddHTLC arr_conv_15_conv; arr_conv_15_conv.inner = (void*)(arr_conv_15 & (~1)); arr_conv_15_conv.is_owned = (arr_conv_15 & 1) || (arr_conv_15 == 0); - if (arr_conv_15_conv.inner != NULL) - arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); + arr_conv_15_conv = UpdateAddHTLC_clone(&arr_conv_15_conv); update_add_htlcs_arg_constr.data[p] = arr_conv_15_conv; } LDKCVec_UpdateFulfillHTLCZ update_fulfill_htlcs_arg_constr; @@ -12031,8 +12048,7 @@ uint32_t __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_ LDKUpdateFulfillHTLC arr_conv_19_conv; arr_conv_19_conv.inner = (void*)(arr_conv_19 & (~1)); arr_conv_19_conv.is_owned = (arr_conv_19 & 1) || (arr_conv_19 == 0); - if (arr_conv_19_conv.inner != NULL) - arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); + arr_conv_19_conv = UpdateFulfillHTLC_clone(&arr_conv_19_conv); update_fulfill_htlcs_arg_constr.data[t] = arr_conv_19_conv; } LDKCVec_UpdateFailHTLCZ update_fail_htlcs_arg_constr; @@ -12047,8 +12063,7 @@ uint32_t __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_ LDKUpdateFailHTLC arr_conv_16_conv; arr_conv_16_conv.inner = (void*)(arr_conv_16 & (~1)); arr_conv_16_conv.is_owned = (arr_conv_16 & 1) || (arr_conv_16 == 0); - if (arr_conv_16_conv.inner != NULL) - arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); + arr_conv_16_conv = UpdateFailHTLC_clone(&arr_conv_16_conv); update_fail_htlcs_arg_constr.data[q] = arr_conv_16_conv; } LDKCVec_UpdateFailMalformedHTLCZ update_fail_malformed_htlcs_arg_constr; @@ -12063,20 +12078,17 @@ uint32_t __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_ LDKUpdateFailMalformedHTLC arr_conv_25_conv; arr_conv_25_conv.inner = (void*)(arr_conv_25 & (~1)); arr_conv_25_conv.is_owned = (arr_conv_25 & 1) || (arr_conv_25 == 0); - if (arr_conv_25_conv.inner != NULL) - arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); + arr_conv_25_conv = UpdateFailMalformedHTLC_clone(&arr_conv_25_conv); update_fail_malformed_htlcs_arg_constr.data[z] = arr_conv_25_conv; } LDKUpdateFee update_fee_arg_conv; update_fee_arg_conv.inner = (void*)(update_fee_arg & (~1)); update_fee_arg_conv.is_owned = (update_fee_arg & 1) || (update_fee_arg == 0); - if (update_fee_arg_conv.inner != NULL) - update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv); + update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv); LDKCommitmentSigned commitment_signed_arg_conv; commitment_signed_arg_conv.inner = (void*)(commitment_signed_arg & (~1)); commitment_signed_arg_conv.is_owned = (commitment_signed_arg & 1) || (commitment_signed_arg == 0); - if (commitment_signed_arg_conv.inner != NULL) - commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv); + commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv); LDKCommitmentUpdate ret_var = CommitmentUpdate_new(update_add_htlcs_arg_constr, update_fulfill_htlcs_arg_constr, update_fail_htlcs_arg_constr, update_fail_malformed_htlcs_arg_constr, update_fee_arg_conv, commitment_signed_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -12088,7 +12100,8 @@ uint32_t __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_ } void __attribute__((visibility("default"))) TS_HTLCFailChannelUpdate_free(uint32_t this_ptr) { - LDKHTLCFailChannelUpdate this_ptr_conv = *(LDKHTLCFailChannelUpdate*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKHTLCFailChannelUpdate this_ptr_conv = *(LDKHTLCFailChannelUpdate*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); HTLCFailChannelUpdate_free(this_ptr_conv); } @@ -12102,13 +12115,15 @@ uint32_t __attribute__((visibility("default"))) TS_HTLCFailChannelUpdate_clone( } void __attribute__((visibility("default"))) TS_ChannelMessageHandler_free(uint32_t this_ptr) { - LDKChannelMessageHandler this_ptr_conv = *(LDKChannelMessageHandler*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKChannelMessageHandler this_ptr_conv = *(LDKChannelMessageHandler*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); ChannelMessageHandler_free(this_ptr_conv); } void __attribute__((visibility("default"))) TS_RoutingMessageHandler_free(uint32_t this_ptr) { - LDKRoutingMessageHandler this_ptr_conv = *(LDKRoutingMessageHandler*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKRoutingMessageHandler this_ptr_conv = *(LDKRoutingMessageHandler*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); RoutingMessageHandler_free(this_ptr_conv); } @@ -12842,7 +12857,7 @@ void __attribute__((visibility("default"))) TS_MessageHandler_set_chan_handler( LDKMessageHandler this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)val; + LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)(((uint64_t)val) & ~1); MessageHandler_set_chan_handler(&this_ptr_conv, val_conv); } @@ -12858,13 +12873,13 @@ void __attribute__((visibility("default"))) TS_MessageHandler_set_route_handler LDKMessageHandler this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = false; - LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)val; + LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)(((uint64_t)val) & ~1); MessageHandler_set_route_handler(&this_ptr_conv, val_conv); } uint32_t __attribute__((visibility("default"))) TS_MessageHandler_new(uint32_t chan_handler_arg, uint32_t route_handler_arg) { - LDKChannelMessageHandler chan_handler_arg_conv = *(LDKChannelMessageHandler*)chan_handler_arg; - LDKRoutingMessageHandler route_handler_arg_conv = *(LDKRoutingMessageHandler*)route_handler_arg; + LDKChannelMessageHandler chan_handler_arg_conv = *(LDKChannelMessageHandler*)(((uint64_t)chan_handler_arg) & ~1); + LDKRoutingMessageHandler route_handler_arg_conv = *(LDKRoutingMessageHandler*)(((uint64_t)route_handler_arg) & ~1); LDKMessageHandler ret_var = MessageHandler_new(chan_handler_arg_conv, route_handler_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -12883,7 +12898,8 @@ uint32_t __attribute__((visibility("default"))) TS_SocketDescriptor_clone(uint3 } void __attribute__((visibility("default"))) TS_SocketDescriptor_free(uint32_t this_ptr) { - LDKSocketDescriptor this_ptr_conv = *(LDKSocketDescriptor*)this_ptr; + if ((this_ptr & 1) != 0) return; + LDKSocketDescriptor this_ptr_conv = *(LDKSocketDescriptor*)(((uint64_t)this_ptr) & ~1); FREE((void*)this_ptr); SocketDescriptor_free(this_ptr_conv); } @@ -12895,6 +12911,20 @@ void __attribute__((visibility("default"))) TS_PeerHandleError_free(uint32_t th PeerHandleError_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_PeerHandleError_clone(uint32_t orig) { + LDKPeerHandleError orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKPeerHandleError ret_var = PeerHandleError_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + jboolean __attribute__((visibility("default"))) TS_PeerHandleError_get_no_connection_possible(uint32_t this_ptr) { LDKPeerHandleError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -12932,7 +12962,7 @@ uint32_t __attribute__((visibility("default"))) TS_PeerManager_new(uint32_t mes LDKMessageHandler message_handler_conv; message_handler_conv.inner = (void*)(message_handler & (~1)); message_handler_conv.is_owned = (message_handler & 1) || (message_handler == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKMessageHandler LDKSecretKey our_node_secret_ref; CHECK(*((uint32_t*)our_node_secret) == 32); memcpy(our_node_secret_ref.bytes, (uint8_t*)(our_node_secret + 4), 32); @@ -12940,7 +12970,7 @@ uint32_t __attribute__((visibility("default"))) TS_PeerManager_new(uint32_t mes CHECK(*((uint32_t*)ephemeral_random_data) == 32); memcpy(ephemeral_random_data_arr, (uint8_t*)(ephemeral_random_data + 4), 32); unsigned char (*ephemeral_random_data_ref)[32] = &ephemeral_random_data_arr; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); LDKPeerManager ret_var = PeerManager_new(message_handler_conv, our_node_secret_ref, ephemeral_random_data_ref, logger_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -12974,7 +13004,7 @@ uint32_t __attribute__((visibility("default"))) TS_PeerManager_new_outbound_con LDKPublicKey their_node_id_ref; CHECK(*((uint32_t*)their_node_id) == 33); memcpy(their_node_id_ref.compressed_form, (uint8_t*)(their_node_id + 4), 33); - LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)descriptor; + LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(((uint64_t)descriptor) & ~1); LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ"); *ret_conv = PeerManager_new_outbound_connection(&this_arg_conv, their_node_id_ref, descriptor_conv); return (long)ret_conv; @@ -12984,7 +13014,7 @@ uint32_t __attribute__((visibility("default"))) TS_PeerManager_new_inbound_conn LDKPeerManager this_arg_conv; this_arg_conv.inner = (void*)(this_arg & (~1)); this_arg_conv.is_owned = false; - LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)descriptor; + LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(((uint64_t)descriptor) & ~1); LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ"); *ret_conv = PeerManager_new_inbound_connection(&this_arg_conv, descriptor_conv); return (long)ret_conv; @@ -13681,8 +13711,7 @@ void __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set LDKChannelPublicKeys val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelPublicKeys_clone(&val_conv); + val_conv = ChannelPublicKeys_clone(&val_conv); ChannelTransactionParameters_set_holder_pubkeys(&this_ptr_conv, val_conv); } @@ -13737,8 +13766,7 @@ void __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set LDKCounterpartyChannelTransactionParameters val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv); + val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv); ChannelTransactionParameters_set_counterparty_parameters(&this_ptr_conv, val_conv); } @@ -13763,8 +13791,7 @@ void __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set LDKOutPoint val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = OutPoint_clone(&val_conv); + val_conv = OutPoint_clone(&val_conv); ChannelTransactionParameters_set_funding_outpoint(&this_ptr_conv, val_conv); } @@ -13772,18 +13799,15 @@ uint32_t __attribute__((visibility("default"))) TS_ChannelTransactionParameters LDKChannelPublicKeys holder_pubkeys_arg_conv; holder_pubkeys_arg_conv.inner = (void*)(holder_pubkeys_arg & (~1)); holder_pubkeys_arg_conv.is_owned = (holder_pubkeys_arg & 1) || (holder_pubkeys_arg == 0); - if (holder_pubkeys_arg_conv.inner != NULL) - holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv); + holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv); LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg_conv; counterparty_parameters_arg_conv.inner = (void*)(counterparty_parameters_arg & (~1)); counterparty_parameters_arg_conv.is_owned = (counterparty_parameters_arg & 1) || (counterparty_parameters_arg == 0); - if (counterparty_parameters_arg_conv.inner != NULL) - counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv); + counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv); LDKOutPoint funding_outpoint_arg_conv; funding_outpoint_arg_conv.inner = (void*)(funding_outpoint_arg & (~1)); funding_outpoint_arg_conv.is_owned = (funding_outpoint_arg & 1) || (funding_outpoint_arg == 0); - if (funding_outpoint_arg_conv.inner != NULL) - funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv); + funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv); LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_new(holder_pubkeys_arg_conv, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg_conv, funding_outpoint_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -13836,8 +13860,7 @@ void __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa LDKChannelPublicKeys val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelPublicKeys_clone(&val_conv); + val_conv = ChannelPublicKeys_clone(&val_conv); CounterpartyChannelTransactionParameters_set_pubkeys(&this_ptr_conv, val_conv); } @@ -13860,8 +13883,7 @@ uint32_t __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti LDKChannelPublicKeys pubkeys_arg_conv; pubkeys_arg_conv.inner = (void*)(pubkeys_arg & (~1)); pubkeys_arg_conv.is_owned = (pubkeys_arg & 1) || (pubkeys_arg == 0); - if (pubkeys_arg_conv.inner != NULL) - pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv); + pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv); LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_new(pubkeys_arg_conv, selected_contest_delay_arg); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -14113,8 +14135,7 @@ uint32_t __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_ LDKCommitmentTransaction commitment_tx_conv; commitment_tx_conv.inner = (void*)(commitment_tx & (~1)); commitment_tx_conv.is_owned = (commitment_tx & 1) || (commitment_tx == 0); - if (commitment_tx_conv.inner != NULL) - commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv); + commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv); LDKSignature counterparty_sig_ref; CHECK(*((uint32_t*)counterparty_sig) == 64); memcpy(counterparty_sig_ref.compact_form, (uint8_t*)(counterparty_sig + 4), 64); @@ -14546,7 +14567,7 @@ void __attribute__((visibility("default"))) TS_RouteHop_set_node_features(uint3 LDKNodeFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures RouteHop_set_node_features(&this_ptr_conv, val_conv); } @@ -14586,7 +14607,7 @@ void __attribute__((visibility("default"))) TS_RouteHop_set_channel_features(ui LDKChannelFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures RouteHop_set_channel_features(&this_ptr_conv, val_conv); } @@ -14627,11 +14648,11 @@ uint32_t __attribute__((visibility("default"))) TS_RouteHop_new(int8_tArray pub LDKNodeFeatures node_features_arg_conv; node_features_arg_conv.inner = (void*)(node_features_arg & (~1)); node_features_arg_conv.is_owned = (node_features_arg & 1) || (node_features_arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures LDKChannelFeatures channel_features_arg_conv; channel_features_arg_conv.inner = (void*)(channel_features_arg & (~1)); channel_features_arg_conv.is_owned = (channel_features_arg & 1) || (channel_features_arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -14688,8 +14709,7 @@ void __attribute__((visibility("default"))) TS_Route_set_paths(uint32_t this_pt LDKRouteHop arr_conv_10_conv; arr_conv_10_conv.inner = (void*)(arr_conv_10 & (~1)); arr_conv_10_conv.is_owned = (arr_conv_10 & 1) || (arr_conv_10 == 0); - if (arr_conv_10_conv.inner != NULL) - arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); + arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); arr_conv_12_constr.data[k] = arr_conv_10_conv; } val_constr.data[m] = arr_conv_12_constr; @@ -14719,8 +14739,7 @@ uint32_t __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg LDKRouteHop arr_conv_10_conv; arr_conv_10_conv.inner = (void*)(arr_conv_10 & (~1)); arr_conv_10_conv.is_owned = (arr_conv_10 & 1) || (arr_conv_10 == 0); - if (arr_conv_10_conv.inner != NULL) - arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); + arr_conv_10_conv = RouteHop_clone(&arr_conv_10_conv); arr_conv_12_constr.data[k] = arr_conv_10_conv; } paths_arg_constr.data[m] = arr_conv_12_constr; @@ -14831,8 +14850,7 @@ void __attribute__((visibility("default"))) TS_RouteHint_set_fees(uint32_t this LDKRoutingFees val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = RoutingFees_clone(&val_conv); + val_conv = RoutingFees_clone(&val_conv); RouteHint_set_fees(&this_ptr_conv, val_conv); } @@ -14873,8 +14891,7 @@ uint32_t __attribute__((visibility("default"))) TS_RouteHint_new(int8_tArray sr LDKRoutingFees fees_arg_conv; fees_arg_conv.inner = (void*)(fees_arg & (~1)); fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0); - if (fees_arg_conv.inner != NULL) - fees_arg_conv = RoutingFees_clone(&fees_arg_conv); + fees_arg_conv = RoutingFees_clone(&fees_arg_conv); LDKRouteHint ret_var = RouteHint_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -14921,11 +14938,10 @@ uint32_t __attribute__((visibility("default"))) TS_get_route(int8_tArray our_no LDKRouteHint arr_conv_11_conv; arr_conv_11_conv.inner = (void*)(arr_conv_11 & (~1)); arr_conv_11_conv.is_owned = (arr_conv_11 & 1) || (arr_conv_11 == 0); - if (arr_conv_11_conv.inner != NULL) - arr_conv_11_conv = RouteHint_clone(&arr_conv_11_conv); + arr_conv_11_conv = RouteHint_clone(&arr_conv_11_conv); last_hops_constr.data[l] = arr_conv_11_conv; } - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ"); *ret_conv = get_route(our_node_id_ref, &network_conv, target_ref, &first_hops_constr, last_hops_constr, final_value_msat, final_cltv, logger_conv); FREE(first_hops_constr.data); @@ -14958,7 +14974,7 @@ uint32_t __attribute__((visibility("default"))) TS_NetGraphMsgHandler_new(int8_ CHECK(*((uint32_t*)genesis_hash) == 32); memcpy(genesis_hash_ref.data, (uint8_t*)(genesis_hash + 4), 32); LDKAccess* chain_access_conv = (LDKAccess*)chain_access; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); LDKNetGraphMsgHandler ret_var = NetGraphMsgHandler_new(genesis_hash_ref, chain_access_conv, logger_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -14971,11 +14987,11 @@ uint32_t __attribute__((visibility("default"))) TS_NetGraphMsgHandler_new(int8_ uint32_t __attribute__((visibility("default"))) TS_NetGraphMsgHandler_from_net_graph(uint32_t chain_access, uint32_t logger, uint32_t network_graph) { LDKAccess* chain_access_conv = (LDKAccess*)chain_access; - LDKLogger logger_conv = *(LDKLogger*)logger; + LDKLogger logger_conv = *(LDKLogger*)(((uint64_t)logger) & ~1); LDKNetworkGraph network_graph_conv; network_graph_conv.inner = (void*)(network_graph & (~1)); network_graph_conv.is_owned = (network_graph & 1) || (network_graph == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNetworkGraph LDKNetGraphMsgHandler ret_var = NetGraphMsgHandler_from_net_graph(chain_access_conv, logger_conv, network_graph_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -15039,6 +15055,20 @@ void __attribute__((visibility("default"))) TS_DirectionalChannelInfo_free(uint DirectionalChannelInfo_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_DirectionalChannelInfo_clone(uint32_t orig) { + LDKDirectionalChannelInfo orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + int32_t __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_last_update(uint32_t this_ptr) { LDKDirectionalChannelInfo this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -15120,8 +15150,7 @@ void __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_fees( LDKRoutingFees val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = RoutingFees_clone(&val_conv); + val_conv = RoutingFees_clone(&val_conv); DirectionalChannelInfo_set_fees(&this_ptr_conv, val_conv); } @@ -15146,8 +15175,7 @@ void __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_last_ LDKChannelUpdate val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelUpdate_clone(&val_conv); + val_conv = ChannelUpdate_clone(&val_conv); DirectionalChannelInfo_set_last_update_message(&this_ptr_conv, val_conv); } @@ -15204,7 +15232,7 @@ void __attribute__((visibility("default"))) TS_ChannelInfo_set_features(uint32_ LDKChannelFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKChannelFeatures ChannelInfo_set_features(&this_ptr_conv, val_conv); } @@ -15248,7 +15276,7 @@ void __attribute__((visibility("default"))) TS_ChannelInfo_set_one_to_two(uint3 LDKDirectionalChannelInfo val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + val_conv = DirectionalChannelInfo_clone(&val_conv); ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv); } @@ -15292,7 +15320,7 @@ void __attribute__((visibility("default"))) TS_ChannelInfo_set_two_to_one(uint3 LDKDirectionalChannelInfo val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + val_conv = DirectionalChannelInfo_clone(&val_conv); ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv); } @@ -15317,8 +15345,7 @@ void __attribute__((visibility("default"))) TS_ChannelInfo_set_announcement_mes LDKChannelAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = ChannelAnnouncement_clone(&val_conv); + val_conv = ChannelAnnouncement_clone(&val_conv); ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv); } @@ -15436,6 +15463,20 @@ void __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_free(uint32 NodeAnnouncementInfo_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_clone(uint32_t orig) { + LDKNodeAnnouncementInfo orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + uint32_t __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_features(uint32_t this_ptr) { LDKNodeAnnouncementInfo this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -15457,7 +15498,7 @@ void __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_feature LDKNodeFeatures val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv); } @@ -15527,7 +15568,7 @@ void __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_address uint32_t* val_vals = (uint32_t*)(val + 4); for (size_t m = 0; m < val_constr.datalen; m++) { uint32_t arr_conv_12 = val_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); val_constr.data[m] = arr_conv_12_conv; } @@ -15555,8 +15596,7 @@ void __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_announc LDKNodeAnnouncement val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = NodeAnnouncement_clone(&val_conv); + val_conv = NodeAnnouncement_clone(&val_conv); NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv); } @@ -15564,7 +15604,7 @@ uint32_t __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin LDKNodeFeatures features_arg_conv; features_arg_conv.inner = (void*)(features_arg & (~1)); features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0); - // Warning: we may need a move here but can't clone! + // Warning: we need a move here but no clone is available for LDKNodeFeatures LDKThreeBytes rgb_arg_ref; CHECK(*((uint32_t*)rgb_arg) == 3); memcpy(rgb_arg_ref.data, (uint8_t*)(rgb_arg + 4), 3); @@ -15580,15 +15620,14 @@ uint32_t __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin uint32_t* addresses_arg_vals = (uint32_t*)(addresses_arg + 4); for (size_t m = 0; m < addresses_arg_constr.datalen; m++) { uint32_t arr_conv_12 = addresses_arg_vals[m]; - LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)arr_conv_12; + LDKNetAddress arr_conv_12_conv = *(LDKNetAddress*)(((uint64_t)arr_conv_12) & ~1); FREE((void*)arr_conv_12); addresses_arg_constr.data[m] = arr_conv_12_conv; } LDKNodeAnnouncement announcement_message_arg_conv; announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1)); announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0); - if (announcement_message_arg_conv.inner != NULL) - announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv); + announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv); LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_ref, addresses_arg_constr, announcement_message_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. @@ -15626,6 +15665,20 @@ void __attribute__((visibility("default"))) TS_NodeInfo_free(uint32_t this_ptr) NodeInfo_free(this_ptr_conv); } +uint32_t __attribute__((visibility("default"))) TS_NodeInfo_clone(uint32_t orig) { + LDKNodeInfo orig_conv; + orig_conv.inner = (void*)(orig & (~1)); + orig_conv.is_owned = false; + LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv); + CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. + CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. + long ret_ref = (long)ret_var.inner; + if (ret_var.is_owned) { + ret_ref |= 1; + } + return ret_ref; +} + void __attribute__((visibility("default"))) TS_NodeInfo_set_channels(uint32_t this_ptr, int64_tArray val) { LDKNodeInfo this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -15665,8 +15718,7 @@ void __attribute__((visibility("default"))) TS_NodeInfo_set_lowest_inbound_chan LDKRoutingFees val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - if (val_conv.inner != NULL) - val_conv = RoutingFees_clone(&val_conv); + val_conv = RoutingFees_clone(&val_conv); NodeInfo_set_lowest_inbound_channel_fees(&this_ptr_conv, val_conv); } @@ -15691,7 +15743,7 @@ void __attribute__((visibility("default"))) TS_NodeInfo_set_announcement_info(u LDKNodeAnnouncementInfo val_conv; val_conv.inner = (void*)(val & (~1)); val_conv.is_owned = (val & 1) || (val == 0); - // Warning: we may need a move here but can't clone! + val_conv = NodeAnnouncementInfo_clone(&val_conv); NodeInfo_set_announcement_info(&this_ptr_conv, val_conv); } @@ -15710,12 +15762,11 @@ uint32_t __attribute__((visibility("default"))) TS_NodeInfo_new(int64_tArray ch LDKRoutingFees lowest_inbound_channel_fees_arg_conv; lowest_inbound_channel_fees_arg_conv.inner = (void*)(lowest_inbound_channel_fees_arg & (~1)); lowest_inbound_channel_fees_arg_conv.is_owned = (lowest_inbound_channel_fees_arg & 1) || (lowest_inbound_channel_fees_arg == 0); - if (lowest_inbound_channel_fees_arg_conv.inner != NULL) - lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv); + lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv); LDKNodeAnnouncementInfo announcement_info_arg_conv; announcement_info_arg_conv.inner = (void*)(announcement_info_arg & (~1)); announcement_info_arg_conv.is_owned = (announcement_info_arg & 1) || (announcement_info_arg == 0); - // Warning: we may need a move here but can't clone! + announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv); LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, lowest_inbound_channel_fees_arg_conv, announcement_info_arg_conv); CHECK((((long)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. diff --git a/ts/bindings.ts b/ts/bindings.ts index 330dde75..942649eb 100644 --- a/ts/bindings.ts +++ b/ts/bindings.ts @@ -389,9 +389,6 @@ public static native long new_empty_slice_vec(); public static native boolean LDKCResult_SignatureNoneZ_result_ok(long arg); public static native Uint8Array LDKCResult_SignatureNoneZ_get_ok(long arg); public static native void LDKCResult_SignatureNoneZ_get_err(long arg); - public static native boolean LDKCResult_CVec_SignatureZNoneZ_result_ok(long arg); - public static native Uint8Array[] LDKCResult_CVec_SignatureZNoneZ_get_ok(long arg); - public static native void LDKCResult_CVec_SignatureZNoneZ_get_err(long arg); @@ -402,8 +399,7 @@ public static native long new_empty_slice_vec(); release_commitment_secret (idx: number): Uint8Array; key_derivation_params (): number; sign_counterparty_commitment (commitment_tx: number): number; - sign_holder_commitment (commitment_tx: number): number; - sign_holder_commitment_htlc_transactions (commitment_tx: number): number; + sign_holder_commitment_and_htlcs (commitment_tx: number): number; sign_justice_transaction (justice_tx: Uint8Array, input: number, amount: number, per_commitment_key: Uint8Array, htlc: number): number; sign_counterparty_htlc_transaction (htlc_tx: Uint8Array, input: number, amount: number, per_commitment_point: Uint8Array, htlc: number): number; sign_closing_transaction (closing_tx: Uint8Array): number; @@ -451,20 +447,12 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.ChannelKeys_sign_counterparty_commitment(this_arg, commitment_tx); return nativeResponseValue; } - // LDKCResult_SignatureNoneZ ChannelKeys_sign_holder_commitment LDKChannelKeys* this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx - export function ChannelKeys_sign_holder_commitment(this_arg: number, commitment_tx: number): number { + // LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ChannelKeys_sign_holder_commitment_and_htlcs LDKChannelKeys* this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx + export function ChannelKeys_sign_holder_commitment_and_htlcs(this_arg: number, commitment_tx: number): number { if(!isWasmInitialized) { throw new Error("initializeWasm() must be awaited first!"); } - const nativeResponseValue = wasm.ChannelKeys_sign_holder_commitment(this_arg, commitment_tx); - return nativeResponseValue; - } - // LDKCResult_CVec_SignatureZNoneZ ChannelKeys_sign_holder_commitment_htlc_transactions LDKChannelKeys* this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx - export function ChannelKeys_sign_holder_commitment_htlc_transactions(this_arg: number, commitment_tx: number): number { - if(!isWasmInitialized) { - throw new Error("initializeWasm() must be awaited first!"); - } - const nativeResponseValue = wasm.ChannelKeys_sign_holder_commitment_htlc_transactions(this_arg, commitment_tx); + const nativeResponseValue = wasm.ChannelKeys_sign_holder_commitment_and_htlcs(this_arg, commitment_tx); return nativeResponseValue; } // LDKCResult_SignatureNoneZ ChannelKeys_sign_justice_transaction LDKChannelKeys* this_arg, struct LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (*per_commitment_key)[32], const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc @@ -868,6 +856,9 @@ public static native long new_empty_slice_vec(); public static native boolean LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(long arg); public static native number LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(long arg); public static native void LDKCResult_TrustedCommitmentTransactionNoneZ_get_err(long arg); + public static native boolean LDKCResult_CVec_SignatureZNoneZ_result_ok(long arg); + public static native Uint8Array[] LDKCResult_CVec_SignatureZNoneZ_get_ok(long arg); + public static native void LDKCResult_CVec_SignatureZNoneZ_get_err(long arg); public static native long LDKCVec_RouteHopZ_new(number[] elems); public static native boolean LDKCResult_RouteDecodeErrorZ_result_ok(long arg); public static native number LDKCResult_RouteDecodeErrorZ_get_ok(long arg); @@ -1465,6 +1456,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NoneChannelMonitorUpdateErrZ_free(_res); // debug statements here } + // struct LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_clone(const struct LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR orig); + export function CResult_NoneChannelMonitorUpdateErrZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NoneChannelMonitorUpdateErrZ_clone(orig); + return nativeResponseValue; + } // void CVec_MonitorEventZ_free(struct LDKCVec_MonitorEventZ _res); export function CVec_MonitorEventZ_free(_res: number[]): void { if(!isWasmInitialized) { @@ -1521,6 +1520,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_free(_res); // debug statements here } + // struct LDKCResult_NoneMonitorUpdateErrorZ CResult_NoneMonitorUpdateErrorZ_clone(const struct LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR orig); + export function CResult_NoneMonitorUpdateErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_clone(orig); + return nativeResponseValue; + } // void C2Tuple_OutPointScriptZ_free(struct LDKC2Tuple_OutPointScriptZ _res); export function C2Tuple_OutPointScriptZ_free(_res: number): void { if(!isWasmInitialized) { @@ -1545,6 +1552,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CVec_TransactionZ_free(_res); // debug statements here } + // struct LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_clone(const struct LDKC2Tuple_u32TxOutZ *NONNULL_PTR orig); + export function C2Tuple_u32TxOutZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.C2Tuple_u32TxOutZ_clone(orig); + return nativeResponseValue; + } // void C2Tuple_u32TxOutZ_free(struct LDKC2Tuple_u32TxOutZ _res); export function C2Tuple_u32TxOutZ_free(_res: number): void { if(!isWasmInitialized) { @@ -1633,6 +1648,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res); // debug statements here } + // struct LDKC2Tuple_u64u64Z C2Tuple_u64u64Z_clone(const struct LDKC2Tuple_u64u64Z *NONNULL_PTR orig); + export function C2Tuple_u64u64Z_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.C2Tuple_u64u64Z_clone(orig); + return nativeResponseValue; + } // void C2Tuple_u64u64Z_free(struct LDKC2Tuple_u64u64Z _res); export function C2Tuple_u64u64Z_free(_res: number): void { if(!isWasmInitialized) { @@ -1673,6 +1696,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res); // debug statements here } + // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ CResult_SpendableOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR orig); + export function CResult_SpendableOutputDescriptorDecodeErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_SpendableOutputDescriptorDecodeErrorZ_clone(orig); + return nativeResponseValue; + } // void CVec_SignatureZ_free(struct LDKCVec_SignatureZ _res); export function CVec_SignatureZ_free(_res: Uint8Array[]): void { if(!isWasmInitialized) { @@ -1681,6 +1712,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CVec_SignatureZ_free(_res); // debug statements here } + // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_clone(const struct LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR orig); + export function C2Tuple_SignatureCVec_SignatureZZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.C2Tuple_SignatureCVec_SignatureZZ_clone(orig); + return nativeResponseValue; + } // void C2Tuple_SignatureCVec_SignatureZZ_free(struct LDKC2Tuple_SignatureCVec_SignatureZZ _res); export function C2Tuple_SignatureCVec_SignatureZZ_free(_res: number): void { if(!isWasmInitialized) { @@ -1761,38 +1800,6 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_SignatureNoneZ_clone(orig); return nativeResponseValue; } - // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_ok(struct LDKCVec_SignatureZ o); - export function CResult_CVec_SignatureZNoneZ_ok(o: Uint8Array[]): number { - if(!isWasmInitialized) { - throw new Error("initializeWasm() must be awaited first!"); - } - const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_ok(o); - return nativeResponseValue; - } - // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_err(void); - export function CResult_CVec_SignatureZNoneZ_err(): number { - if(!isWasmInitialized) { - throw new Error("initializeWasm() must be awaited first!"); - } - const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_err(); - return nativeResponseValue; - } - // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res); - export function CResult_CVec_SignatureZNoneZ_free(_res: number): void { - if(!isWasmInitialized) { - throw new Error("initializeWasm() must be awaited first!"); - } - const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_free(_res); - // debug statements here - } - // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig); - export function CResult_CVec_SignatureZNoneZ_clone(orig: number): number { - if(!isWasmInitialized) { - throw new Error("initializeWasm() must be awaited first!"); - } - const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_clone(orig); - return nativeResponseValue; - } // struct LDKCResult_ChanKeySignerDecodeErrorZ CResult_ChanKeySignerDecodeErrorZ_ok(struct LDKChannelKeys o); export function CResult_ChanKeySignerDecodeErrorZ_ok(o: number): number { if(!isWasmInitialized) { @@ -1817,6 +1824,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_ChanKeySignerDecodeErrorZ_free(_res); // debug statements here } + // struct LDKCResult_ChanKeySignerDecodeErrorZ CResult_ChanKeySignerDecodeErrorZ_clone(const struct LDKCResult_ChanKeySignerDecodeErrorZ *NONNULL_PTR orig); + export function CResult_ChanKeySignerDecodeErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_ChanKeySignerDecodeErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_InMemoryChannelKeysDecodeErrorZ CResult_InMemoryChannelKeysDecodeErrorZ_ok(struct LDKInMemoryChannelKeys o); export function CResult_InMemoryChannelKeysDecodeErrorZ_ok(o: number): number { if(!isWasmInitialized) { @@ -1865,6 +1880,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_free(_res); // debug statements here } + // struct LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_clone(const struct LDKCResult_TxOutAccessErrorZ *NONNULL_PTR orig); + export function CResult_TxOutAccessErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_ok(void); export function CResult_NoneAPIErrorZ_ok(): number { if(!isWasmInitialized) { @@ -1921,6 +1944,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_free(_res); // debug statements here } + // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_clone(const struct LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR orig); + export function CResult_NonePaymentSendFailureZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_clone(orig); + return nativeResponseValue; + } // void CVec_NetAddressZ_free(struct LDKCVec_NetAddressZ _res); export function CVec_NetAddressZ_free(_res: number[]): void { if(!isWasmInitialized) { @@ -2001,6 +2032,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NetAddressu8Z_free(_res); // debug statements here } + // struct LDKCResult_NetAddressu8Z CResult_NetAddressu8Z_clone(const struct LDKCResult_NetAddressu8Z *NONNULL_PTR orig); + export function CResult_NetAddressu8Z_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NetAddressu8Z_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_CResult_NetAddressu8ZDecodeErrorZ CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(struct LDKCResult_NetAddressu8Z o); export function CResult_CResult_NetAddressu8ZDecodeErrorZ_ok(o: number): number { if(!isWasmInitialized) { @@ -2089,6 +2128,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_boolLightningErrorZ_free(_res); // debug statements here } + // struct LDKCResult_boolLightningErrorZ CResult_boolLightningErrorZ_clone(const struct LDKCResult_boolLightningErrorZ *NONNULL_PTR orig); + export function CResult_boolLightningErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_boolLightningErrorZ_clone(orig); + return nativeResponseValue; + } // void C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ _res); export function C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(_res: number): void { if(!isWasmInitialized) { @@ -2145,6 +2192,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_free(_res); // debug statements here } + // struct LDKCResult_NoneLightningErrorZ CResult_NoneLightningErrorZ_clone(const struct LDKCResult_NoneLightningErrorZ *NONNULL_PTR orig); + export function CResult_NoneLightningErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_ok(struct LDKChannelReestablish o); export function CResult_ChannelReestablishDecodeErrorZ_ok(o: number): number { if(!isWasmInitialized) { @@ -2497,6 +2552,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_CVec_u8ZPeerHandleErrorZ_free(_res); // debug statements here } + // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_clone(const struct LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR orig); + export function CResult_CVec_u8ZPeerHandleErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_CVec_u8ZPeerHandleErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_ok(void); export function CResult_NonePeerHandleErrorZ_ok(): number { if(!isWasmInitialized) { @@ -2521,6 +2584,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NonePeerHandleErrorZ_free(_res); // debug statements here } + // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_clone(const struct LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR orig); + export function CResult_NonePeerHandleErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NonePeerHandleErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_ok(bool o); export function CResult_boolPeerHandleErrorZ_ok(o: boolean): number { if(!isWasmInitialized) { @@ -2545,6 +2616,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_boolPeerHandleErrorZ_free(_res); // debug statements here } + // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_clone(const struct LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR orig); + export function CResult_boolPeerHandleErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_boolPeerHandleErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_SecretKeySecpErrorZ CResult_SecretKeySecpErrorZ_ok(struct LDKSecretKey o); export function CResult_SecretKeySecpErrorZ_ok(o: Uint8Array): number { if(!isWasmInitialized) { @@ -2641,6 +2720,38 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_TrustedCommitmentTransactionNoneZ_free(_res); // debug statements here } + // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_ok(struct LDKCVec_SignatureZ o); + export function CResult_CVec_SignatureZNoneZ_ok(o: Uint8Array[]): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_ok(o); + return nativeResponseValue; + } + // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_err(void); + export function CResult_CVec_SignatureZNoneZ_err(): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_err(); + return nativeResponseValue; + } + // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res); + export function CResult_CVec_SignatureZNoneZ_free(_res: number): void { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_free(_res); + // debug statements here + } + // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig); + export function CResult_CVec_SignatureZNoneZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_clone(orig); + return nativeResponseValue; + } // void CVec_RouteHopZ_free(struct LDKCVec_RouteHopZ _res); export function CVec_RouteHopZ_free(_res: number[]): void { if(!isWasmInitialized) { @@ -2761,6 +2872,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res); // debug statements here } + // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_clone(const struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR orig); + export function CResult_NodeAnnouncementInfoDecodeErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NodeAnnouncementInfoDecodeErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_ok(struct LDKNodeInfo o); export function CResult_NodeInfoDecodeErrorZ_ok(o: number): number { if(!isWasmInitialized) { @@ -2785,6 +2904,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.CResult_NodeInfoDecodeErrorZ_free(_res); // debug statements here } + // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_clone(const struct LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR orig); + export function CResult_NodeInfoDecodeErrorZ_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.CResult_NodeInfoDecodeErrorZ_clone(orig); + return nativeResponseValue; + } // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_ok(struct LDKNetworkGraph o); export function CResult_NetworkGraphDecodeErrorZ_ok(o: number): number { if(!isWasmInitialized) { @@ -3521,6 +3648,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.MonitorUpdateError_free(this_ptr); // debug statements here } + // struct LDKMonitorUpdateError MonitorUpdateError_clone(const struct LDKMonitorUpdateError *NONNULL_PTR orig); + export function MonitorUpdateError_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.MonitorUpdateError_clone(orig); + return nativeResponseValue; + } // void MonitorEvent_free(struct LDKMonitorEvent this_ptr); export function MonitorEvent_free(this_ptr: number): void { if(!isWasmInitialized) { @@ -3577,6 +3712,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.ChannelMonitor_free(this_ptr); // debug statements here } + // struct LDKChannelMonitor ChannelMonitor_clone(const struct LDKChannelMonitor *NONNULL_PTR orig); + export function ChannelMonitor_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.ChannelMonitor_clone(orig); + return nativeResponseValue; + } // struct LDKCVec_u8Z ChannelMonitor_write(const struct LDKChannelMonitor *NONNULL_PTR obj); export function ChannelMonitor_write(obj: number): Uint8Array { if(!isWasmInitialized) { @@ -4185,6 +4328,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.PaymentSendFailure_free(this_ptr); // debug statements here } + // struct LDKPaymentSendFailure PaymentSendFailure_clone(const struct LDKPaymentSendFailure *NONNULL_PTR orig); + export function PaymentSendFailure_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.PaymentSendFailure_clone(orig); + return nativeResponseValue; + } // MUST_USE_RES struct LDKChannelManager ChannelManager_new(enum LDKNetwork network, struct LDKFeeEstimator fee_est, struct LDKWatch chain_monitor, struct LDKBroadcasterInterface tx_broadcaster, struct LDKLogger logger, struct LDKKeysInterface keys_manager, struct LDKUserConfig config, uintptr_t current_blockchain_height); export function ChannelManager_new(network: LDKNetwork, fee_est: number, chain_monitor: number, tx_broadcaster: number, logger: number, keys_manager: number, config: number, current_blockchain_height: number): number { if(!isWasmInitialized) { @@ -4225,13 +4376,13 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.ChannelManager_close_channel(this_arg, encodeArray(channel_id)); return nativeResponseValue; } - // void ChannelManager_force_close_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*channel_id)[32]); - export function ChannelManager_force_close_channel(this_arg: number, channel_id: Uint8Array): void { + // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_force_close_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*channel_id)[32]); + export function ChannelManager_force_close_channel(this_arg: number, channel_id: Uint8Array): number { if(!isWasmInitialized) { throw new Error("initializeWasm() must be awaited first!"); } const nativeResponseValue = wasm.ChannelManager_force_close_channel(this_arg, encodeArray(channel_id)); - // debug statements here + return nativeResponseValue; } // void ChannelManager_force_close_all_channels(const struct LDKChannelManager *NONNULL_PTR this_arg); export function ChannelManager_force_close_all_channels(this_arg: number): void { @@ -4489,6 +4640,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.DecodeError_free(this_ptr); // debug statements here } + // struct LDKDecodeError DecodeError_clone(const struct LDKDecodeError *NONNULL_PTR orig); + export function DecodeError_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.DecodeError_clone(orig); + return nativeResponseValue; + } // void Init_free(struct LDKInit this_ptr); export function Init_free(this_ptr: number): void { if(!isWasmInitialized) { @@ -7201,6 +7360,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.LightningError_free(this_ptr); // debug statements here } + // struct LDKLightningError LightningError_clone(const struct LDKLightningError *NONNULL_PTR orig); + export function LightningError_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.LightningError_clone(orig); + return nativeResponseValue; + } // struct LDKStr LightningError_get_err(const struct LDKLightningError *NONNULL_PTR this_ptr); export function LightningError_get_err(this_ptr: number): String { if(!isWasmInitialized) { @@ -7929,6 +8096,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.PeerHandleError_free(this_ptr); // debug statements here } + // struct LDKPeerHandleError PeerHandleError_clone(const struct LDKPeerHandleError *NONNULL_PTR orig); + export function PeerHandleError_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.PeerHandleError_clone(orig); + return nativeResponseValue; + } // bool PeerHandleError_get_no_connection_possible(const struct LDKPeerHandleError *NONNULL_PTR this_ptr); export function PeerHandleError_get_no_connection_possible(this_ptr: number): boolean { if(!isWasmInitialized) { @@ -9385,6 +9560,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.DirectionalChannelInfo_free(this_ptr); // debug statements here } + // struct LDKDirectionalChannelInfo DirectionalChannelInfo_clone(const struct LDKDirectionalChannelInfo *NONNULL_PTR orig); + export function DirectionalChannelInfo_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.DirectionalChannelInfo_clone(orig); + return nativeResponseValue; + } // uint32_t DirectionalChannelInfo_get_last_update(const struct LDKDirectionalChannelInfo *NONNULL_PTR this_ptr); export function DirectionalChannelInfo_get_last_update(this_ptr: number): number { if(!isWasmInitialized) { @@ -9697,6 +9880,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.NodeAnnouncementInfo_free(this_ptr); // debug statements here } + // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_clone(const struct LDKNodeAnnouncementInfo *NONNULL_PTR orig); + export function NodeAnnouncementInfo_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.NodeAnnouncementInfo_clone(orig); + return nativeResponseValue; + } // struct LDKNodeFeatures NodeAnnouncementInfo_get_features(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr); export function NodeAnnouncementInfo_get_features(this_ptr: number): number { if(!isWasmInitialized) { @@ -9817,6 +10008,14 @@ public static native long new_empty_slice_vec(); const nativeResponseValue = wasm.NodeInfo_free(this_ptr); // debug statements here } + // struct LDKNodeInfo NodeInfo_clone(const struct LDKNodeInfo *NONNULL_PTR orig); + export function NodeInfo_clone(orig: number): number { + if(!isWasmInitialized) { + throw new Error("initializeWasm() must be awaited first!"); + } + const nativeResponseValue = wasm.NodeInfo_clone(orig); + return nativeResponseValue; + } // void NodeInfo_set_channels(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val); export function NodeInfo_set_channels(this_ptr: number, val: number[]): void { if(!isWasmInitialized) { diff --git a/ts/structs/AcceptChannel.ts b/ts/structs/AcceptChannel.ts index bcd54516..e9719e48 100644 --- a/ts/structs/AcceptChannel.ts +++ b/ts/structs/AcceptChannel.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public AcceptChannel clone() { number ret = bindings.AcceptChannel_clone(this.ptr); const ret_hu_conv: AcceptChannel = new AcceptChannel(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -158,6 +159,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static AcceptChannel constructor_read(Uint8Array ser) { number ret = bindings.AcceptChannel_read(ser); const ret_hu_conv: AcceptChannel = new AcceptChannel(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/AnnouncementSignatures.ts b/ts/structs/AnnouncementSignatures.ts index bf41f671..85625d72 100644 --- a/ts/structs/AnnouncementSignatures.ts +++ b/ts/structs/AnnouncementSignatures.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public AnnouncementSignatures clone() { number ret = bindings.AnnouncementSignatures_clone(this.ptr); const ret_hu_conv: AnnouncementSignatures = new AnnouncementSignatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -63,6 +64,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static AnnouncementSignatures constructor_new(Uint8Array channel_id_arg, number short_channel_id_arg, Uint8Array node_signature_arg, Uint8Array bitcoin_signature_arg) { number ret = bindings.AnnouncementSignatures_new(channel_id_arg, short_channel_id_arg, node_signature_arg, bitcoin_signature_arg); const ret_hu_conv: AnnouncementSignatures = new AnnouncementSignatures(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -74,6 +76,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static AnnouncementSignatures constructor_read(Uint8Array ser) { number ret = bindings.AnnouncementSignatures_read(ser); const ret_hu_conv: AnnouncementSignatures = new AnnouncementSignatures(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/BuiltCommitmentTransaction.ts b/ts/structs/BuiltCommitmentTransaction.ts index cbd67595..56f99778 100644 --- a/ts/structs/BuiltCommitmentTransaction.ts +++ b/ts/structs/BuiltCommitmentTransaction.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public BuiltCommitmentTransaction clone() { number ret = bindings.BuiltCommitmentTransaction_clone(this.ptr); const ret_hu_conv: BuiltCommitmentTransaction = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static BuiltCommitmentTransaction constructor_new(Uint8Array transaction_arg, Uint8Array txid_arg) { number ret = bindings.BuiltCommitmentTransaction_new(transaction_arg, txid_arg); const ret_hu_conv: BuiltCommitmentTransaction = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -56,6 +58,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static BuiltCommitmentTransaction constructor_read(Uint8Array ser) { number ret = bindings.BuiltCommitmentTransaction_read(ser); const ret_hu_conv: BuiltCommitmentTransaction = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChainMonitor.ts b/ts/structs/ChainMonitor.ts index 6cbc4621..a8312b90 100644 --- a/ts/structs/ChainMonitor.ts +++ b/ts/structs/ChainMonitor.ts @@ -30,6 +30,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChainMonitor constructor_new(Filter chain_source, BroadcasterInterface broadcaster, Logger logger, FeeEstimator feeest, Persist persister) { number ret = bindings.ChainMonitor_new(chain_source == null ? 0 : chain_source.ptr, broadcaster == null ? 0 : broadcaster.ptr, logger == null ? 0 : logger.ptr, feeest == null ? 0 : feeest.ptr, persister == null ? 0 : persister.ptr); const ret_hu_conv: ChainMonitor = new ChainMonitor(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chain_source); ret_hu_conv.ptrs_to.add(broadcaster); ret_hu_conv.ptrs_to.add(logger); diff --git a/ts/structs/ChannelAnnouncement.ts b/ts/structs/ChannelAnnouncement.ts index 9dc8d745..0ab592e2 100644 --- a/ts/structs/ChannelAnnouncement.ts +++ b/ts/structs/ChannelAnnouncement.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelAnnouncement clone() { number ret = bindings.ChannelAnnouncement_clone(this.ptr); const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -63,6 +64,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UnsignedChannelAnnouncement get_contents() { number ret = bindings.ChannelAnnouncement_get_contents(this.ptr); const ret_hu_conv: UnsignedChannelAnnouncement = new UnsignedChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -74,6 +76,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelAnnouncement constructor_new(Uint8Array node_signature_1_arg, Uint8Array node_signature_2_arg, Uint8Array bitcoin_signature_1_arg, Uint8Array bitcoin_signature_2_arg, UnsignedChannelAnnouncement contents_arg) { number ret = bindings.ChannelAnnouncement_new(node_signature_1_arg, node_signature_2_arg, bitcoin_signature_1_arg, bitcoin_signature_2_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1); const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(contents_arg); return ret_hu_conv; } @@ -86,6 +89,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelAnnouncement constructor_read(Uint8Array ser) { number ret = bindings.ChannelAnnouncement_read(ser); const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelConfig.ts b/ts/structs/ChannelConfig.ts index 3f07d5c9..85d0fa73 100644 --- a/ts/structs/ChannelConfig.ts +++ b/ts/structs/ChannelConfig.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelConfig clone() { number ret = bindings.ChannelConfig_clone(this.ptr); const ret_hu_conv: ChannelConfig = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,12 +55,14 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelConfig constructor_new(number fee_proportional_millionths_arg, boolean announced_channel_arg, boolean commit_upfront_shutdown_pubkey_arg) { number ret = bindings.ChannelConfig_new(fee_proportional_millionths_arg, announced_channel_arg, commit_upfront_shutdown_pubkey_arg); const ret_hu_conv: ChannelConfig = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static ChannelConfig constructor_default() { number ret = bindings.ChannelConfig_default(); const ret_hu_conv: ChannelConfig = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -71,6 +74,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelConfig constructor_read(Uint8Array ser) { number ret = bindings.ChannelConfig_read(ser); const ret_hu_conv: ChannelConfig = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelDetails.ts b/ts/structs/ChannelDetails.ts index 3643d2a1..5e8c88a2 100644 --- a/ts/structs/ChannelDetails.ts +++ b/ts/structs/ChannelDetails.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelDetails clone() { number ret = bindings.ChannelDetails_clone(this.ptr); const ret_hu_conv: ChannelDetails = new ChannelDetails(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,12 +46,21 @@ import * as bindings from '../bindings' // TODO: figure out location public InitFeatures get_counterparty_features() { number ret = bindings.ChannelDetails_get_counterparty_features(this.ptr); const ret_hu_conv: InitFeatures = new InitFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_counterparty_features(InitFeatures val) { bindings.ChannelDetails_set_counterparty_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public number get_channel_value_satoshis() { diff --git a/ts/structs/ChannelHandshakeConfig.ts b/ts/structs/ChannelHandshakeConfig.ts index 96cb4d85..e199a1e3 100644 --- a/ts/structs/ChannelHandshakeConfig.ts +++ b/ts/structs/ChannelHandshakeConfig.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelHandshakeConfig clone() { number ret = bindings.ChannelHandshakeConfig_clone(this.ptr); const ret_hu_conv: ChannelHandshakeConfig = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,12 +55,14 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelHandshakeConfig constructor_new(number minimum_depth_arg, number our_to_self_delay_arg, number our_htlc_minimum_msat_arg) { number ret = bindings.ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg); const ret_hu_conv: ChannelHandshakeConfig = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static ChannelHandshakeConfig constructor_default() { number ret = bindings.ChannelHandshakeConfig_default(); const ret_hu_conv: ChannelHandshakeConfig = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelHandshakeLimits.ts b/ts/structs/ChannelHandshakeLimits.ts index c65a6294..f0c549ba 100644 --- a/ts/structs/ChannelHandshakeLimits.ts +++ b/ts/structs/ChannelHandshakeLimits.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelHandshakeLimits clone() { number ret = bindings.ChannelHandshakeLimits_clone(this.ptr); const ret_hu_conv: ChannelHandshakeLimits = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -117,12 +118,14 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelHandshakeLimits constructor_new(number min_funding_satoshis_arg, number max_htlc_minimum_msat_arg, number min_max_htlc_value_in_flight_msat_arg, number max_channel_reserve_satoshis_arg, number min_max_accepted_htlcs_arg, number min_dust_limit_satoshis_arg, number max_dust_limit_satoshis_arg, number max_minimum_depth_arg, boolean force_announced_channel_preference_arg, number their_to_self_delay_arg) { number ret = bindings.ChannelHandshakeLimits_new(min_funding_satoshis_arg, max_htlc_minimum_msat_arg, min_max_htlc_value_in_flight_msat_arg, max_channel_reserve_satoshis_arg, min_max_accepted_htlcs_arg, min_dust_limit_satoshis_arg, max_dust_limit_satoshis_arg, max_minimum_depth_arg, force_announced_channel_preference_arg, their_to_self_delay_arg); const ret_hu_conv: ChannelHandshakeLimits = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static ChannelHandshakeLimits constructor_default() { number ret = bindings.ChannelHandshakeLimits_default(); const ret_hu_conv: ChannelHandshakeLimits = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelInfo.ts b/ts/structs/ChannelInfo.ts index cbbdfba1..b99fd456 100644 --- a/ts/structs/ChannelInfo.ts +++ b/ts/structs/ChannelInfo.ts @@ -21,12 +21,21 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelFeatures get_features() { number ret = bindings.ChannelInfo_get_features(this.ptr); const ret_hu_conv: ChannelFeatures = new ChannelFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(ChannelFeatures val) { bindings.ChannelInfo_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public Uint8Array get_node_one() { @@ -41,6 +50,7 @@ import * as bindings from '../bindings' // TODO: figure out location public DirectionalChannelInfo get_one_to_two() { number ret = bindings.ChannelInfo_get_one_to_two(this.ptr); const ret_hu_conv: DirectionalChannelInfo = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -61,6 +71,7 @@ import * as bindings from '../bindings' // TODO: figure out location public DirectionalChannelInfo get_two_to_one() { number ret = bindings.ChannelInfo_get_two_to_one(this.ptr); const ret_hu_conv: DirectionalChannelInfo = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -72,6 +83,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelAnnouncement get_announcement_message() { number ret = bindings.ChannelInfo_get_announcement_message(this.ptr); const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -88,6 +100,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelInfo constructor_read(Uint8Array ser) { number ret = bindings.ChannelInfo_read(ser); const ret_hu_conv: ChannelInfo = new ChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelKeys.ts b/ts/structs/ChannelKeys.ts index 746ff660..957dc512 100644 --- a/ts/structs/ChannelKeys.ts +++ b/ts/structs/ChannelKeys.ts @@ -56,16 +56,9 @@ import * as bindings from '../bindings' // TODO: figure out location return result; }, - sign_holder_commitment (commitment_tx: number): number { + sign_holder_commitment_and_htlcs (commitment_tx: number): number { const commitment_tx_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, commitment_tx); - Result_SignatureNoneZ ret = arg.sign_holder_commitment(commitment_tx_hu_conv); - result: number = ret != null ? ret.ptr : 0; - return result; - }, - - sign_holder_commitment_htlc_transactions (commitment_tx: number): number { - const commitment_tx_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, commitment_tx); - Result_CVec_SignatureZNoneZ ret = arg.sign_holder_commitment_htlc_transactions(commitment_tx_hu_conv); + Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; }, @@ -118,8 +111,7 @@ import * as bindings from '../bindings' // TODO: figure out location release_commitment_secret(idx: number): Uint8Array; key_derivation_params(): TwoTuple; sign_counterparty_commitment(commitment_tx: CommitmentTransaction): Result_C2Tuple_SignatureCVec_SignatureZZNoneZ; - sign_holder_commitment(commitment_tx: HolderCommitmentTransaction): Result_SignatureNoneZ; - sign_holder_commitment_htlc_transactions(commitment_tx: HolderCommitmentTransaction): Result_CVec_SignatureZNoneZ; + sign_holder_commitment_and_htlcs(commitment_tx: HolderCommitmentTransaction): Result_C2Tuple_SignatureCVec_SignatureZZNoneZ; sign_justice_transaction(justice_tx: Uint8Array, input: number, amount: number, per_commitment_key: Uint8Array, htlc: HTLCOutputInCommitment): Result_SignatureNoneZ; sign_counterparty_htlc_transaction(htlc_tx: Uint8Array, input: number, amount: number, per_commitment_point: Uint8Array, htlc: HTLCOutputInCommitment): Result_SignatureNoneZ; sign_closing_transaction(closing_tx: Uint8Array): Result_SignatureNoneZ; @@ -157,16 +149,9 @@ import * as bindings from '../bindings' // TODO: figure out location return ret_hu_conv; } - public Result_SignatureNoneZ sign_holder_commitment(HolderCommitmentTransaction commitment_tx) { - number ret = bindings.ChannelKeys_sign_holder_commitment(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1); - Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret); - this.ptrs_to.add(commitment_tx); - return ret_hu_conv; - } - - public Result_CVec_SignatureZNoneZ sign_holder_commitment_htlc_transactions(HolderCommitmentTransaction commitment_tx) { - number ret = bindings.ChannelKeys_sign_holder_commitment_htlc_transactions(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1); - Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret); + public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx) { + number ret = bindings.ChannelKeys_sign_holder_commitment_and_htlcs(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1); + Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret); this.ptrs_to.add(commitment_tx); return ret_hu_conv; } @@ -211,6 +196,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelPublicKeys get_pubkeys() { number ret = bindings.ChannelKeys_get_pubkeys(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/ChannelManager.ts b/ts/structs/ChannelManager.ts index 226c9c9e..27570f00 100644 --- a/ts/structs/ChannelManager.ts +++ b/ts/structs/ChannelManager.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelManager constructor_new(LDKNetwork network, FeeEstimator fee_est, Watch chain_monitor, BroadcasterInterface tx_broadcaster, Logger logger, KeysInterface keys_manager, UserConfig config, number current_blockchain_height) { number ret = bindings.ChannelManager_new(network, fee_est == null ? 0 : fee_est.ptr, chain_monitor == null ? 0 : chain_monitor.ptr, tx_broadcaster == null ? 0 : tx_broadcaster.ptr, logger == null ? 0 : logger.ptr, keys_manager == null ? 0 : keys_manager.ptr, config == null ? 0 : config.ptr & ~1, current_blockchain_height); const ret_hu_conv: ChannelManager = new ChannelManager(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(fee_est); ret_hu_conv.ptrs_to.add(chain_monitor); ret_hu_conv.ptrs_to.add(tx_broadcaster); @@ -43,6 +44,7 @@ import * as bindings from '../bindings' // TODO: figure out location for (int q = 0; q < ret.length; q++) { number arr_conv_16 = ret[q]; const arr_conv_16_hu_conv: ChannelDetails = new ChannelDetails(null, arr_conv_16); + arr_conv_16_hu_conv.ptrs_to.add(this); arr_conv_16_arr[q] = arr_conv_16_hu_conv; } return arr_conv_16_arr; @@ -54,6 +56,7 @@ import * as bindings from '../bindings' // TODO: figure out location for (int q = 0; q < ret.length; q++) { number arr_conv_16 = ret[q]; const arr_conv_16_hu_conv: ChannelDetails = new ChannelDetails(null, arr_conv_16); + arr_conv_16_hu_conv.ptrs_to.add(this); arr_conv_16_arr[q] = arr_conv_16_hu_conv; } return arr_conv_16_arr; @@ -65,8 +68,10 @@ import * as bindings from '../bindings' // TODO: figure out location return ret_hu_conv; } - public void force_close_channel(Uint8Array channel_id) { - bindings.ChannelManager_force_close_channel(this.ptr, channel_id); + public Result_NoneAPIErrorZ force_close_channel(Uint8Array channel_id) { + number ret = bindings.ChannelManager_force_close_channel(this.ptr, channel_id); + Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret); + return ret_hu_conv; } public void force_close_all_channels() { diff --git a/ts/structs/ChannelManagerReadArgs.ts b/ts/structs/ChannelManagerReadArgs.ts index d270a462..ff9865e9 100644 --- a/ts/structs/ChannelManagerReadArgs.ts +++ b/ts/structs/ChannelManagerReadArgs.ts @@ -81,6 +81,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UserConfig get_default_config() { number ret = bindings.ChannelManagerReadArgs_get_default_config(this.ptr); const ret_hu_conv: UserConfig = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -92,6 +93,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelManagerReadArgs constructor_new(KeysInterface keys_manager, FeeEstimator fee_estimator, Watch chain_monitor, BroadcasterInterface tx_broadcaster, Logger logger, UserConfig default_config, ChannelMonitor[] channel_monitors) { number ret = bindings.ChannelManagerReadArgs_new(keys_manager == null ? 0 : keys_manager.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, chain_monitor == null ? 0 : chain_monitor.ptr, tx_broadcaster == null ? 0 : tx_broadcaster.ptr, logger == null ? 0 : logger.ptr, default_config == null ? 0 : default_config.ptr & ~1, (number[])Arrays.stream(channel_monitors).map(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray()); const ret_hu_conv: ChannelManagerReadArgs = new ChannelManagerReadArgs(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(keys_manager); ret_hu_conv.ptrs_to.add(fee_estimator); ret_hu_conv.ptrs_to.add(chain_monitor); diff --git a/ts/structs/ChannelMessageHandler.ts b/ts/structs/ChannelMessageHandler.ts index 52144c80..aff48916 100644 --- a/ts/structs/ChannelMessageHandler.ts +++ b/ts/structs/ChannelMessageHandler.ts @@ -35,12 +35,14 @@ import * as bindings from '../bindings' // TODO: figure out location // todo: in-line interface filling handle_open_channel (their_node_id: Uint8Array, their_features: number, msg: number): void { const their_features_hu_conv: InitFeatures = new InitFeatures(null, their_features); + their_features_hu_conv.ptrs_to.add(this); const msg_hu_conv: OpenChannel = new OpenChannel(null, msg); arg.handle_open_channel(their_node_id, their_features_hu_conv, msg_hu_conv); }, handle_accept_channel (their_node_id: Uint8Array, their_features: number, msg: number): void { const their_features_hu_conv: InitFeatures = new InitFeatures(null, their_features); + their_features_hu_conv.ptrs_to.add(this); const msg_hu_conv: AcceptChannel = new AcceptChannel(null, msg); arg.handle_accept_channel(their_node_id, their_features_hu_conv, msg_hu_conv); }, @@ -164,12 +166,28 @@ import * as bindings from '../bindings' // TODO: figure out location public void handle_open_channel(Uint8Array their_node_id, InitFeatures their_features, OpenChannel msg) { bindings.ChannelMessageHandler_handle_open_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1); this.ptrs_to.add(their_features); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, their_features is reset to null and is now a dummy object. + their_features.ptr = 0; this.ptrs_to.add(msg); } public void handle_accept_channel(Uint8Array their_node_id, InitFeatures their_features, AcceptChannel msg) { bindings.ChannelMessageHandler_handle_accept_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1); this.ptrs_to.add(their_features); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, their_features is reset to null and is now a dummy object. + their_features.ptr = 0; this.ptrs_to.add(msg); } diff --git a/ts/structs/ChannelMonitor.ts b/ts/structs/ChannelMonitor.ts index 96bf8c5b..8baaf189 100644 --- a/ts/structs/ChannelMonitor.ts +++ b/ts/structs/ChannelMonitor.ts @@ -18,6 +18,13 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.ChannelMonitor_free(this.ptr); } } + public ChannelMonitor clone() { + number ret = bindings.ChannelMonitor_clone(this.ptr); + const ret_hu_conv: ChannelMonitor = new ChannelMonitor(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public Uint8Array write() { Uint8Array ret = bindings.ChannelMonitor_write(this.ptr); return ret; @@ -41,7 +48,8 @@ import * as bindings from '../bindings' // TODO: figure out location public TwoTuple get_funding_txo() { number ret = bindings.ChannelMonitor_get_funding_txo(this.ptr); number ret_a = bindings.LDKC2Tuple_OutPointScriptZ_get_a(ret); - const ret_a_hu_conv: OutPoint = new OutPoint(null, ret_a);; + const ret_a_hu_conv: OutPoint = new OutPoint(null, ret_a); + ret_a_hu_conv.ptrs_to.add(this);; Uint8Array ret_b = bindings.LDKC2Tuple_OutPointScriptZ_get_b(ret); TwoTuple ret_conv = new TwoTuple(ret_a_hu_conv, ret_b); return ret_conv; @@ -53,6 +61,7 @@ import * as bindings from '../bindings' // TODO: figure out location for (int o = 0; o < ret.length; o++) { number arr_conv_14 = ret[o]; const arr_conv_14_hu_conv: MonitorEvent = new MonitorEvent(null, arr_conv_14); + arr_conv_14_hu_conv.ptrs_to.add(this); arr_conv_14_arr[o] = arr_conv_14_hu_conv; } return arr_conv_14_arr; diff --git a/ts/structs/ChannelMonitorUpdate.ts b/ts/structs/ChannelMonitorUpdate.ts index a5ef1d14..3217804e 100644 --- a/ts/structs/ChannelMonitorUpdate.ts +++ b/ts/structs/ChannelMonitorUpdate.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelMonitorUpdate clone() { number ret = bindings.ChannelMonitorUpdate_clone(this.ptr); const ret_hu_conv: ChannelMonitorUpdate = new ChannelMonitorUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/ChannelPublicKeys.ts b/ts/structs/ChannelPublicKeys.ts index 911a7ac2..572c44ca 100644 --- a/ts/structs/ChannelPublicKeys.ts +++ b/ts/structs/ChannelPublicKeys.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelPublicKeys clone() { number ret = bindings.ChannelPublicKeys_clone(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -72,6 +73,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelPublicKeys constructor_new(Uint8Array funding_pubkey_arg, Uint8Array revocation_basepoint_arg, Uint8Array payment_point_arg, Uint8Array delayed_payment_basepoint_arg, Uint8Array htlc_basepoint_arg) { number ret = bindings.ChannelPublicKeys_new(funding_pubkey_arg, revocation_basepoint_arg, payment_point_arg, delayed_payment_basepoint_arg, htlc_basepoint_arg); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -83,6 +85,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelPublicKeys constructor_read(Uint8Array ser) { number ret = bindings.ChannelPublicKeys_read(ser); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelReestablish.ts b/ts/structs/ChannelReestablish.ts index 2394cb2d..9dfd0976 100644 --- a/ts/structs/ChannelReestablish.ts +++ b/ts/structs/ChannelReestablish.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelReestablish clone() { number ret = bindings.ChannelReestablish_clone(this.ptr); const ret_hu_conv: ChannelReestablish = new ChannelReestablish(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/ChannelTransactionParameters.ts b/ts/structs/ChannelTransactionParameters.ts index 3d6e367f..3a9d9016 100644 --- a/ts/structs/ChannelTransactionParameters.ts +++ b/ts/structs/ChannelTransactionParameters.ts @@ -21,12 +21,14 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelTransactionParameters clone() { number ret = bindings.ChannelTransactionParameters_clone(this.ptr); const ret_hu_conv: ChannelTransactionParameters = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelPublicKeys get_holder_pubkeys() { number ret = bindings.ChannelTransactionParameters_get_holder_pubkeys(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -56,6 +58,7 @@ import * as bindings from '../bindings' // TODO: figure out location public CounterpartyChannelTransactionParameters get_counterparty_parameters() { number ret = bindings.ChannelTransactionParameters_get_counterparty_parameters(this.ptr); const ret_hu_conv: CounterpartyChannelTransactionParameters = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -67,6 +70,7 @@ import * as bindings from '../bindings' // TODO: figure out location public OutPoint get_funding_outpoint() { number ret = bindings.ChannelTransactionParameters_get_funding_outpoint(this.ptr); const ret_hu_conv: OutPoint = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -78,6 +82,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelTransactionParameters constructor_new(ChannelPublicKeys holder_pubkeys_arg, number holder_selected_contest_delay_arg, boolean is_outbound_from_holder_arg, CounterpartyChannelTransactionParameters counterparty_parameters_arg, OutPoint funding_outpoint_arg) { number ret = bindings.ChannelTransactionParameters_new(holder_pubkeys_arg == null ? 0 : holder_pubkeys_arg.ptr & ~1, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg == null ? 0 : counterparty_parameters_arg.ptr & ~1, funding_outpoint_arg == null ? 0 : funding_outpoint_arg.ptr & ~1); const ret_hu_conv: ChannelTransactionParameters = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(holder_pubkeys_arg); ret_hu_conv.ptrs_to.add(counterparty_parameters_arg); ret_hu_conv.ptrs_to.add(funding_outpoint_arg); @@ -92,12 +97,14 @@ import * as bindings from '../bindings' // TODO: figure out location public DirectedChannelTransactionParameters as_holder_broadcastable() { number ret = bindings.ChannelTransactionParameters_as_holder_broadcastable(this.ptr); const ret_hu_conv: DirectedChannelTransactionParameters = new DirectedChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public DirectedChannelTransactionParameters as_counterparty_broadcastable() { number ret = bindings.ChannelTransactionParameters_as_counterparty_broadcastable(this.ptr); const ret_hu_conv: DirectedChannelTransactionParameters = new DirectedChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -109,6 +116,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelTransactionParameters constructor_read(Uint8Array ser) { number ret = bindings.ChannelTransactionParameters_read(ser); const ret_hu_conv: ChannelTransactionParameters = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ChannelUpdate.ts b/ts/structs/ChannelUpdate.ts index 9a8244da..524e9a54 100644 --- a/ts/structs/ChannelUpdate.ts +++ b/ts/structs/ChannelUpdate.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelUpdate clone() { number ret = bindings.ChannelUpdate_clone(this.ptr); const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -36,6 +37,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UnsignedChannelUpdate get_contents() { number ret = bindings.ChannelUpdate_get_contents(this.ptr); const ret_hu_conv: UnsignedChannelUpdate = new UnsignedChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -47,6 +49,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelUpdate constructor_new(Uint8Array signature_arg, UnsignedChannelUpdate contents_arg) { number ret = bindings.ChannelUpdate_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1); const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(contents_arg); return ret_hu_conv; } @@ -59,6 +62,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ChannelUpdate constructor_read(Uint8Array ser) { number ret = bindings.ChannelUpdate_read(ser); const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ClosingSigned.ts b/ts/structs/ClosingSigned.ts index 41714dd0..cd6eb15b 100644 --- a/ts/structs/ClosingSigned.ts +++ b/ts/structs/ClosingSigned.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ClosingSigned clone() { number ret = bindings.ClosingSigned_clone(this.ptr); const ret_hu_conv: ClosingSigned = new ClosingSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,6 +55,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ClosingSigned constructor_new(Uint8Array channel_id_arg, number fee_satoshis_arg, Uint8Array signature_arg) { number ret = bindings.ClosingSigned_new(channel_id_arg, fee_satoshis_arg, signature_arg); const ret_hu_conv: ClosingSigned = new ClosingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -65,6 +67,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ClosingSigned constructor_read(Uint8Array ser) { number ret = bindings.ClosingSigned_read(ser); const ret_hu_conv: ClosingSigned = new ClosingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/CommitmentSigned.ts b/ts/structs/CommitmentSigned.ts index 6997cf7c..58089b3b 100644 --- a/ts/structs/CommitmentSigned.ts +++ b/ts/structs/CommitmentSigned.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public CommitmentSigned clone() { number ret = bindings.CommitmentSigned_clone(this.ptr); const ret_hu_conv: CommitmentSigned = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -49,6 +50,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static CommitmentSigned constructor_new(Uint8Array channel_id_arg, Uint8Array signature_arg, Uint8Array[] htlc_signatures_arg) { number ret = bindings.CommitmentSigned_new(channel_id_arg, signature_arg, htlc_signatures_arg); const ret_hu_conv: CommitmentSigned = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -60,6 +62,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static CommitmentSigned constructor_read(Uint8Array ser) { number ret = bindings.CommitmentSigned_read(ser); const ret_hu_conv: CommitmentSigned = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/CommitmentTransaction.ts b/ts/structs/CommitmentTransaction.ts index d265267c..4d13ed9a 100644 --- a/ts/structs/CommitmentTransaction.ts +++ b/ts/structs/CommitmentTransaction.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public CommitmentTransaction clone() { number ret = bindings.CommitmentTransaction_clone(this.ptr); const ret_hu_conv: CommitmentTransaction = new CommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,6 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static CommitmentTransaction constructor_read(Uint8Array ser) { number ret = bindings.CommitmentTransaction_read(ser); const ret_hu_conv: CommitmentTransaction = new CommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -58,6 +60,7 @@ import * as bindings from '../bindings' // TODO: figure out location public TrustedCommitmentTransaction trust() { number ret = bindings.CommitmentTransaction_trust(this.ptr); const ret_hu_conv: TrustedCommitmentTransaction = new TrustedCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/CommitmentUpdate.ts b/ts/structs/CommitmentUpdate.ts index 0a11f39e..3564c699 100644 --- a/ts/structs/CommitmentUpdate.ts +++ b/ts/structs/CommitmentUpdate.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public CommitmentUpdate clone() { number ret = bindings.CommitmentUpdate_clone(this.ptr); const ret_hu_conv: CommitmentUpdate = new CommitmentUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -47,6 +48,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UpdateFee get_update_fee() { number ret = bindings.CommitmentUpdate_get_update_fee(this.ptr); const ret_hu_conv: UpdateFee = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -58,6 +60,7 @@ import * as bindings from '../bindings' // TODO: figure out location public CommitmentSigned get_commitment_signed() { number ret = bindings.CommitmentUpdate_get_commitment_signed(this.ptr); const ret_hu_conv: CommitmentSigned = new CommitmentSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -69,6 +72,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static CommitmentUpdate constructor_new(UpdateAddHTLC[] update_add_htlcs_arg, UpdateFulfillHTLC[] update_fulfill_htlcs_arg, UpdateFailHTLC[] update_fail_htlcs_arg, UpdateFailMalformedHTLC[] update_fail_malformed_htlcs_arg, UpdateFee update_fee_arg, CommitmentSigned commitment_signed_arg) { number ret = bindings.CommitmentUpdate_new((number[])Arrays.stream(update_add_htlcs_arg).map(arr_conv_15 -> arr_conv_15 == null ? 0 : arr_conv_15.ptr & ~1).toArray(), (number[])Arrays.stream(update_fulfill_htlcs_arg).map(arr_conv_19 -> arr_conv_19 == null ? 0 : arr_conv_19.ptr & ~1).toArray(), (number[])Arrays.stream(update_fail_htlcs_arg).map(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray(), (number[])Arrays.stream(update_fail_malformed_htlcs_arg).map(arr_conv_25 -> arr_conv_25 == null ? 0 : arr_conv_25.ptr & ~1).toArray(), update_fee_arg == null ? 0 : update_fee_arg.ptr & ~1, commitment_signed_arg == null ? 0 : commitment_signed_arg.ptr & ~1); const ret_hu_conv: CommitmentUpdate = new CommitmentUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); /* TODO 2 UpdateAddHTLC */; /* TODO 2 UpdateFulfillHTLC */; /* TODO 2 UpdateFailHTLC */; diff --git a/ts/structs/CounterpartyChannelTransactionParameters.ts b/ts/structs/CounterpartyChannelTransactionParameters.ts index 55dcf04d..de6a67b8 100644 --- a/ts/structs/CounterpartyChannelTransactionParameters.ts +++ b/ts/structs/CounterpartyChannelTransactionParameters.ts @@ -21,12 +21,14 @@ import * as bindings from '../bindings' // TODO: figure out location public CounterpartyChannelTransactionParameters clone() { number ret = bindings.CounterpartyChannelTransactionParameters_clone(this.ptr); const ret_hu_conv: CounterpartyChannelTransactionParameters = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelPublicKeys get_pubkeys() { number ret = bindings.CounterpartyChannelTransactionParameters_get_pubkeys(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -47,6 +49,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static CounterpartyChannelTransactionParameters constructor_new(ChannelPublicKeys pubkeys_arg, number selected_contest_delay_arg) { number ret = bindings.CounterpartyChannelTransactionParameters_new(pubkeys_arg == null ? 0 : pubkeys_arg.ptr & ~1, selected_contest_delay_arg); const ret_hu_conv: CounterpartyChannelTransactionParameters = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(pubkeys_arg); return ret_hu_conv; } @@ -59,6 +62,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static CounterpartyChannelTransactionParameters constructor_read(Uint8Array ser) { number ret = bindings.CounterpartyChannelTransactionParameters_read(ser); const ret_hu_conv: CounterpartyChannelTransactionParameters = new CounterpartyChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/DataLossProtect.ts b/ts/structs/DataLossProtect.ts index 7e1183a1..a08c831a 100644 --- a/ts/structs/DataLossProtect.ts +++ b/ts/structs/DataLossProtect.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public DataLossProtect clone() { number ret = bindings.DataLossProtect_clone(this.ptr); const ret_hu_conv: DataLossProtect = new DataLossProtect(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static DataLossProtect constructor_new(Uint8Array your_last_per_commitment_secret_arg, Uint8Array my_current_per_commitment_point_arg) { number ret = bindings.DataLossProtect_new(your_last_per_commitment_secret_arg, my_current_per_commitment_point_arg); const ret_hu_conv: DataLossProtect = new DataLossProtect(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/DecodeError.ts b/ts/structs/DecodeError.ts index fc3278b4..750447a8 100644 --- a/ts/structs/DecodeError.ts +++ b/ts/structs/DecodeError.ts @@ -18,4 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.DecodeError_free(this.ptr); } } + public DecodeError clone() { + number ret = bindings.DecodeError_clone(this.ptr); + const ret_hu_conv: DecodeError = new DecodeError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + } diff --git a/ts/structs/DirectedChannelTransactionParameters.ts b/ts/structs/DirectedChannelTransactionParameters.ts index cc57f1ec..77c53071 100644 --- a/ts/structs/DirectedChannelTransactionParameters.ts +++ b/ts/structs/DirectedChannelTransactionParameters.ts @@ -21,12 +21,14 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelPublicKeys broadcaster_pubkeys() { number ret = bindings.DirectedChannelTransactionParameters_broadcaster_pubkeys(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelPublicKeys countersignatory_pubkeys() { number ret = bindings.DirectedChannelTransactionParameters_countersignatory_pubkeys(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -43,6 +45,7 @@ import * as bindings from '../bindings' // TODO: figure out location public OutPoint funding_outpoint() { number ret = bindings.DirectedChannelTransactionParameters_funding_outpoint(this.ptr); const ret_hu_conv: OutPoint = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/DirectionalChannelInfo.ts b/ts/structs/DirectionalChannelInfo.ts index 4f80064e..5866e913 100644 --- a/ts/structs/DirectionalChannelInfo.ts +++ b/ts/structs/DirectionalChannelInfo.ts @@ -18,6 +18,13 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.DirectionalChannelInfo_free(this.ptr); } } + public DirectionalChannelInfo clone() { + number ret = bindings.DirectionalChannelInfo_clone(this.ptr); + const ret_hu_conv: DirectionalChannelInfo = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public number get_last_update() { number ret = bindings.DirectionalChannelInfo_get_last_update(this.ptr); return ret; @@ -57,6 +64,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RoutingFees get_fees() { number ret = bindings.DirectionalChannelInfo_get_fees(this.ptr); const ret_hu_conv: RoutingFees = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -68,6 +76,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelUpdate get_last_update_message() { number ret = bindings.DirectionalChannelInfo_get_last_update_message(this.ptr); const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -84,6 +93,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static DirectionalChannelInfo constructor_read(Uint8Array ser) { number ret = bindings.DirectionalChannelInfo_read(ser); const ret_hu_conv: DirectionalChannelInfo = new DirectionalChannelInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ErrorAction.ts b/ts/structs/ErrorAction.ts index cbdfa17e..fed9258c 100644 --- a/ts/structs/ErrorAction.ts +++ b/ts/structs/ErrorAction.ts @@ -29,6 +29,7 @@ export class DisconnectPeer extends ErrorAction { super(null, ptr); const msg: number = obj.msg; const msg_hu_conv: ErrorMessage = new ErrorMessage(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -43,6 +44,7 @@ export class SendErrorMessage extends ErrorAction { super(null, ptr); const msg: number = obj.msg; const msg_hu_conv: ErrorMessage = new ErrorMessage(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } diff --git a/ts/structs/ErrorMessage.ts b/ts/structs/ErrorMessage.ts index 6551cc06..4ad554f5 100644 --- a/ts/structs/ErrorMessage.ts +++ b/ts/structs/ErrorMessage.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ErrorMessage clone() { number ret = bindings.ErrorMessage_clone(this.ptr); const ret_hu_conv: ErrorMessage = new ErrorMessage(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ErrorMessage constructor_new(Uint8Array channel_id_arg, Uint8Array data_arg) { number ret = bindings.ErrorMessage_new(channel_id_arg, data_arg); const ret_hu_conv: ErrorMessage = new ErrorMessage(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/Event.ts b/ts/structs/Event.ts index fdf0a8c2..110456b0 100644 --- a/ts/structs/Event.ts +++ b/ts/structs/Event.ts @@ -55,6 +55,7 @@ export class FundingBroadcastSafe extends Event { super(null, ptr); const funding_txo: number = obj.funding_txo; const funding_txo_hu_conv: OutPoint = new OutPoint(null, funding_txo); + funding_txo_hu_conv.ptrs_to.add(this); this.funding_txo = funding_txo_hu_conv; this.user_channel_id = obj.user_channel_id; } diff --git a/ts/structs/FundingCreated.ts b/ts/structs/FundingCreated.ts index 8be1473c..118811fd 100644 --- a/ts/structs/FundingCreated.ts +++ b/ts/structs/FundingCreated.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public FundingCreated clone() { number ret = bindings.FundingCreated_clone(this.ptr); const ret_hu_conv: FundingCreated = new FundingCreated(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -63,6 +64,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static FundingCreated constructor_new(Uint8Array temporary_channel_id_arg, Uint8Array funding_txid_arg, number funding_output_index_arg, Uint8Array signature_arg) { number ret = bindings.FundingCreated_new(temporary_channel_id_arg, funding_txid_arg, funding_output_index_arg, signature_arg); const ret_hu_conv: FundingCreated = new FundingCreated(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -74,6 +76,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static FundingCreated constructor_read(Uint8Array ser) { number ret = bindings.FundingCreated_read(ser); const ret_hu_conv: FundingCreated = new FundingCreated(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/FundingLocked.ts b/ts/structs/FundingLocked.ts index 80725c1b..b298b222 100644 --- a/ts/structs/FundingLocked.ts +++ b/ts/structs/FundingLocked.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public FundingLocked clone() { number ret = bindings.FundingLocked_clone(this.ptr); const ret_hu_conv: FundingLocked = new FundingLocked(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static FundingLocked constructor_new(Uint8Array channel_id_arg, Uint8Array next_per_commitment_point_arg) { number ret = bindings.FundingLocked_new(channel_id_arg, next_per_commitment_point_arg); const ret_hu_conv: FundingLocked = new FundingLocked(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -56,6 +58,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static FundingLocked constructor_read(Uint8Array ser) { number ret = bindings.FundingLocked_read(ser); const ret_hu_conv: FundingLocked = new FundingLocked(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/FundingSigned.ts b/ts/structs/FundingSigned.ts index 3a1a0731..76fc8ad2 100644 --- a/ts/structs/FundingSigned.ts +++ b/ts/structs/FundingSigned.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public FundingSigned clone() { number ret = bindings.FundingSigned_clone(this.ptr); const ret_hu_conv: FundingSigned = new FundingSigned(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static FundingSigned constructor_new(Uint8Array channel_id_arg, Uint8Array signature_arg) { number ret = bindings.FundingSigned_new(channel_id_arg, signature_arg); const ret_hu_conv: FundingSigned = new FundingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -56,6 +58,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static FundingSigned constructor_read(Uint8Array ser) { number ret = bindings.FundingSigned_read(ser); const ret_hu_conv: FundingSigned = new FundingSigned(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/GossipTimestampFilter.ts b/ts/structs/GossipTimestampFilter.ts index 012af416..8b2e3320 100644 --- a/ts/structs/GossipTimestampFilter.ts +++ b/ts/structs/GossipTimestampFilter.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public GossipTimestampFilter clone() { number ret = bindings.GossipTimestampFilter_clone(this.ptr); const ret_hu_conv: GossipTimestampFilter = new GossipTimestampFilter(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,6 +55,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static GossipTimestampFilter constructor_new(Uint8Array chain_hash_arg, number first_timestamp_arg, number timestamp_range_arg) { number ret = bindings.GossipTimestampFilter_new(chain_hash_arg, first_timestamp_arg, timestamp_range_arg); const ret_hu_conv: GossipTimestampFilter = new GossipTimestampFilter(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/HTLCFailChannelUpdate.ts b/ts/structs/HTLCFailChannelUpdate.ts index 2d33a138..5f76a0df 100644 --- a/ts/structs/HTLCFailChannelUpdate.ts +++ b/ts/structs/HTLCFailChannelUpdate.ts @@ -29,6 +29,7 @@ export class ChannelUpdateMessage extends HTLCFailChannelUpdate { super(null, ptr); const msg: number = obj.msg; const msg_hu_conv: ChannelUpdate = new ChannelUpdate(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } diff --git a/ts/structs/HTLCOutputInCommitment.ts b/ts/structs/HTLCOutputInCommitment.ts index 938d16f8..545685e5 100644 --- a/ts/structs/HTLCOutputInCommitment.ts +++ b/ts/structs/HTLCOutputInCommitment.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public HTLCOutputInCommitment clone() { number ret = bindings.HTLCOutputInCommitment_clone(this.ptr); const ret_hu_conv: HTLCOutputInCommitment = new HTLCOutputInCommitment(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -68,6 +69,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static HTLCOutputInCommitment constructor_read(Uint8Array ser) { number ret = bindings.HTLCOutputInCommitment_read(ser); const ret_hu_conv: HTLCOutputInCommitment = new HTLCOutputInCommitment(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/HTLCUpdate.ts b/ts/structs/HTLCUpdate.ts index 52dd102e..075dc2db 100644 --- a/ts/structs/HTLCUpdate.ts +++ b/ts/structs/HTLCUpdate.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public HTLCUpdate clone() { number ret = bindings.HTLCUpdate_clone(this.ptr); const ret_hu_conv: HTLCUpdate = new HTLCUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,6 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static HTLCUpdate constructor_read(Uint8Array ser) { number ret = bindings.HTLCUpdate_read(ser); const ret_hu_conv: HTLCUpdate = new HTLCUpdate(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/HolderCommitmentTransaction.ts b/ts/structs/HolderCommitmentTransaction.ts index ad485a4c..4014c3a2 100644 --- a/ts/structs/HolderCommitmentTransaction.ts +++ b/ts/structs/HolderCommitmentTransaction.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public HolderCommitmentTransaction clone() { number ret = bindings.HolderCommitmentTransaction_clone(this.ptr); const ret_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,12 +46,14 @@ import * as bindings from '../bindings' // TODO: figure out location public static HolderCommitmentTransaction constructor_read(Uint8Array ser) { number ret = bindings.HolderCommitmentTransaction_read(ser); const ret_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public static HolderCommitmentTransaction constructor_new(CommitmentTransaction commitment_tx, Uint8Array counterparty_sig, Uint8Array[] counterparty_htlc_sigs, Uint8Array holder_funding_key, Uint8Array counterparty_funding_key) { number ret = bindings.HolderCommitmentTransaction_new(commitment_tx == null ? 0 : commitment_tx.ptr & ~1, counterparty_sig, counterparty_htlc_sigs, holder_funding_key, counterparty_funding_key); const ret_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(commitment_tx); return ret_hu_conv; } diff --git a/ts/structs/InMemoryChannelKeys.ts b/ts/structs/InMemoryChannelKeys.ts index 4e4e375f..11321cb6 100644 --- a/ts/structs/InMemoryChannelKeys.ts +++ b/ts/structs/InMemoryChannelKeys.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public InMemoryChannelKeys clone() { number ret = bindings.InMemoryChannelKeys_clone(this.ptr); const ret_hu_conv: InMemoryChannelKeys = new InMemoryChannelKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -81,12 +82,14 @@ import * as bindings from '../bindings' // TODO: figure out location public static InMemoryChannelKeys constructor_new(Uint8Array funding_key, Uint8Array revocation_base_key, Uint8Array payment_key, Uint8Array delayed_payment_base_key, Uint8Array htlc_base_key, Uint8Array commitment_seed, number channel_value_satoshis, TwoTuple key_derivation_params) { number ret = bindings.InMemoryChannelKeys_new(funding_key, revocation_base_key, payment_key, delayed_payment_base_key, htlc_base_key, commitment_seed, channel_value_satoshis, bindings.C2Tuple_u64u64Z_new(key_derivation_params.a, key_derivation_params.b)); const ret_hu_conv: InMemoryChannelKeys = new InMemoryChannelKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public ChannelPublicKeys counterparty_pubkeys() { number ret = bindings.InMemoryChannelKeys_counterparty_pubkeys(this.ptr); const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -108,12 +111,14 @@ import * as bindings from '../bindings' // TODO: figure out location public OutPoint funding_outpoint() { number ret = bindings.InMemoryChannelKeys_funding_outpoint(this.ptr); const ret_hu_conv: OutPoint = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelTransactionParameters get_channel_parameters() { number ret = bindings.InMemoryChannelKeys_get_channel_parameters(this.ptr); const ret_hu_conv: ChannelTransactionParameters = new ChannelTransactionParameters(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/Init.ts b/ts/structs/Init.ts index 69918e57..f396b0bf 100644 --- a/ts/structs/Init.ts +++ b/ts/structs/Init.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public Init clone() { number ret = bindings.Init_clone(this.ptr); const ret_hu_conv: Init = new Init(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/KeysManager.ts b/ts/structs/KeysManager.ts index 6eefcc50..7627c0e3 100644 --- a/ts/structs/KeysManager.ts +++ b/ts/structs/KeysManager.ts @@ -21,12 +21,14 @@ import * as bindings from '../bindings' // TODO: figure out location public static KeysManager constructor_new(Uint8Array seed, LDKNetwork network, number starting_time_secs, number starting_time_nanos) { number ret = bindings.KeysManager_new(seed, network, starting_time_secs, starting_time_nanos); const ret_hu_conv: KeysManager = new KeysManager(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } public InMemoryChannelKeys derive_channel_keys(number channel_value_satoshis, number params_1, number params_2) { number ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, params_1, params_2); const ret_hu_conv: InMemoryChannelKeys = new InMemoryChannelKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/LightningError.ts b/ts/structs/LightningError.ts index 57bf1809..74b3a586 100644 --- a/ts/structs/LightningError.ts +++ b/ts/structs/LightningError.ts @@ -18,6 +18,13 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.LightningError_free(this.ptr); } } + public LightningError clone() { + number ret = bindings.LightningError_clone(this.ptr); + const ret_hu_conv: LightningError = new LightningError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public String get_err() { String ret = bindings.LightningError_get_err(this.ptr); return ret; @@ -41,6 +48,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static LightningError constructor_new(Uint8Array err_arg, ErrorAction action_arg) { number ret = bindings.LightningError_new(err_arg, action_arg.ptr); const ret_hu_conv: LightningError = new LightningError(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/LockedNetworkGraph.ts b/ts/structs/LockedNetworkGraph.ts index 7928dc0e..26fe800a 100644 --- a/ts/structs/LockedNetworkGraph.ts +++ b/ts/structs/LockedNetworkGraph.ts @@ -20,6 +20,7 @@ import * as bindings from '../bindings' // TODO: figure out location public NetworkGraph graph() { number ret = bindings.LockedNetworkGraph_graph(this.ptr); const ret_hu_conv: NetworkGraph = new NetworkGraph(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/MessageHandler.ts b/ts/structs/MessageHandler.ts index 3f69fec3..b356c76b 100644 --- a/ts/structs/MessageHandler.ts +++ b/ts/structs/MessageHandler.ts @@ -45,6 +45,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static MessageHandler constructor_new(ChannelMessageHandler chan_handler_arg, RoutingMessageHandler route_handler_arg) { number ret = bindings.MessageHandler_new(chan_handler_arg == null ? 0 : chan_handler_arg.ptr, route_handler_arg == null ? 0 : route_handler_arg.ptr); const ret_hu_conv: MessageHandler = new MessageHandler(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chan_handler_arg); ret_hu_conv.ptrs_to.add(route_handler_arg); return ret_hu_conv; diff --git a/ts/structs/MessageSendEvent.ts b/ts/structs/MessageSendEvent.ts index cab57130..7c8ebdfa 100644 --- a/ts/structs/MessageSendEvent.ts +++ b/ts/structs/MessageSendEvent.ts @@ -76,6 +76,7 @@ export class SendAcceptChannel extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: AcceptChannel = new AcceptChannel(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -87,6 +88,7 @@ export class SendOpenChannel extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: OpenChannel = new OpenChannel(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -98,6 +100,7 @@ export class SendFundingCreated extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: FundingCreated = new FundingCreated(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -109,6 +112,7 @@ export class SendFundingSigned extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: FundingSigned = new FundingSigned(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -120,6 +124,7 @@ export class SendFundingLocked extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: FundingLocked = new FundingLocked(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -131,6 +136,7 @@ export class SendAnnouncementSignatures extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: AnnouncementSignatures = new AnnouncementSignatures(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -142,6 +148,7 @@ export class UpdateHTLCs extends MessageSendEvent { this.node_id = obj.node_id; const updates: number = obj.updates; const updates_hu_conv: CommitmentUpdate = new CommitmentUpdate(null, updates); + updates_hu_conv.ptrs_to.add(this); this.updates = updates_hu_conv; } } @@ -153,6 +160,7 @@ export class SendRevokeAndACK extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: RevokeAndACK = new RevokeAndACK(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -164,6 +172,7 @@ export class SendClosingSigned extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: ClosingSigned = new ClosingSigned(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -175,6 +184,7 @@ export class SendShutdown extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: Shutdown = new Shutdown(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -186,6 +196,7 @@ export class SendChannelReestablish extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: ChannelReestablish = new ChannelReestablish(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -196,9 +207,11 @@ export class BroadcastChannelAnnouncement extends MessageSendEvent { super(null, ptr); const msg: number = obj.msg; const msg_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; const update_msg: number = obj.update_msg; const update_msg_hu_conv: ChannelUpdate = new ChannelUpdate(null, update_msg); + update_msg_hu_conv.ptrs_to.add(this); this.update_msg = update_msg_hu_conv; } } @@ -208,6 +221,7 @@ export class BroadcastNodeAnnouncement extends MessageSendEvent { super(null, ptr); const msg: number = obj.msg; const msg_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -217,6 +231,7 @@ export class BroadcastChannelUpdate extends MessageSendEvent { super(null, ptr); const msg: number = obj.msg; const msg_hu_conv: ChannelUpdate = new ChannelUpdate(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -250,6 +265,7 @@ export class SendChannelRangeQuery extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: QueryChannelRange = new QueryChannelRange(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } @@ -261,6 +277,7 @@ export class SendShortIdsQuery extends MessageSendEvent { this.node_id = obj.node_id; const msg: number = obj.msg; const msg_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, msg); + msg_hu_conv.ptrs_to.add(this); this.msg = msg_hu_conv; } } diff --git a/ts/structs/MonitorEvent.ts b/ts/structs/MonitorEvent.ts index 2f654628..b24e6602 100644 --- a/ts/structs/MonitorEvent.ts +++ b/ts/structs/MonitorEvent.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public MonitorEvent clone() { number ret = bindings.MonitorEvent_clone(this.ptr); const ret_hu_conv: MonitorEvent = new MonitorEvent(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/MonitorUpdateError.ts b/ts/structs/MonitorUpdateError.ts index 8d379521..1c457a8c 100644 --- a/ts/structs/MonitorUpdateError.ts +++ b/ts/structs/MonitorUpdateError.ts @@ -18,4 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.MonitorUpdateError_free(this.ptr); } } + public MonitorUpdateError clone() { + number ret = bindings.MonitorUpdateError_clone(this.ptr); + const ret_hu_conv: MonitorUpdateError = new MonitorUpdateError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + } diff --git a/ts/structs/NetGraphMsgHandler.ts b/ts/structs/NetGraphMsgHandler.ts index 082de30a..5b7cbe89 100644 --- a/ts/structs/NetGraphMsgHandler.ts +++ b/ts/structs/NetGraphMsgHandler.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static NetGraphMsgHandler constructor_new(Uint8Array genesis_hash, Access chain_access, Logger logger) { number ret = bindings.NetGraphMsgHandler_new(genesis_hash, chain_access == null ? 0 : chain_access.ptr, logger == null ? 0 : logger.ptr); const ret_hu_conv: NetGraphMsgHandler = new NetGraphMsgHandler(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chain_access); ret_hu_conv.ptrs_to.add(logger); return ret_hu_conv; @@ -29,6 +30,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static NetGraphMsgHandler constructor_from_net_graph(Access chain_access, Logger logger, Uint8Array network_graph_genesis_hash) { number ret = bindings.NetGraphMsgHandler_from_net_graph(chain_access == null ? 0 : chain_access.ptr, logger == null ? 0 : logger.ptr, bindings.NetworkGraph_new(network_graph_genesis_hash)); const ret_hu_conv: NetGraphMsgHandler = new NetGraphMsgHandler(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(chain_access); ret_hu_conv.ptrs_to.add(logger); return ret_hu_conv; @@ -37,6 +39,7 @@ import * as bindings from '../bindings' // TODO: figure out location public LockedNetworkGraph read_locked_graph() { number ret = bindings.NetGraphMsgHandler_read_locked_graph(this.ptr); const ret_hu_conv: LockedNetworkGraph = new LockedNetworkGraph(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/NetworkGraph.ts b/ts/structs/NetworkGraph.ts index 9729f331..7f590881 100644 --- a/ts/structs/NetworkGraph.ts +++ b/ts/structs/NetworkGraph.ts @@ -32,6 +32,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static NetworkGraph constructor_new(Uint8Array genesis_hash) { number ret = bindings.NetworkGraph_new(genesis_hash); const ret_hu_conv: NetworkGraph = new NetworkGraph(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/NodeAnnouncement.ts b/ts/structs/NodeAnnouncement.ts index 952f2bdf..38520e1a 100644 --- a/ts/structs/NodeAnnouncement.ts +++ b/ts/structs/NodeAnnouncement.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public NodeAnnouncement clone() { number ret = bindings.NodeAnnouncement_clone(this.ptr); const ret_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -36,6 +37,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UnsignedNodeAnnouncement get_contents() { number ret = bindings.NodeAnnouncement_get_contents(this.ptr); const ret_hu_conv: UnsignedNodeAnnouncement = new UnsignedNodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -47,6 +49,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static NodeAnnouncement constructor_new(Uint8Array signature_arg, UnsignedNodeAnnouncement contents_arg) { number ret = bindings.NodeAnnouncement_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1); const ret_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(contents_arg); return ret_hu_conv; } @@ -59,6 +62,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static NodeAnnouncement constructor_read(Uint8Array ser) { number ret = bindings.NodeAnnouncement_read(ser); const ret_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/NodeAnnouncementInfo.ts b/ts/structs/NodeAnnouncementInfo.ts index 587f098f..2fa86c39 100644 --- a/ts/structs/NodeAnnouncementInfo.ts +++ b/ts/structs/NodeAnnouncementInfo.ts @@ -18,15 +18,31 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.NodeAnnouncementInfo_free(this.ptr); } } + public NodeAnnouncementInfo clone() { + number ret = bindings.NodeAnnouncementInfo_clone(this.ptr); + const ret_hu_conv: NodeAnnouncementInfo = new NodeAnnouncementInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public NodeFeatures get_features() { number ret = bindings.NodeAnnouncementInfo_get_features(this.ptr); const ret_hu_conv: NodeFeatures = new NodeFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(NodeFeatures val) { bindings.NodeAnnouncementInfo_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public number get_last_update() { @@ -64,6 +80,7 @@ import * as bindings from '../bindings' // TODO: figure out location public NodeAnnouncement get_announcement_message() { number ret = bindings.NodeAnnouncementInfo_get_announcement_message(this.ptr); const ret_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -75,7 +92,16 @@ import * as bindings from '../bindings' // TODO: figure out location public static NodeAnnouncementInfo constructor_new(NodeFeatures features_arg, number last_update_arg, Uint8Array rgb_arg, Uint8Array alias_arg, NetAddress[] addresses_arg, NodeAnnouncement announcement_message_arg) { number ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr & ~1, last_update_arg, rgb_arg, alias_arg, (number[])Arrays.stream(addresses_arg).map(arr_conv_12 -> arr_conv_12.ptr).toArray(), announcement_message_arg == null ? 0 : announcement_message_arg.ptr & ~1); const ret_hu_conv: NodeAnnouncementInfo = new NodeAnnouncementInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(features_arg); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after ret_hu_conv call, features_arg is reset to null and is now a dummy object. + features_arg.ptr = 0; /* TODO 2 NetAddress */; ret_hu_conv.ptrs_to.add(announcement_message_arg); return ret_hu_conv; diff --git a/ts/structs/NodeInfo.ts b/ts/structs/NodeInfo.ts index dd830a6d..0fd77a14 100644 --- a/ts/structs/NodeInfo.ts +++ b/ts/structs/NodeInfo.ts @@ -18,6 +18,13 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.NodeInfo_free(this.ptr); } } + public NodeInfo clone() { + number ret = bindings.NodeInfo_clone(this.ptr); + const ret_hu_conv: NodeInfo = new NodeInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public void set_channels(number[] val) { bindings.NodeInfo_set_channels(this.ptr, val); } @@ -25,6 +32,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RoutingFees get_lowest_inbound_channel_fees() { number ret = bindings.NodeInfo_get_lowest_inbound_channel_fees(this.ptr); const ret_hu_conv: RoutingFees = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -36,20 +44,21 @@ import * as bindings from '../bindings' // TODO: figure out location public NodeAnnouncementInfo get_announcement_info() { number ret = bindings.NodeInfo_get_announcement_info(this.ptr); const ret_hu_conv: NodeAnnouncementInfo = new NodeAnnouncementInfo(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } - public void set_announcement_info(NodeFeatures val_features_arg, number val_last_update_arg, Uint8Array val_rgb_arg, Uint8Array val_alias_arg, NetAddress[] val_addresses_arg, NodeAnnouncement val_announcement_message_arg) { - bindings.NodeInfo_set_announcement_info(this.ptr, bindings.NodeAnnouncementInfo_new(val_features_arg == null ? 0 : val_features_arg.ptr & ~1, val_last_update_arg, val_rgb_arg, val_alias_arg, (number[])Arrays.stream(val_addresses_arg).map(arr_conv_12 -> arr_conv_12.ptr).toArray(), val_announcement_message_arg == null ? 0 : val_announcement_message_arg.ptr & ~1)); + public void set_announcement_info(NodeAnnouncementInfo val) { + bindings.NodeInfo_set_announcement_info(this.ptr, val == null ? 0 : val.ptr & ~1); + this.ptrs_to.add(val); } - public static NodeInfo constructor_new(number[] channels_arg, RoutingFees lowest_inbound_channel_fees_arg, NodeFeatures announcement_info_arg_features_arg, number announcement_info_arg_last_update_arg, Uint8Array announcement_info_arg_rgb_arg, Uint8Array announcement_info_arg_alias_arg, NetAddress[] announcement_info_arg_addresses_arg, NodeAnnouncement announcement_info_arg_announcement_message_arg) { - number ret = bindings.NodeInfo_new(channels_arg, lowest_inbound_channel_fees_arg == null ? 0 : lowest_inbound_channel_fees_arg.ptr & ~1, bindings.NodeAnnouncementInfo_new(announcement_info_arg_features_arg == null ? 0 : announcement_info_arg_features_arg.ptr & ~1, announcement_info_arg_last_update_arg, announcement_info_arg_rgb_arg, announcement_info_arg_alias_arg, (number[])Arrays.stream(announcement_info_arg_addresses_arg).map(arr_conv_12 -> arr_conv_12.ptr).toArray(), announcement_info_arg_announcement_message_arg == null ? 0 : announcement_info_arg_announcement_message_arg.ptr & ~1)); + public static NodeInfo constructor_new(number[] channels_arg, RoutingFees lowest_inbound_channel_fees_arg, NodeAnnouncementInfo announcement_info_arg) { + number ret = bindings.NodeInfo_new(channels_arg, lowest_inbound_channel_fees_arg == null ? 0 : lowest_inbound_channel_fees_arg.ptr & ~1, announcement_info_arg == null ? 0 : announcement_info_arg.ptr & ~1); const ret_hu_conv: NodeInfo = new NodeInfo(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(lowest_inbound_channel_fees_arg); - ret_hu_conv.ptrs_to.add(announcement_info_arg_features_arg); - /* TODO 2 NetAddress */; - ret_hu_conv.ptrs_to.add(announcement_info_arg_announcement_message_arg); + ret_hu_conv.ptrs_to.add(announcement_info_arg); return ret_hu_conv; } diff --git a/ts/structs/OpenChannel.ts b/ts/structs/OpenChannel.ts index 6c6f0c14..62485309 100644 --- a/ts/structs/OpenChannel.ts +++ b/ts/structs/OpenChannel.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public OpenChannel clone() { number ret = bindings.OpenChannel_clone(this.ptr); const ret_hu_conv: OpenChannel = new OpenChannel(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -194,6 +195,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static OpenChannel constructor_read(Uint8Array ser) { number ret = bindings.OpenChannel_read(ser); const ret_hu_conv: OpenChannel = new OpenChannel(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/OutPoint.ts b/ts/structs/OutPoint.ts index 1ceb657f..decbf7b7 100644 --- a/ts/structs/OutPoint.ts +++ b/ts/structs/OutPoint.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public OutPoint clone() { number ret = bindings.OutPoint_clone(this.ptr); const ret_hu_conv: OutPoint = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static OutPoint constructor_new(Uint8Array txid_arg, number index_arg) { number ret = bindings.OutPoint_new(txid_arg, index_arg); const ret_hu_conv: OutPoint = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -61,6 +63,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static OutPoint constructor_read(Uint8Array ser) { number ret = bindings.OutPoint_read(ser); const ret_hu_conv: OutPoint = new OutPoint(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/PaymentSendFailure.ts b/ts/structs/PaymentSendFailure.ts index 04ea895d..32bef844 100644 --- a/ts/structs/PaymentSendFailure.ts +++ b/ts/structs/PaymentSendFailure.ts @@ -18,4 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.PaymentSendFailure_free(this.ptr); } } + public PaymentSendFailure clone() { + number ret = bindings.PaymentSendFailure_clone(this.ptr); + const ret_hu_conv: PaymentSendFailure = new PaymentSendFailure(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + } diff --git a/ts/structs/PeerHandleError.ts b/ts/structs/PeerHandleError.ts index f0b82ef8..2bae7bb7 100644 --- a/ts/structs/PeerHandleError.ts +++ b/ts/structs/PeerHandleError.ts @@ -18,6 +18,13 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.PeerHandleError_free(this.ptr); } } + public PeerHandleError clone() { + number ret = bindings.PeerHandleError_clone(this.ptr); + const ret_hu_conv: PeerHandleError = new PeerHandleError(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public boolean get_no_connection_possible() { boolean ret = bindings.PeerHandleError_get_no_connection_possible(this.ptr); return ret; @@ -30,6 +37,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static PeerHandleError constructor_new(boolean no_connection_possible_arg) { number ret = bindings.PeerHandleError_new(no_connection_possible_arg); const ret_hu_conv: PeerHandleError = new PeerHandleError(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/PeerManager.ts b/ts/structs/PeerManager.ts index 3fa85fc5..165440cf 100644 --- a/ts/structs/PeerManager.ts +++ b/ts/structs/PeerManager.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static PeerManager constructor_new(ChannelMessageHandler message_handler_chan_handler_arg, RoutingMessageHandler message_handler_route_handler_arg, Uint8Array our_node_secret, Uint8Array ephemeral_random_data, Logger logger) { number ret = bindings.PeerManager_new(bindings.MessageHandler_new(message_handler_chan_handler_arg == null ? 0 : message_handler_chan_handler_arg.ptr, message_handler_route_handler_arg == null ? 0 : message_handler_route_handler_arg.ptr), our_node_secret, ephemeral_random_data, logger == null ? 0 : logger.ptr); const ret_hu_conv: PeerManager = new PeerManager(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(message_handler_chan_handler_arg); ret_hu_conv.ptrs_to.add(message_handler_route_handler_arg); ret_hu_conv.ptrs_to.add(logger); diff --git a/ts/structs/Persist.ts b/ts/structs/Persist.ts index 16ebedc5..dbfc8aeb 100644 --- a/ts/structs/Persist.ts +++ b/ts/structs/Persist.ts @@ -34,6 +34,7 @@ import * as bindings from '../bindings' // TODO: figure out location // todo: in-line interface filling persist_new_channel (id: number, data: number): number { const id_hu_conv: OutPoint = new OutPoint(null, id); + id_hu_conv.ptrs_to.add(this); const data_hu_conv: ChannelMonitor = new ChannelMonitor(null, data); Result_NoneChannelMonitorUpdateErrZ ret = arg.persist_new_channel(id_hu_conv, data_hu_conv); result: number = ret != null ? ret.ptr : 0; @@ -42,6 +43,7 @@ import * as bindings from '../bindings' // TODO: figure out location update_persisted_channel (id: number, update: number, data: number): number { const id_hu_conv: OutPoint = new OutPoint(null, id); + id_hu_conv.ptrs_to.add(this); const update_hu_conv: ChannelMonitorUpdate = new ChannelMonitorUpdate(null, update); const data_hu_conv: ChannelMonitor = new ChannelMonitor(null, data); Result_NoneChannelMonitorUpdateErrZ ret = arg.update_persisted_channel(id_hu_conv, update_hu_conv, data_hu_conv); diff --git a/ts/structs/Ping.ts b/ts/structs/Ping.ts index d915f29e..2cc1a913 100644 --- a/ts/structs/Ping.ts +++ b/ts/structs/Ping.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public Ping clone() { number ret = bindings.Ping_clone(this.ptr); const ret_hu_conv: Ping = new Ping(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static Ping constructor_new(number ponglen_arg, number byteslen_arg) { number ret = bindings.Ping_new(ponglen_arg, byteslen_arg); const ret_hu_conv: Ping = new Ping(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/Pong.ts b/ts/structs/Pong.ts index 3305de2a..63379926 100644 --- a/ts/structs/Pong.ts +++ b/ts/structs/Pong.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public Pong clone() { number ret = bindings.Pong_clone(this.ptr); const ret_hu_conv: Pong = new Pong(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -36,6 +37,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static Pong constructor_new(number byteslen_arg) { number ret = bindings.Pong_new(byteslen_arg); const ret_hu_conv: Pong = new Pong(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/QueryChannelRange.ts b/ts/structs/QueryChannelRange.ts index 8b7cbea7..8b26591c 100644 --- a/ts/structs/QueryChannelRange.ts +++ b/ts/structs/QueryChannelRange.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public QueryChannelRange clone() { number ret = bindings.QueryChannelRange_clone(this.ptr); const ret_hu_conv: QueryChannelRange = new QueryChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,6 +55,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static QueryChannelRange constructor_new(Uint8Array chain_hash_arg, number first_blocknum_arg, number number_of_blocks_arg) { number ret = bindings.QueryChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg); const ret_hu_conv: QueryChannelRange = new QueryChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/QueryShortChannelIds.ts b/ts/structs/QueryShortChannelIds.ts index 3c2efc5b..58643a72 100644 --- a/ts/structs/QueryShortChannelIds.ts +++ b/ts/structs/QueryShortChannelIds.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public QueryShortChannelIds clone() { number ret = bindings.QueryShortChannelIds_clone(this.ptr); const ret_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -40,6 +41,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static QueryShortChannelIds constructor_new(Uint8Array chain_hash_arg, number[] short_channel_ids_arg) { number ret = bindings.QueryShortChannelIds_new(chain_hash_arg, short_channel_ids_arg); const ret_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ReplyChannelRange.ts b/ts/structs/ReplyChannelRange.ts index 21a6e01a..3d2ef178 100644 --- a/ts/structs/ReplyChannelRange.ts +++ b/ts/structs/ReplyChannelRange.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ReplyChannelRange clone() { number ret = bindings.ReplyChannelRange_clone(this.ptr); const ret_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -67,6 +68,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ReplyChannelRange constructor_new(Uint8Array chain_hash_arg, number first_blocknum_arg, number number_of_blocks_arg, boolean full_information_arg, number[] short_channel_ids_arg) { number ret = bindings.ReplyChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg, full_information_arg, short_channel_ids_arg); const ret_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/ReplyShortChannelIdsEnd.ts b/ts/structs/ReplyShortChannelIdsEnd.ts index 9ab50fea..6b2a2101 100644 --- a/ts/structs/ReplyShortChannelIdsEnd.ts +++ b/ts/structs/ReplyShortChannelIdsEnd.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ReplyShortChannelIdsEnd clone() { number ret = bindings.ReplyShortChannelIdsEnd_clone(this.ptr); const ret_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static ReplyShortChannelIdsEnd constructor_new(Uint8Array chain_hash_arg, boolean full_information_arg) { number ret = bindings.ReplyShortChannelIdsEnd_new(chain_hash_arg, full_information_arg); const ret_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.ts b/ts/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.ts index e9feca6e..81d95ece 100644 --- a/ts/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.ts +++ b/ts/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.ts @@ -22,12 +22,22 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB number res = bindings.LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(ptr); Uint8Array res_a = bindings.LDKC2Tuple_BlockHashChannelManagerZ_get_a(res); number res_b = bindings.LDKC2Tuple_BlockHashChannelManagerZ_get_b(res); - const res_b_hu_conv: ChannelManager = new ChannelManager(null, res_b);; + const res_b_hu_conv: ChannelManager = new ChannelManager(null, res_b); + res_b_hu_conv.ptrs_to.add(this);; TwoTuple res_conv = new TwoTuple(res_a, res_b_hu_conv); this.res = res_conv; } public Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK(TwoTuple res) { - this(null, bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelManagerZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1/*XXX: this.ptrs_to.add(res_b)*/))); + this(null, bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelManagerZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1))); + this.ptrs_to.add(res.b); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, res.b is reset to null and is now a dummy object. + res.b.ptr = 0; } } @@ -37,6 +47,7 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB super(_dummy, ptr); number err = bindings.LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.ts b/ts/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.ts index f5e3a80e..5b2d6c20 100644 --- a/ts/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.ts +++ b/ts/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.ts @@ -22,12 +22,14 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB number res = bindings.LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(ptr); Uint8Array res_a = bindings.LDKC2Tuple_BlockHashChannelMonitorZ_get_a(res); number res_b = bindings.LDKC2Tuple_BlockHashChannelMonitorZ_get_b(res); - const res_b_hu_conv: ChannelMonitor = new ChannelMonitor(null, res_b);; + const res_b_hu_conv: ChannelMonitor = new ChannelMonitor(null, res_b); + res_b_hu_conv.ptrs_to.add(this);; TwoTuple res_conv = new TwoTuple(res_a, res_b_hu_conv); this.res = res_conv; } public Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK(TwoTuple res) { - this(null, bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelMonitorZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1/*XXX: this.ptrs_to.add(res_b)*/))); + this(null, bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(bindings.C2Tuple_BlockHashChannelMonitorZ_new(res.a, res.b == null ? 0 : res.b.ptr & ~1))); + this.ptrs_to.add(res.b); } } @@ -37,6 +39,7 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB super(_dummy, ptr); number err = bindings.LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.ts b/ts/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.ts index 950cd10d..efef7e62 100644 --- a/ts/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.ts +++ b/ts/structs/Result_CResult_NetAddressu8ZDecodeErrorZ.ts @@ -34,6 +34,7 @@ public class Result_CResult_NetAddressu8ZDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_CResult_NetAddressu8ZDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_CResult_NetAddressu8ZDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_CVec_u8ZPeerHandleErrorZ.ts b/ts/structs/Result_CVec_u8ZPeerHandleErrorZ.ts index daa927a5..2b318343 100644 --- a/ts/structs/Result_CVec_u8ZPeerHandleErrorZ.ts +++ b/ts/structs/Result_CVec_u8ZPeerHandleErrorZ.ts @@ -32,6 +32,7 @@ public class Result_CVec_u8ZPeerHandleErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_CVec_u8ZPeerHandleErrorZ_get_err(ptr); const err_hu_conv: PeerHandleError = new PeerHandleError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_CVec_u8ZPeerHandleErrorZ_Err(PeerHandleError err) { diff --git a/ts/structs/Result_ChanKeySignerDecodeErrorZ.ts b/ts/structs/Result_ChanKeySignerDecodeErrorZ.ts index 51a192cf..c8e60414 100644 --- a/ts/structs/Result_ChanKeySignerDecodeErrorZ.ts +++ b/ts/structs/Result_ChanKeySignerDecodeErrorZ.ts @@ -36,6 +36,7 @@ public class Result_ChanKeySignerDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_ChanKeySignerDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ChanKeySignerDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_ChannelMonitorUpdateDecodeErrorZ.ts b/ts/structs/Result_ChannelMonitorUpdateDecodeErrorZ.ts index bb164245..28bba160 100644 --- a/ts/structs/Result_ChannelMonitorUpdateDecodeErrorZ.ts +++ b/ts/structs/Result_ChannelMonitorUpdateDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(ptr); const res_hu_conv: ChannelMonitorUpdate = new ChannelMonitorUpdate(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ChannelMonitorUpdateDecodeErrorZ_OK(ChannelMonitorUpdate res) { @@ -35,6 +36,7 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ChannelMonitorUpdateDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_ChannelReestablishDecodeErrorZ.ts b/ts/structs/Result_ChannelReestablishDecodeErrorZ.ts index 1abe894f..13377d67 100644 --- a/ts/structs/Result_ChannelReestablishDecodeErrorZ.ts +++ b/ts/structs/Result_ChannelReestablishDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(ptr); const res_hu_conv: ChannelReestablish = new ChannelReestablish(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ChannelReestablishDecodeErrorZ_OK(ChannelReestablish res) { @@ -35,6 +36,7 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_ChannelReestablishDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ChannelReestablishDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_ErrorMessageDecodeErrorZ.ts b/ts/structs/Result_ErrorMessageDecodeErrorZ.ts index 12b75fe0..f3060b29 100644 --- a/ts/structs/Result_ErrorMessageDecodeErrorZ.ts +++ b/ts/structs/Result_ErrorMessageDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_ErrorMessageDecodeErrorZ_get_ok(ptr); const res_hu_conv: ErrorMessage = new ErrorMessage(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ErrorMessageDecodeErrorZ_OK(ErrorMessage res) { @@ -35,6 +36,7 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_ErrorMessageDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ErrorMessageDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_GossipTimestampFilterDecodeErrorZ.ts b/ts/structs/Result_GossipTimestampFilterDecodeErrorZ.ts index a3972e68..2e8c6498 100644 --- a/ts/structs/Result_GossipTimestampFilterDecodeErrorZ.ts +++ b/ts/structs/Result_GossipTimestampFilterDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(ptr); const res_hu_conv: GossipTimestampFilter = new GossipTimestampFilter(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_GossipTimestampFilterDecodeErrorZ_OK(GossipTimestampFilter res) { @@ -35,6 +36,7 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_GossipTimestampFilterDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_GossipTimestampFilterDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_InMemoryChannelKeysDecodeErrorZ.ts b/ts/structs/Result_InMemoryChannelKeysDecodeErrorZ.ts index 41c34a7a..0d03fd66 100644 --- a/ts/structs/Result_InMemoryChannelKeysDecodeErrorZ.ts +++ b/ts/structs/Result_InMemoryChannelKeysDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_InMemoryChannelKeysDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_InMemoryChannelKeysDecodeErrorZ_get_ok(ptr); const res_hu_conv: InMemoryChannelKeys = new InMemoryChannelKeys(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_InMemoryChannelKeysDecodeErrorZ_OK(InMemoryChannelKeys res) { @@ -35,6 +36,7 @@ public class Result_InMemoryChannelKeysDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_InMemoryChannelKeysDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_InMemoryChannelKeysDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_InitDecodeErrorZ.ts b/ts/structs/Result_InitDecodeErrorZ.ts index bd37f300..168ffcdb 100644 --- a/ts/structs/Result_InitDecodeErrorZ.ts +++ b/ts/structs/Result_InitDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_InitDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_InitDecodeErrorZ_get_ok(ptr); const res_hu_conv: Init = new Init(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_InitDecodeErrorZ_OK(Init res) { @@ -35,6 +36,7 @@ public class Result_InitDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_InitDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_InitDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_NetworkGraphDecodeErrorZ.ts b/ts/structs/Result_NetworkGraphDecodeErrorZ.ts index 997a3638..38c3c298 100644 --- a/ts/structs/Result_NetworkGraphDecodeErrorZ.ts +++ b/ts/structs/Result_NetworkGraphDecodeErrorZ.ts @@ -21,11 +21,20 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_NetworkGraphDecodeErrorZ_get_ok(ptr); const res_hu_conv: NetworkGraph = new NetworkGraph(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_NetworkGraphDecodeErrorZ_OK(NetworkGraph res) { this(null, bindings.CResult_NetworkGraphDecodeErrorZ_ok(res == null ? 0 : res.ptr & ~1)); this.ptrs_to.add(res); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, res is reset to null and is now a dummy object. + res.ptr = 0; } } @@ -35,6 +44,7 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NetworkGraphDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NetworkGraphDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_NodeAnnouncementInfoDecodeErrorZ.ts b/ts/structs/Result_NodeAnnouncementInfoDecodeErrorZ.ts index d76322e5..f0eb3fd4 100644 --- a/ts/structs/Result_NodeAnnouncementInfoDecodeErrorZ.ts +++ b/ts/structs/Result_NodeAnnouncementInfoDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(ptr); const res_hu_conv: NodeAnnouncementInfo = new NodeAnnouncementInfo(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_NodeAnnouncementInfoDecodeErrorZ_OK(NodeAnnouncementInfo res) { @@ -35,6 +36,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NodeAnnouncementInfoDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_NodeInfoDecodeErrorZ.ts b/ts/structs/Result_NodeInfoDecodeErrorZ.ts index ff25f319..3e9c8d2b 100644 --- a/ts/structs/Result_NodeInfoDecodeErrorZ.ts +++ b/ts/structs/Result_NodeInfoDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_NodeInfoDecodeErrorZ_get_ok(ptr); const res_hu_conv: NodeInfo = new NodeInfo(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_NodeInfoDecodeErrorZ_OK(NodeInfo res) { @@ -35,6 +36,7 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NodeInfoDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NodeInfoDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_NoneLightningErrorZ.ts b/ts/structs/Result_NoneLightningErrorZ.ts index 13d3735b..510af04e 100644 --- a/ts/structs/Result_NoneLightningErrorZ.ts +++ b/ts/structs/Result_NoneLightningErrorZ.ts @@ -30,6 +30,7 @@ public class Result_NoneLightningErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NoneLightningErrorZ_get_err(ptr); const err_hu_conv: LightningError = new LightningError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NoneLightningErrorZ_Err(LightningError err) { diff --git a/ts/structs/Result_NoneMonitorUpdateErrorZ.ts b/ts/structs/Result_NoneMonitorUpdateErrorZ.ts index 0790b404..5b340cba 100644 --- a/ts/structs/Result_NoneMonitorUpdateErrorZ.ts +++ b/ts/structs/Result_NoneMonitorUpdateErrorZ.ts @@ -30,6 +30,7 @@ public class Result_NoneMonitorUpdateErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NoneMonitorUpdateErrorZ_get_err(ptr); const err_hu_conv: MonitorUpdateError = new MonitorUpdateError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NoneMonitorUpdateErrorZ_Err(MonitorUpdateError err) { diff --git a/ts/structs/Result_NonePaymentSendFailureZ.ts b/ts/structs/Result_NonePaymentSendFailureZ.ts index 69636d7e..e3b4f9fb 100644 --- a/ts/structs/Result_NonePaymentSendFailureZ.ts +++ b/ts/structs/Result_NonePaymentSendFailureZ.ts @@ -30,6 +30,7 @@ public class Result_NonePaymentSendFailureZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NonePaymentSendFailureZ_get_err(ptr); const err_hu_conv: PaymentSendFailure = new PaymentSendFailure(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NonePaymentSendFailureZ_Err(PaymentSendFailure err) { diff --git a/ts/structs/Result_NonePeerHandleErrorZ.ts b/ts/structs/Result_NonePeerHandleErrorZ.ts index dc058075..6607c204 100644 --- a/ts/structs/Result_NonePeerHandleErrorZ.ts +++ b/ts/structs/Result_NonePeerHandleErrorZ.ts @@ -30,6 +30,7 @@ public class Result_NonePeerHandleErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_NonePeerHandleErrorZ_get_err(ptr); const err_hu_conv: PeerHandleError = new PeerHandleError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_NonePeerHandleErrorZ_Err(PeerHandleError err) { diff --git a/ts/structs/Result_PingDecodeErrorZ.ts b/ts/structs/Result_PingDecodeErrorZ.ts index c97cf53a..d97504f3 100644 --- a/ts/structs/Result_PingDecodeErrorZ.ts +++ b/ts/structs/Result_PingDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_PingDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_PingDecodeErrorZ_get_ok(ptr); const res_hu_conv: Ping = new Ping(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_PingDecodeErrorZ_OK(Ping res) { @@ -35,6 +36,7 @@ public class Result_PingDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_PingDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_PingDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_PongDecodeErrorZ.ts b/ts/structs/Result_PongDecodeErrorZ.ts index 16e60514..f690d02d 100644 --- a/ts/structs/Result_PongDecodeErrorZ.ts +++ b/ts/structs/Result_PongDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_PongDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_PongDecodeErrorZ_get_ok(ptr); const res_hu_conv: Pong = new Pong(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_PongDecodeErrorZ_OK(Pong res) { @@ -35,6 +36,7 @@ public class Result_PongDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_PongDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_PongDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_QueryChannelRangeDecodeErrorZ.ts b/ts/structs/Result_QueryChannelRangeDecodeErrorZ.ts index 40265bb2..dd80d084 100644 --- a/ts/structs/Result_QueryChannelRangeDecodeErrorZ.ts +++ b/ts/structs/Result_QueryChannelRangeDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(ptr); const res_hu_conv: QueryChannelRange = new QueryChannelRange(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_QueryChannelRangeDecodeErrorZ_OK(QueryChannelRange res) { @@ -35,6 +36,7 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_QueryChannelRangeDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_QueryChannelRangeDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_QueryShortChannelIdsDecodeErrorZ.ts b/ts/structs/Result_QueryShortChannelIdsDecodeErrorZ.ts index 546feb8c..b699612e 100644 --- a/ts/structs/Result_QueryShortChannelIdsDecodeErrorZ.ts +++ b/ts/structs/Result_QueryShortChannelIdsDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(ptr); const res_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_QueryShortChannelIdsDecodeErrorZ_OK(QueryShortChannelIds res) { @@ -35,6 +36,7 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_QueryShortChannelIdsDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_ReplyChannelRangeDecodeErrorZ.ts b/ts/structs/Result_ReplyChannelRangeDecodeErrorZ.ts index 133c2eda..2fd3593e 100644 --- a/ts/structs/Result_ReplyChannelRangeDecodeErrorZ.ts +++ b/ts/structs/Result_ReplyChannelRangeDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(ptr); const res_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ReplyChannelRangeDecodeErrorZ_OK(ReplyChannelRange res) { @@ -35,6 +36,7 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_ReplyChannelRangeDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ReplyChannelRangeDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.ts b/ts/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.ts index 08d3a442..23a4f46d 100644 --- a/ts/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.ts +++ b/ts/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(ptr); const res_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_ReplyShortChannelIdsEndDecodeErrorZ_OK(ReplyShortChannelIdsEnd res) { @@ -35,6 +36,7 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_ReplyShortChannelIdsEndDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_RouteDecodeErrorZ.ts b/ts/structs/Result_RouteDecodeErrorZ.ts index 2fff6d28..ce596cb2 100644 --- a/ts/structs/Result_RouteDecodeErrorZ.ts +++ b/ts/structs/Result_RouteDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_RouteDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_RouteDecodeErrorZ_get_ok(ptr); const res_hu_conv: Route = new Route(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_RouteDecodeErrorZ_OK(Route res) { @@ -35,6 +36,7 @@ public class Result_RouteDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_RouteDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_RouteDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_RouteLightningErrorZ.ts b/ts/structs/Result_RouteLightningErrorZ.ts index bc2d6b4b..8c84374b 100644 --- a/ts/structs/Result_RouteLightningErrorZ.ts +++ b/ts/structs/Result_RouteLightningErrorZ.ts @@ -21,6 +21,7 @@ public class Result_RouteLightningErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_RouteLightningErrorZ_get_ok(ptr); const res_hu_conv: Route = new Route(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_RouteLightningErrorZ_OK(Route res) { @@ -35,6 +36,7 @@ public class Result_RouteLightningErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_RouteLightningErrorZ_get_err(ptr); const err_hu_conv: LightningError = new LightningError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_RouteLightningErrorZ_Err(LightningError err) { diff --git a/ts/structs/Result_RoutingFeesDecodeErrorZ.ts b/ts/structs/Result_RoutingFeesDecodeErrorZ.ts index cbd3d168..e8aef3a9 100644 --- a/ts/structs/Result_RoutingFeesDecodeErrorZ.ts +++ b/ts/structs/Result_RoutingFeesDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_RoutingFeesDecodeErrorZ_get_ok(ptr); const res_hu_conv: RoutingFees = new RoutingFees(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_RoutingFeesDecodeErrorZ_OK(RoutingFees res) { @@ -35,6 +36,7 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_RoutingFeesDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_RoutingFeesDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_SpendableOutputDescriptorDecodeErrorZ.ts b/ts/structs/Result_SpendableOutputDescriptorDecodeErrorZ.ts index cb6afaa9..38033611 100644 --- a/ts/structs/Result_SpendableOutputDescriptorDecodeErrorZ.ts +++ b/ts/structs/Result_SpendableOutputDescriptorDecodeErrorZ.ts @@ -35,6 +35,7 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_SpendableOutputDescriptorDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_TrustedCommitmentTransactionNoneZ.ts b/ts/structs/Result_TrustedCommitmentTransactionNoneZ.ts index 57391810..798db4f5 100644 --- a/ts/structs/Result_TrustedCommitmentTransactionNoneZ.ts +++ b/ts/structs/Result_TrustedCommitmentTransactionNoneZ.ts @@ -21,11 +21,20 @@ public class Result_TrustedCommitmentTransactionNoneZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(ptr); const res_hu_conv: TrustedCommitmentTransaction = new TrustedCommitmentTransaction(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_TrustedCommitmentTransactionNoneZ_OK(TrustedCommitmentTransaction res) { this(null, bindings.CResult_TrustedCommitmentTransactionNoneZ_ok(res == null ? 0 : res.ptr & ~1)); this.ptrs_to.add(res); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, res is reset to null and is now a dummy object. + res.ptr = 0; } } diff --git a/ts/structs/Result_TxCreationKeysSecpErrorZ.ts b/ts/structs/Result_TxCreationKeysSecpErrorZ.ts index 54de3e12..fa385e17 100644 --- a/ts/structs/Result_TxCreationKeysSecpErrorZ.ts +++ b/ts/structs/Result_TxCreationKeysSecpErrorZ.ts @@ -21,6 +21,7 @@ public class Result_TxCreationKeysSecpErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_TxCreationKeysSecpErrorZ_get_ok(ptr); const res_hu_conv: TxCreationKeys = new TxCreationKeys(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_TxCreationKeysSecpErrorZ_OK(TxCreationKeys res) { diff --git a/ts/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.ts b/ts/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.ts index b38975ef..4d1dab8e 100644 --- a/ts/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.ts +++ b/ts/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(ptr); const res_hu_conv: UnsignedChannelAnnouncement = new UnsignedChannelAnnouncement(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_UnsignedChannelAnnouncementDecodeErrorZ_OK(UnsignedChannelAnnouncement res) { @@ -35,6 +36,7 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_UnsignedChannelAnnouncementDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_UnsignedChannelUpdateDecodeErrorZ.ts b/ts/structs/Result_UnsignedChannelUpdateDecodeErrorZ.ts index ecbde1b6..c9f8fca1 100644 --- a/ts/structs/Result_UnsignedChannelUpdateDecodeErrorZ.ts +++ b/ts/structs/Result_UnsignedChannelUpdateDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(ptr); const res_hu_conv: UnsignedChannelUpdate = new UnsignedChannelUpdate(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_UnsignedChannelUpdateDecodeErrorZ_OK(UnsignedChannelUpdate res) { @@ -35,6 +36,7 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_UnsignedChannelUpdateDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.ts b/ts/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.ts index 7c387223..9bf0f9e5 100644 --- a/ts/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.ts +++ b/ts/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.ts @@ -21,6 +21,7 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); number res = bindings.LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(ptr); const res_hu_conv: UnsignedNodeAnnouncement = new UnsignedNodeAnnouncement(null, res); + res_hu_conv.ptrs_to.add(this); this.res = res_hu_conv; } public Result_UnsignedNodeAnnouncementDecodeErrorZ_OK(UnsignedNodeAnnouncement res) { @@ -35,6 +36,7 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_err(ptr); const err_hu_conv: DecodeError = new DecodeError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_UnsignedNodeAnnouncementDecodeErrorZ_Err(DecodeError err) { diff --git a/ts/structs/Result_boolLightningErrorZ.ts b/ts/structs/Result_boolLightningErrorZ.ts index ab9c881b..1b5ac3dd 100644 --- a/ts/structs/Result_boolLightningErrorZ.ts +++ b/ts/structs/Result_boolLightningErrorZ.ts @@ -32,6 +32,7 @@ public class Result_boolLightningErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_boolLightningErrorZ_get_err(ptr); const err_hu_conv: LightningError = new LightningError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_boolLightningErrorZ_Err(LightningError err) { diff --git a/ts/structs/Result_boolPeerHandleErrorZ.ts b/ts/structs/Result_boolPeerHandleErrorZ.ts index 366ee35d..c1a720de 100644 --- a/ts/structs/Result_boolPeerHandleErrorZ.ts +++ b/ts/structs/Result_boolPeerHandleErrorZ.ts @@ -32,6 +32,7 @@ public class Result_boolPeerHandleErrorZ extends CommonBase { super(_dummy, ptr); number err = bindings.LDKCResult_boolPeerHandleErrorZ_get_err(ptr); const err_hu_conv: PeerHandleError = new PeerHandleError(null, err); + err_hu_conv.ptrs_to.add(this); this.err = err_hu_conv; } public Result_boolPeerHandleErrorZ_Err(PeerHandleError err) { diff --git a/ts/structs/RevokeAndACK.ts b/ts/structs/RevokeAndACK.ts index 58808102..15b9945b 100644 --- a/ts/structs/RevokeAndACK.ts +++ b/ts/structs/RevokeAndACK.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RevokeAndACK clone() { number ret = bindings.RevokeAndACK_clone(this.ptr); const ret_hu_conv: RevokeAndACK = new RevokeAndACK(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,6 +55,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static RevokeAndACK constructor_new(Uint8Array channel_id_arg, Uint8Array per_commitment_secret_arg, Uint8Array next_per_commitment_point_arg) { number ret = bindings.RevokeAndACK_new(channel_id_arg, per_commitment_secret_arg, next_per_commitment_point_arg); const ret_hu_conv: RevokeAndACK = new RevokeAndACK(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -65,6 +67,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static RevokeAndACK constructor_read(Uint8Array ser) { number ret = bindings.RevokeAndACK_read(ser); const ret_hu_conv: RevokeAndACK = new RevokeAndACK(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/Route.ts b/ts/structs/Route.ts index d54afc71..e8d32809 100644 --- a/ts/structs/Route.ts +++ b/ts/structs/Route.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public Route clone() { number ret = bindings.Route_clone(this.ptr); const ret_hu_conv: Route = new Route(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -32,6 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static Route constructor_new(RouteHop[][] paths_arg) { number ret = bindings.Route_new((number[][])Arrays.stream(paths_arg).map(arr_conv_12 -> (number[])Arrays.stream(arr_conv_12).map(arr_conv_10 -> arr_conv_10 == null ? 0 : arr_conv_10.ptr & ~1).toArray()).toArray()); const ret_hu_conv: Route = new Route(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); /* TODO 2 RouteHop[] */; return ret_hu_conv; } diff --git a/ts/structs/RouteHint.ts b/ts/structs/RouteHint.ts index 35ff0051..a5e312e9 100644 --- a/ts/structs/RouteHint.ts +++ b/ts/structs/RouteHint.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RouteHint clone() { number ret = bindings.RouteHint_clone(this.ptr); const ret_hu_conv: RouteHint = new RouteHint(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RoutingFees get_fees() { number ret = bindings.RouteHint_get_fees(this.ptr); const ret_hu_conv: RoutingFees = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -74,6 +76,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static RouteHint constructor_new(Uint8Array src_node_id_arg, number short_channel_id_arg, RoutingFees fees_arg, number cltv_expiry_delta_arg, number htlc_minimum_msat_arg) { number ret = bindings.RouteHint_new(src_node_id_arg, short_channel_id_arg, fees_arg == null ? 0 : fees_arg.ptr & ~1, cltv_expiry_delta_arg, htlc_minimum_msat_arg); const ret_hu_conv: RouteHint = new RouteHint(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(fees_arg); return ret_hu_conv; } diff --git a/ts/structs/RouteHop.ts b/ts/structs/RouteHop.ts index 6a943251..f03f6989 100644 --- a/ts/structs/RouteHop.ts +++ b/ts/structs/RouteHop.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RouteHop clone() { number ret = bindings.RouteHop_clone(this.ptr); const ret_hu_conv: RouteHop = new RouteHop(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -36,12 +37,21 @@ import * as bindings from '../bindings' // TODO: figure out location public NodeFeatures get_node_features() { number ret = bindings.RouteHop_get_node_features(this.ptr); const ret_hu_conv: NodeFeatures = new NodeFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_node_features(NodeFeatures val) { bindings.RouteHop_set_node_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public number get_short_channel_id() { @@ -56,12 +66,21 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelFeatures get_channel_features() { number ret = bindings.RouteHop_get_channel_features(this.ptr); const ret_hu_conv: ChannelFeatures = new ChannelFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_channel_features(ChannelFeatures val) { bindings.RouteHop_set_channel_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public number get_fee_msat() { @@ -85,8 +104,25 @@ import * as bindings from '../bindings' // TODO: figure out location public static RouteHop constructor_new(Uint8Array pubkey_arg, NodeFeatures node_features_arg, number short_channel_id_arg, ChannelFeatures channel_features_arg, number fee_msat_arg, number cltv_expiry_delta_arg) { number ret = bindings.RouteHop_new(pubkey_arg, node_features_arg == null ? 0 : node_features_arg.ptr & ~1, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr & ~1, fee_msat_arg, cltv_expiry_delta_arg); const ret_hu_conv: RouteHop = new RouteHop(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(node_features_arg); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after ret_hu_conv call, node_features_arg is reset to null and is now a dummy object. + node_features_arg.ptr = 0; ret_hu_conv.ptrs_to.add(channel_features_arg); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after ret_hu_conv call, channel_features_arg is reset to null and is now a dummy object. + channel_features_arg.ptr = 0; return ret_hu_conv; } diff --git a/ts/structs/RoutingFees.ts b/ts/structs/RoutingFees.ts index 0a0a55cb..f71fd081 100644 --- a/ts/structs/RoutingFees.ts +++ b/ts/structs/RoutingFees.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public RoutingFees clone() { number ret = bindings.RoutingFees_clone(this.ptr); const ret_hu_conv: RoutingFees = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static RoutingFees constructor_new(number base_msat_arg, number proportional_millionths_arg) { number ret = bindings.RoutingFees_new(base_msat_arg, proportional_millionths_arg); const ret_hu_conv: RoutingFees = new RoutingFees(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/RoutingMessageHandler.ts b/ts/structs/RoutingMessageHandler.ts index f7fc16cf..2ab676ca 100644 --- a/ts/structs/RoutingMessageHandler.ts +++ b/ts/structs/RoutingMessageHandler.ts @@ -61,7 +61,7 @@ import * as bindings from '../bindings' // TODO: figure out location get_next_channel_announcements (starting_point: number, batch_amount: number): number[] { ThreeTuple[] ret = arg.get_next_channel_announcements(starting_point, batch_amount); - result: number[] = (number[])Arrays.stream(ret).map(arr_conv_63 -> bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(arr_conv_63.a == null ? 0 : arr_conv_63.a.ptr & ~1/*XXX: this.ptrs_to.add(arr_conv_63_a)*/, arr_conv_63.b == null ? 0 : arr_conv_63.b.ptr & ~1/*XXX: this.ptrs_to.add(arr_conv_63_b)*/, arr_conv_63.c == null ? 0 : arr_conv_63.c.ptr & ~1/*XXX: this.ptrs_to.add(arr_conv_63_c)*/)).toArray(); + result: number[] = (number[])Arrays.stream(ret).map(arr_conv_63 -> bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(arr_conv_63.a == null ? 0 : arr_conv_63.a.ptr & ~1, arr_conv_63.b == null ? 0 : arr_conv_63.b.ptr & ~1, arr_conv_63.c == null ? 0 : arr_conv_63.c.ptr & ~1)).toArray(); /* TODO 2 ThreeTuple */; return result; }, @@ -80,6 +80,7 @@ import * as bindings from '../bindings' // TODO: figure out location handle_reply_channel_range (their_node_id: Uint8Array, msg: number): number { const msg_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_reply_channel_range(their_node_id, msg_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; @@ -87,6 +88,7 @@ import * as bindings from '../bindings' // TODO: figure out location handle_reply_short_channel_ids_end (their_node_id: Uint8Array, msg: number): number { const msg_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_reply_short_channel_ids_end(their_node_id, msg_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; @@ -94,6 +96,7 @@ import * as bindings from '../bindings' // TODO: figure out location handle_query_channel_range (their_node_id: Uint8Array, msg: number): number { const msg_hu_conv: QueryChannelRange = new QueryChannelRange(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_query_channel_range(their_node_id, msg_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; @@ -101,6 +104,7 @@ import * as bindings from '../bindings' // TODO: figure out location handle_query_short_channel_ids (their_node_id: Uint8Array, msg: number): number { const msg_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, msg); + msg_hu_conv.ptrs_to.add(this); Result_NoneLightningErrorZ ret = arg.handle_query_short_channel_ids(their_node_id, msg_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; @@ -162,11 +166,14 @@ import * as bindings from '../bindings' // TODO: figure out location for (int l = 0; l < ret.length; l++) { number arr_conv_63 = ret[l]; number arr_conv_63_a = bindings.LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(arr_conv_63); - const arr_conv_63_a_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, arr_conv_63_a);; + const arr_conv_63_a_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, arr_conv_63_a); + arr_conv_63_a_hu_conv.ptrs_to.add(this);; number arr_conv_63_b = bindings.LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_b(arr_conv_63); - const arr_conv_63_b_hu_conv: ChannelUpdate = new ChannelUpdate(null, arr_conv_63_b);; + const arr_conv_63_b_hu_conv: ChannelUpdate = new ChannelUpdate(null, arr_conv_63_b); + arr_conv_63_b_hu_conv.ptrs_to.add(this);; number arr_conv_63_c = bindings.LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(arr_conv_63); - const arr_conv_63_c_hu_conv: ChannelUpdate = new ChannelUpdate(null, arr_conv_63_c);; + const arr_conv_63_c_hu_conv: ChannelUpdate = new ChannelUpdate(null, arr_conv_63_c); + arr_conv_63_c_hu_conv.ptrs_to.add(this);; ThreeTuple arr_conv_63_conv = new ThreeTuple(arr_conv_63_a_hu_conv, arr_conv_63_b_hu_conv, arr_conv_63_c_hu_conv); arr_conv_63_arr[l] = arr_conv_63_conv; } @@ -179,6 +186,7 @@ import * as bindings from '../bindings' // TODO: figure out location for (int s = 0; s < ret.length; s++) { number arr_conv_18 = ret[s]; const arr_conv_18_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, arr_conv_18); + arr_conv_18_hu_conv.ptrs_to.add(this); arr_conv_18_arr[s] = arr_conv_18_hu_conv; } return arr_conv_18_arr; diff --git a/ts/structs/Shutdown.ts b/ts/structs/Shutdown.ts index 683f9025..0301af6b 100644 --- a/ts/structs/Shutdown.ts +++ b/ts/structs/Shutdown.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public Shutdown clone() { number ret = bindings.Shutdown_clone(this.ptr); const ret_hu_conv: Shutdown = new Shutdown(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static Shutdown constructor_new(Uint8Array channel_id_arg, Uint8Array scriptpubkey_arg) { number ret = bindings.Shutdown_new(channel_id_arg, scriptpubkey_arg); const ret_hu_conv: Shutdown = new Shutdown(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -56,6 +58,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static Shutdown constructor_read(Uint8Array ser) { number ret = bindings.Shutdown_read(ser); const ret_hu_conv: Shutdown = new Shutdown(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/SpendableOutputDescriptor.ts b/ts/structs/SpendableOutputDescriptor.ts index 3746a1ab..79a3f6ce 100644 --- a/ts/structs/SpendableOutputDescriptor.ts +++ b/ts/structs/SpendableOutputDescriptor.ts @@ -30,6 +30,7 @@ export class StaticOutput extends SpendableOutputDescriptor { super(null, ptr); const outpoint: number = obj.outpoint; const outpoint_hu_conv: OutPoint = new OutPoint(null, outpoint); + outpoint_hu_conv.ptrs_to.add(this); this.outpoint = outpoint_hu_conv; const output: number = obj.output; TxOut output_conv = new TxOut(null, output); @@ -47,6 +48,7 @@ export class DynamicOutputP2WSH extends SpendableOutputDescriptor { super(null, ptr); const outpoint: number = obj.outpoint; const outpoint_hu_conv: OutPoint = new OutPoint(null, outpoint); + outpoint_hu_conv.ptrs_to.add(this); this.outpoint = outpoint_hu_conv; this.per_commitment_point = obj.per_commitment_point; this.to_self_delay = obj.to_self_delay; @@ -69,6 +71,7 @@ export class StaticOutputCounterpartyPayment extends SpendableOutputDescriptor { super(null, ptr); const outpoint: number = obj.outpoint; const outpoint_hu_conv: OutPoint = new OutPoint(null, outpoint); + outpoint_hu_conv.ptrs_to.add(this); this.outpoint = outpoint_hu_conv; const output: number = obj.output; TxOut output_conv = new TxOut(null, output); diff --git a/ts/structs/TrustedCommitmentTransaction.ts b/ts/structs/TrustedCommitmentTransaction.ts index b40e528e..5448f12e 100644 --- a/ts/structs/TrustedCommitmentTransaction.ts +++ b/ts/structs/TrustedCommitmentTransaction.ts @@ -26,12 +26,14 @@ import * as bindings from '../bindings' // TODO: figure out location public BuiltCommitmentTransaction built_transaction() { number ret = bindings.TrustedCommitmentTransaction_built_transaction(this.ptr); const ret_hu_conv: BuiltCommitmentTransaction = new BuiltCommitmentTransaction(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public TxCreationKeys keys() { number ret = bindings.TrustedCommitmentTransaction_keys(this.ptr); const ret_hu_conv: TxCreationKeys = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/TxCreationKeys.ts b/ts/structs/TxCreationKeys.ts index 83aeb588..1b8b616b 100644 --- a/ts/structs/TxCreationKeys.ts +++ b/ts/structs/TxCreationKeys.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public TxCreationKeys clone() { number ret = bindings.TxCreationKeys_clone(this.ptr); const ret_hu_conv: TxCreationKeys = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -72,6 +73,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static TxCreationKeys constructor_new(Uint8Array per_commitment_point_arg, Uint8Array revocation_key_arg, Uint8Array broadcaster_htlc_key_arg, Uint8Array countersignatory_htlc_key_arg, Uint8Array broadcaster_delayed_payment_key_arg) { number ret = bindings.TxCreationKeys_new(per_commitment_point_arg, revocation_key_arg, broadcaster_htlc_key_arg, countersignatory_htlc_key_arg, broadcaster_delayed_payment_key_arg); const ret_hu_conv: TxCreationKeys = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -83,6 +85,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static TxCreationKeys constructor_read(Uint8Array ser) { number ret = bindings.TxCreationKeys_read(ser); const ret_hu_conv: TxCreationKeys = new TxCreationKeys(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UnsignedChannelAnnouncement.ts b/ts/structs/UnsignedChannelAnnouncement.ts index af033836..84b2ca7f 100644 --- a/ts/structs/UnsignedChannelAnnouncement.ts +++ b/ts/structs/UnsignedChannelAnnouncement.ts @@ -21,18 +21,28 @@ import * as bindings from '../bindings' // TODO: figure out location public UnsignedChannelAnnouncement clone() { number ret = bindings.UnsignedChannelAnnouncement_clone(this.ptr); const ret_hu_conv: UnsignedChannelAnnouncement = new UnsignedChannelAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelFeatures get_features() { number ret = bindings.UnsignedChannelAnnouncement_get_features(this.ptr); const ret_hu_conv: ChannelFeatures = new ChannelFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(ChannelFeatures val) { bindings.UnsignedChannelAnnouncement_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public Uint8Array get_chain_hash() { diff --git a/ts/structs/UnsignedChannelUpdate.ts b/ts/structs/UnsignedChannelUpdate.ts index a002dfc2..133bc91f 100644 --- a/ts/structs/UnsignedChannelUpdate.ts +++ b/ts/structs/UnsignedChannelUpdate.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UnsignedChannelUpdate clone() { number ret = bindings.UnsignedChannelUpdate_clone(this.ptr); const ret_hu_conv: UnsignedChannelUpdate = new UnsignedChannelUpdate(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } diff --git a/ts/structs/UnsignedNodeAnnouncement.ts b/ts/structs/UnsignedNodeAnnouncement.ts index abd16c56..c874fc3b 100644 --- a/ts/structs/UnsignedNodeAnnouncement.ts +++ b/ts/structs/UnsignedNodeAnnouncement.ts @@ -21,18 +21,28 @@ import * as bindings from '../bindings' // TODO: figure out location public UnsignedNodeAnnouncement clone() { number ret = bindings.UnsignedNodeAnnouncement_clone(this.ptr); const ret_hu_conv: UnsignedNodeAnnouncement = new UnsignedNodeAnnouncement(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public NodeFeatures get_features() { number ret = bindings.UnsignedNodeAnnouncement_get_features(this.ptr); const ret_hu_conv: NodeFeatures = new NodeFeatures(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public void set_features(NodeFeatures val) { bindings.UnsignedNodeAnnouncement_set_features(this.ptr, val == null ? 0 : val.ptr & ~1); this.ptrs_to.add(val); + // Due to rust's strict-ownership memory model, in some cases we need to "move" + // an object to pass exclusive ownership to the function being called. + // In most cases, we avoid this being visible in GC'd languages by cloning the object + // at the FFI layer, creating a new object which Rust can claim ownership of + // However, in some cases (eg here), there is no way to clone an object, and thus + // we actually have to pass full ownership to Rust. + // Thus, after this call, val is reset to null and is now a dummy object. + val.ptr = 0; } public number get_timestamp() { diff --git a/ts/structs/UpdateAddHTLC.ts b/ts/structs/UpdateAddHTLC.ts index 52c5ed48..862a8763 100644 --- a/ts/structs/UpdateAddHTLC.ts +++ b/ts/structs/UpdateAddHTLC.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UpdateAddHTLC clone() { number ret = bindings.UpdateAddHTLC_clone(this.ptr); const ret_hu_conv: UpdateAddHTLC = new UpdateAddHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -77,6 +78,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateAddHTLC constructor_read(Uint8Array ser) { number ret = bindings.UpdateAddHTLC_read(ser); const ret_hu_conv: UpdateAddHTLC = new UpdateAddHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UpdateFailHTLC.ts b/ts/structs/UpdateFailHTLC.ts index c838d7c5..bf4a4763 100644 --- a/ts/structs/UpdateFailHTLC.ts +++ b/ts/structs/UpdateFailHTLC.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UpdateFailHTLC clone() { number ret = bindings.UpdateFailHTLC_clone(this.ptr); const ret_hu_conv: UpdateFailHTLC = new UpdateFailHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -50,6 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateFailHTLC constructor_read(Uint8Array ser) { number ret = bindings.UpdateFailHTLC_read(ser); const ret_hu_conv: UpdateFailHTLC = new UpdateFailHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UpdateFailMalformedHTLC.ts b/ts/structs/UpdateFailMalformedHTLC.ts index 10072c09..52b6a71d 100644 --- a/ts/structs/UpdateFailMalformedHTLC.ts +++ b/ts/structs/UpdateFailMalformedHTLC.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UpdateFailMalformedHTLC clone() { number ret = bindings.UpdateFailMalformedHTLC_clone(this.ptr); const ret_hu_conv: UpdateFailMalformedHTLC = new UpdateFailMalformedHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -59,6 +60,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateFailMalformedHTLC constructor_read(Uint8Array ser) { number ret = bindings.UpdateFailMalformedHTLC_read(ser); const ret_hu_conv: UpdateFailMalformedHTLC = new UpdateFailMalformedHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UpdateFee.ts b/ts/structs/UpdateFee.ts index ed504174..b6b189ba 100644 --- a/ts/structs/UpdateFee.ts +++ b/ts/structs/UpdateFee.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UpdateFee clone() { number ret = bindings.UpdateFee_clone(this.ptr); const ret_hu_conv: UpdateFee = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -45,6 +46,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateFee constructor_new(Uint8Array channel_id_arg, number feerate_per_kw_arg) { number ret = bindings.UpdateFee_new(channel_id_arg, feerate_per_kw_arg); const ret_hu_conv: UpdateFee = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -56,6 +58,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateFee constructor_read(Uint8Array ser) { number ret = bindings.UpdateFee_read(ser); const ret_hu_conv: UpdateFee = new UpdateFee(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UpdateFulfillHTLC.ts b/ts/structs/UpdateFulfillHTLC.ts index 63962f77..9e030d62 100644 --- a/ts/structs/UpdateFulfillHTLC.ts +++ b/ts/structs/UpdateFulfillHTLC.ts @@ -21,6 +21,7 @@ import * as bindings from '../bindings' // TODO: figure out location public UpdateFulfillHTLC clone() { number ret = bindings.UpdateFulfillHTLC_clone(this.ptr); const ret_hu_conv: UpdateFulfillHTLC = new UpdateFulfillHTLC(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -54,6 +55,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateFulfillHTLC constructor_new(Uint8Array channel_id_arg, number htlc_id_arg, Uint8Array payment_preimage_arg) { number ret = bindings.UpdateFulfillHTLC_new(channel_id_arg, htlc_id_arg, payment_preimage_arg); const ret_hu_conv: UpdateFulfillHTLC = new UpdateFulfillHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } @@ -65,6 +67,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UpdateFulfillHTLC constructor_read(Uint8Array ser) { number ret = bindings.UpdateFulfillHTLC_read(ser); const ret_hu_conv: UpdateFulfillHTLC = new UpdateFulfillHTLC(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UserConfig.ts b/ts/structs/UserConfig.ts index 44c58657..a4cd7e8c 100644 --- a/ts/structs/UserConfig.ts +++ b/ts/structs/UserConfig.ts @@ -21,12 +21,14 @@ import * as bindings from '../bindings' // TODO: figure out location public UserConfig clone() { number ret = bindings.UserConfig_clone(this.ptr); const ret_hu_conv: UserConfig = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } public ChannelHandshakeConfig get_own_channel_config() { number ret = bindings.UserConfig_get_own_channel_config(this.ptr); const ret_hu_conv: ChannelHandshakeConfig = new ChannelHandshakeConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -38,6 +40,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelHandshakeLimits get_peer_channel_config_limits() { number ret = bindings.UserConfig_get_peer_channel_config_limits(this.ptr); const ret_hu_conv: ChannelHandshakeLimits = new ChannelHandshakeLimits(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -49,6 +52,7 @@ import * as bindings from '../bindings' // TODO: figure out location public ChannelConfig get_channel_options() { number ret = bindings.UserConfig_get_channel_options(this.ptr); const ret_hu_conv: ChannelConfig = new ChannelConfig(null, ret); + ret_hu_conv.ptrs_to.add(this); return ret_hu_conv; } @@ -60,6 +64,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UserConfig constructor_new(ChannelHandshakeConfig own_channel_config_arg, ChannelHandshakeLimits peer_channel_config_limits_arg, ChannelConfig channel_options_arg) { number ret = bindings.UserConfig_new(own_channel_config_arg == null ? 0 : own_channel_config_arg.ptr & ~1, peer_channel_config_limits_arg == null ? 0 : peer_channel_config_limits_arg.ptr & ~1, channel_options_arg == null ? 0 : channel_options_arg.ptr & ~1); const ret_hu_conv: UserConfig = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); ret_hu_conv.ptrs_to.add(own_channel_config_arg); ret_hu_conv.ptrs_to.add(peer_channel_config_limits_arg); ret_hu_conv.ptrs_to.add(channel_options_arg); @@ -69,6 +74,7 @@ import * as bindings from '../bindings' // TODO: figure out location public static UserConfig constructor_default() { number ret = bindings.UserConfig_default(); const ret_hu_conv: UserConfig = new UserConfig(null, ret); + ret_hu_conv.ptrs_to.add(ret_hu_conv); return ret_hu_conv; } diff --git a/ts/structs/UtilMethods.ts b/ts/structs/UtilMethods.ts new file mode 100644 index 00000000..aa560727 --- /dev/null +++ b/ts/structs/UtilMethods.ts @@ -0,0 +1,20 @@ + public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constructor_BlockHashChannelMonitorZ_read(Uint8Array ser, KeysInterface arg) { + number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_read(ser, arg == null ? 0 : arg.ptr); + Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg); + return ret_hu_conv; + } + + public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constructor_BlockHashChannelManagerZ_read(Uint8Array ser, KeysInterface arg_keys_manager, FeeEstimator arg_fee_estimator, Watch arg_chain_monitor, BroadcasterInterface arg_tx_broadcaster, Logger arg_logger, UserConfig arg_default_config, ChannelMonitor[] arg_channel_monitors) { + number ret = bindings.C2Tuple_BlockHashChannelManagerZ_read(ser, bindings.ChannelManagerReadArgs_new(arg_keys_manager == null ? 0 : arg_keys_manager.ptr, arg_fee_estimator == null ? 0 : arg_fee_estimator.ptr, arg_chain_monitor == null ? 0 : arg_chain_monitor.ptr, arg_tx_broadcaster == null ? 0 : arg_tx_broadcaster.ptr, arg_logger == null ? 0 : arg_logger.ptr, arg_default_config == null ? 0 : arg_default_config.ptr & ~1, (number[])Arrays.stream(arg_channel_monitors).map(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray())); + Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg_keys_manager); + ret_hu_conv.ptrs_to.add(arg_fee_estimator); + ret_hu_conv.ptrs_to.add(arg_chain_monitor); + ret_hu_conv.ptrs_to.add(arg_tx_broadcaster); + ret_hu_conv.ptrs_to.add(arg_logger); + ret_hu_conv.ptrs_to.add(arg_default_config); + /* TODO 2 ChannelMonitor */; + return ret_hu_conv; + } + diff --git a/ts/structs/Watch.ts b/ts/structs/Watch.ts index ea0bdf4b..269905b0 100644 --- a/ts/structs/Watch.ts +++ b/ts/structs/Watch.ts @@ -34,7 +34,9 @@ import * as bindings from '../bindings' // TODO: figure out location // todo: in-line interface filling watch_channel (funding_txo: number, monitor: number): number { const funding_txo_hu_conv: OutPoint = new OutPoint(null, funding_txo); + funding_txo_hu_conv.ptrs_to.add(this); const monitor_hu_conv: ChannelMonitor = new ChannelMonitor(null, monitor); + monitor_hu_conv.ptrs_to.add(this); Result_NoneChannelMonitorUpdateErrZ ret = arg.watch_channel(funding_txo_hu_conv, monitor_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; @@ -42,7 +44,9 @@ import * as bindings from '../bindings' // TODO: figure out location update_channel (funding_txo: number, update: number): number { const funding_txo_hu_conv: OutPoint = new OutPoint(null, funding_txo); + funding_txo_hu_conv.ptrs_to.add(this); const update_hu_conv: ChannelMonitorUpdate = new ChannelMonitorUpdate(null, update); + update_hu_conv.ptrs_to.add(this); Result_NoneChannelMonitorUpdateErrZ ret = arg.update_channel(funding_txo_hu_conv, update_hu_conv); result: number = ret != null ? ret.ptr : 0; return result; @@ -93,6 +97,7 @@ import * as bindings from '../bindings' // TODO: figure out location for (int o = 0; o < ret.length; o++) { number arr_conv_14 = ret[o]; const arr_conv_14_hu_conv: MonitorEvent = new MonitorEvent(null, arr_conv_14); + arr_conv_14_hu_conv.ptrs_to.add(this); arr_conv_14_arr[o] = arr_conv_14_hu_conv; } return arr_conv_14_arr; diff --git a/ts/util/UtilMethods.ts b/ts/util/UtilMethods.ts new file mode 100644 index 00000000..aa560727 --- /dev/null +++ b/ts/util/UtilMethods.ts @@ -0,0 +1,20 @@ + public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constructor_BlockHashChannelMonitorZ_read(Uint8Array ser, KeysInterface arg) { + number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_read(ser, arg == null ? 0 : arg.ptr); + Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg); + return ret_hu_conv; + } + + public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constructor_BlockHashChannelManagerZ_read(Uint8Array ser, KeysInterface arg_keys_manager, FeeEstimator arg_fee_estimator, Watch arg_chain_monitor, BroadcasterInterface arg_tx_broadcaster, Logger arg_logger, UserConfig arg_default_config, ChannelMonitor[] arg_channel_monitors) { + number ret = bindings.C2Tuple_BlockHashChannelManagerZ_read(ser, bindings.ChannelManagerReadArgs_new(arg_keys_manager == null ? 0 : arg_keys_manager.ptr, arg_fee_estimator == null ? 0 : arg_fee_estimator.ptr, arg_chain_monitor == null ? 0 : arg_chain_monitor.ptr, arg_tx_broadcaster == null ? 0 : arg_tx_broadcaster.ptr, arg_logger == null ? 0 : arg_logger.ptr, arg_default_config == null ? 0 : arg_default_config.ptr & ~1, (number[])Arrays.stream(arg_channel_monitors).map(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray())); + Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg_keys_manager); + ret_hu_conv.ptrs_to.add(arg_fee_estimator); + ret_hu_conv.ptrs_to.add(arg_chain_monitor); + ret_hu_conv.ptrs_to.add(arg_tx_broadcaster); + ret_hu_conv.ptrs_to.add(arg_logger); + ret_hu_conv.ptrs_to.add(arg_default_config); + /* TODO 2 ChannelMonitor */; + return ret_hu_conv; + } + diff --git a/ts/util/functions.ts b/ts/util/functions.ts new file mode 100644 index 00000000..aa560727 --- /dev/null +++ b/ts/util/functions.ts @@ -0,0 +1,20 @@ + public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constructor_BlockHashChannelMonitorZ_read(Uint8Array ser, KeysInterface arg) { + number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_read(ser, arg == null ? 0 : arg.ptr); + Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg); + return ret_hu_conv; + } + + public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constructor_BlockHashChannelManagerZ_read(Uint8Array ser, KeysInterface arg_keys_manager, FeeEstimator arg_fee_estimator, Watch arg_chain_monitor, BroadcasterInterface arg_tx_broadcaster, Logger arg_logger, UserConfig arg_default_config, ChannelMonitor[] arg_channel_monitors) { + number ret = bindings.C2Tuple_BlockHashChannelManagerZ_read(ser, bindings.ChannelManagerReadArgs_new(arg_keys_manager == null ? 0 : arg_keys_manager.ptr, arg_fee_estimator == null ? 0 : arg_fee_estimator.ptr, arg_chain_monitor == null ? 0 : arg_chain_monitor.ptr, arg_tx_broadcaster == null ? 0 : arg_tx_broadcaster.ptr, arg_logger == null ? 0 : arg_logger.ptr, arg_default_config == null ? 0 : arg_default_config.ptr & ~1, (number[])Arrays.stream(arg_channel_monitors).map(arr_conv_16 -> arr_conv_16 == null ? 0 : arr_conv_16.ptr & ~1).toArray())); + Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret); + ret_hu_conv.ptrs_to.add(arg_keys_manager); + ret_hu_conv.ptrs_to.add(arg_fee_estimator); + ret_hu_conv.ptrs_to.add(arg_chain_monitor); + ret_hu_conv.ptrs_to.add(arg_tx_broadcaster); + ret_hu_conv.ptrs_to.add(arg_logger); + ret_hu_conv.ptrs_to.add(arg_default_config); + /* TODO 2 ChannelMonitor */; + return ret_hu_conv; + } +