X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fmain%2Fjni%2Fbindings.c;h=3747589afcc9fd006e1316b1fa325522f4a4d7a5;hb=a26d77400b9be7cb401019e8562edb515b70ed41;hp=57f35b9c99dc1ed1274608d65f59cb119cf5b74e;hpb=110f2f104ba8fc34caa7e34e04737f36f064b050;p=ldk-java diff --git a/src/main/jni/bindings.c b/src/main/jni/bindings.c index 57f35b9c..3747589a 100644 --- a/src/main/jni/bindings.c +++ b/src/main/jni/bindings.c @@ -54,7 +54,18 @@ static void alloc_freed(void* ptr) { allocation* p = NULL; DO_ASSERT(mtx_lock(&allocation_mtx) == thrd_success); allocation* it = allocation_ll; - while (it->ptr != ptr) { p = it; it = it->next; } + while (it->ptr != ptr) { + p = it; it = it->next; + if (it == NULL) { + fprintf(stderr, "Tried to free unknown pointer %p at:\n", ptr); + void* bt[BT_MAX]; + int bt_len = backtrace(bt, BT_MAX); + backtrace_symbols_fd(bt, bt_len, STDERR_FILENO); + fprintf(stderr, "\n\n"); + DO_ASSERT(mtx_unlock(&allocation_mtx) == thrd_success); + return; // addrsan should catch malloc-unknown and print more info than we have + } + } if (p) { p->next = it->next; } else { allocation_ll = it->next; } DO_ASSERT(mtx_unlock(&allocation_mtx) == thrd_success); DO_ASSERT(it->ptr == ptr); @@ -145,12 +156,18 @@ JNIEXPORT long JNICALL Java_org_ldk_impl_bindings_new_1txpointer_1copy_1data (JN LDKTransaction *txdata = (LDKTransaction*)MALLOC(sizeof(LDKTransaction), "LDKTransaction"); txdata->datalen = (*env)->GetArrayLength(env, bytes); txdata->data = (uint8_t*)MALLOC(txdata->datalen, "Tx Data Bytes"); - txdata->data_is_owned = true; + txdata->data_is_owned = false; (*env)->GetByteArrayRegion (env, bytes, 0, txdata->datalen, txdata->data); return (long)txdata; } +JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_txpointer_1free (JNIEnv * env, jclass _b, jlong ptr) { + LDKTransaction *tx = (LDKTransaction*)ptr; + tx->data_is_owned = true; + Transaction_free(*tx); + FREE((void*)ptr); +} JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_vec_1slice_1len (JNIEnv * env, jclass _a, jlong ptr) { - // Check offsets of a few Vec types are all consistent as we're meant to be generic across types + // Check offsets of a few Vec types are all consistent as we're meant to be generic across types _Static_assert(offsetof(LDKCVec_u8Z, datalen) == offsetof(LDKCVec_SignatureZ, datalen), "Vec<*> needs to be mapped identically"); _Static_assert(offsetof(LDKCVec_u8Z, datalen) == offsetof(LDKCVec_MessageSendEventZ, datalen), "Vec<*> needs to be mapped identically"); _Static_assert(offsetof(LDKCVec_u8Z, datalen) == offsetof(LDKCVec_EventZ, datalen), "Vec<*> needs to be mapped identically"); @@ -159,7 +176,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_vec_1slice_1len (JNIEnv * env return (long)vec->datalen; } JNIEXPORT long JNICALL Java_org_ldk_impl_bindings_new_1empty_1slice_1vec (JNIEnv * _env, jclass _b) { - // Check sizes of a few Vec types are all consistent as we're meant to be generic across types + // Check sizes of a few Vec types are all consistent as we're meant to be generic across types _Static_assert(sizeof(LDKCVec_u8Z) == sizeof(LDKCVec_SignatureZ), "Vec<*> needs to be mapped identically"); _Static_assert(sizeof(LDKCVec_u8Z) == sizeof(LDKCVec_MessageSendEventZ), "Vec<*> needs to be mapped identically"); _Static_assert(sizeof(LDKCVec_u8Z) == sizeof(LDKCVec_EventZ), "Vec<*> needs to be mapped identically"); @@ -444,7 +461,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKC2TupleTempl_1usize_1_1Tra LDKC2TupleTempl_usize__Transaction* ret = MALLOC(sizeof(LDKC2TupleTempl_usize__Transaction), "LDKC2TupleTempl_usize__Transaction"); ret->a = a; LDKTransaction b_conv = *(LDKTransaction*)b; - FREE((void*)b); ret->b = b_conv; return (long)ret; } @@ -476,12 +492,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdate LDKMonitorUpdateError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKC2TupleTempl_1OutPoint_1_1CVec_1u8Z_1new(JNIEnv *_env, jclass _b, jlong a, jbyteArray b) { @@ -616,7 +627,8 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1Sign for (size_t i = 0; i < res_var.datalen; i++) { jbyteArray 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);} + (*_env)->SetObjectArrayElement(_env, res_arr, i, arr_conv_8_arr); + } return res_arr; } JNIEXPORT jbyte JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1err (JNIEnv * _env, jclass _a, jlong arg) { @@ -725,12 +737,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFa LDKPaymentSendFailure err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKC3TupleTempl_1ChannelAnnouncement_1_1ChannelUpdate_1_1ChannelUpdate_1new(JNIEnv *_env, jclass _b, jlong a, jlong b, jlong c) { @@ -769,12 +776,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErr LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKC2TupleTempl_1HTLCOutputInCommitment_1_1Signature_1new(JNIEnv *_env, jclass _b, jlong a, jbyteArray b) { @@ -821,12 +823,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto LDKOutPoint outpoint_var = obj->static_output.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; - if (outpoint_var.is_owned) { - outpoint_ref = (long)outpoint_var.inner | 1; - } else { - outpoint_ref = (long)&outpoint_var; - } + long outpoint_ref = (long)outpoint_var.inner & ~1; long output_ref = (long)&obj->static_output.output; return (*_env)->NewObject(_env, LDKSpendableOutputDescriptor_StaticOutput_class, LDKSpendableOutputDescriptor_StaticOutput_meth, outpoint_ref, output_ref); } @@ -834,12 +831,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto LDKOutPoint outpoint_var = obj->dynamic_output_p2wsh.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; - if (outpoint_var.is_owned) { - outpoint_ref = (long)outpoint_var.inner | 1; - } else { - outpoint_ref = (long)&outpoint_var; - } + long outpoint_ref = (long)outpoint_var.inner & ~1; jbyteArray 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; @@ -852,12 +844,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto LDKOutPoint outpoint_var = obj->static_output_counterparty_payment.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; - if (outpoint_var.is_owned) { - outpoint_ref = (long)outpoint_var.inner | 1; - } else { - outpoint_ref = (long)&outpoint_var; - } + 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; return (*_env)->NewObject(_env, LDKSpendableOutputDescriptor_StaticOutputCounterpartyPayment_class, LDKSpendableOutputDescriptor_StaticOutputCounterpartyPayment_meth, outpoint_ref, output_ref, key_derivation_params_ref); @@ -953,12 +940,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr (J LDKOutPoint funding_txo_var = obj->funding_broadcast_safe.funding_txo; CHECK((((long)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long funding_txo_ref; - if (funding_txo_var.is_owned) { - funding_txo_ref = (long)funding_txo_var.inner | 1; - } else { - funding_txo_ref = (long)&funding_txo_var; - } + long funding_txo_ref = (long)funding_txo_var.inner & ~1; return (*_env)->NewObject(_env, LDKEvent_FundingBroadcastSafe_class, LDKEvent_FundingBroadcastSafe_meth, funding_txo_ref, obj->funding_broadcast_safe.user_channel_id); } case LDKEvent_PaymentReceived: { @@ -1025,12 +1007,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1 LDKErrorMessage msg_var = obj->disconnect_peer.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKErrorAction_DisconnectPeer_class, LDKErrorAction_DisconnectPeer_meth, msg_ref); } case LDKErrorAction_IgnoreError: { @@ -1040,12 +1017,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1 LDKErrorMessage msg_var = obj->send_error_message.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKErrorAction_SendErrorMessage_class, LDKErrorAction_SendErrorMessage_meth, msg_ref); } default: abort(); @@ -1081,12 +1053,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKHTLCFailChannelUpdate_1r LDKChannelUpdate msg_var = obj->channel_update_message.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKHTLCFailChannelUpdate_ChannelUpdateMessage_class, LDKHTLCFailChannelUpdate_ChannelUpdateMessage_meth, msg_ref); } case LDKHTLCFailChannelUpdate_ChannelClosed: { @@ -1223,12 +1190,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKAcceptChannel msg_var = obj->send_accept_channel.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendAcceptChannel_class, LDKMessageSendEvent_SendAcceptChannel_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendOpenChannel: { @@ -1237,12 +1199,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKOpenChannel msg_var = obj->send_open_channel.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendOpenChannel_class, LDKMessageSendEvent_SendOpenChannel_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendFundingCreated: { @@ -1251,12 +1208,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKFundingCreated msg_var = obj->send_funding_created.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendFundingCreated_class, LDKMessageSendEvent_SendFundingCreated_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendFundingSigned: { @@ -1265,12 +1217,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKFundingSigned msg_var = obj->send_funding_signed.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendFundingSigned_class, LDKMessageSendEvent_SendFundingSigned_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendFundingLocked: { @@ -1279,12 +1226,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKFundingLocked msg_var = obj->send_funding_locked.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendFundingLocked_class, LDKMessageSendEvent_SendFundingLocked_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendAnnouncementSignatures: { @@ -1293,12 +1235,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKAnnouncementSignatures msg_var = obj->send_announcement_signatures.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendAnnouncementSignatures_class, LDKMessageSendEvent_SendAnnouncementSignatures_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_UpdateHTLCs: { @@ -1307,12 +1244,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKCommitmentUpdate updates_var = obj->update_htl_cs.updates; CHECK((((long)updates_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&updates_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long updates_ref; - if (updates_var.is_owned) { - updates_ref = (long)updates_var.inner | 1; - } else { - updates_ref = (long)&updates_var; - } + long updates_ref = (long)updates_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_UpdateHTLCs_class, LDKMessageSendEvent_UpdateHTLCs_meth, node_id_arr, updates_ref); } case LDKMessageSendEvent_SendRevokeAndACK: { @@ -1321,12 +1253,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKRevokeAndACK msg_var = obj->send_revoke_and_ack.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendRevokeAndACK_class, LDKMessageSendEvent_SendRevokeAndACK_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendClosingSigned: { @@ -1335,12 +1262,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKClosingSigned msg_var = obj->send_closing_signed.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendClosingSigned_class, LDKMessageSendEvent_SendClosingSigned_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendShutdown: { @@ -1349,12 +1271,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKShutdown msg_var = obj->send_shutdown.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendShutdown_class, LDKMessageSendEvent_SendShutdown_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_SendChannelReestablish: { @@ -1363,57 +1280,32 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f LDKChannelReestablish msg_var = obj->send_channel_reestablish.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_SendChannelReestablish_class, LDKMessageSendEvent_SendChannelReestablish_meth, node_id_arr, msg_ref); } case LDKMessageSendEvent_BroadcastChannelAnnouncement: { LDKChannelAnnouncement msg_var = obj->broadcast_channel_announcement.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; LDKChannelUpdate update_msg_var = obj->broadcast_channel_announcement.update_msg; CHECK((((long)update_msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&update_msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long update_msg_ref; - if (update_msg_var.is_owned) { - update_msg_ref = (long)update_msg_var.inner | 1; - } else { - update_msg_ref = (long)&update_msg_var; - } + long update_msg_ref = (long)update_msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_BroadcastChannelAnnouncement_class, LDKMessageSendEvent_BroadcastChannelAnnouncement_meth, msg_ref, update_msg_ref); } case LDKMessageSendEvent_BroadcastNodeAnnouncement: { LDKNodeAnnouncement msg_var = obj->broadcast_node_announcement.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_BroadcastNodeAnnouncement_class, LDKMessageSendEvent_BroadcastNodeAnnouncement_meth, msg_ref); } case LDKMessageSendEvent_BroadcastChannelUpdate: { LDKChannelUpdate msg_var = obj->broadcast_channel_update.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; - if (msg_var.is_owned) { - msg_ref = (long)msg_var.inner | 1; - } else { - msg_ref = (long)&msg_var; - } + long msg_ref = (long)msg_var.inner & ~1; return (*_env)->NewObject(_env, LDKMessageSendEvent_BroadcastChannelUpdate_class, LDKMessageSendEvent_BroadcastChannelUpdate_meth, msg_ref); } case LDKMessageSendEvent_HandleError: { @@ -1527,10 +1419,13 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_MessageSendEventsProvide jlongArray ret_arr = (*_env)->NewLongArray(_env, ret_var.datalen); jlong *ret_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, ret_arr, NULL); for (size_t s = 0; s < ret_var.datalen; s++) { - long arr_conv_18_ref = (long)&ret_var.data[s]; + LDKMessageSendEvent *arr_conv_18_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent"); + *arr_conv_18_copy = MessageSendEvent_clone(&ret_var.data[s]); + long arr_conv_18_ref = (long)arr_conv_18_copy; ret_arr_ptr[s] = arr_conv_18_ref; } (*_env)->ReleasePrimitiveArrayCritical(_env, ret_arr, ret_arr_ptr, 0); + CVec_MessageSendEventZ_free(ret_var); return ret_arr; } @@ -1632,10 +1527,13 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_EventsProvider_1get_1and jlongArray ret_arr = (*_env)->NewLongArray(_env, ret_var.datalen); jlong *ret_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, ret_arr, NULL); for (size_t h = 0; h < ret_var.datalen; h++) { - long arr_conv_7_ref = (long)&ret_var.data[h]; + LDKEvent *arr_conv_7_copy = MALLOC(sizeof(LDKEvent), "LDKEvent"); + *arr_conv_7_copy = Event_clone(&ret_var.data[h]); + long arr_conv_7_ref = (long)arr_conv_7_copy; ret_arr_ptr[h] = arr_conv_7_ref; } (*_env)->ReleasePrimitiveArrayCritical(_env, ret_arr, ret_arr_ptr, 0); + CVec_EventZ_free(ret_var); return ret_arr; } @@ -1868,7 +1766,9 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_j 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); - long commitment_tx_ref = (long)&commitment_tx; + LDKTransaction *commitment_tx_copy = MALLOC(sizeof(LDKTransaction), "LDKTransaction"); + *commitment_tx_copy = commitment_tx; + long commitment_tx_ref = (long)commitment_tx_copy; LDKCVec_HTLCOutputInCommitmentZ htlcs_var = htlcs; jlongArray htlcs_arr = (*_env)->NewLongArray(_env, htlcs_var.datalen); jlong *htlcs_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, htlcs_arr, NULL); @@ -1880,7 +1780,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_j if (arr_conv_24_var.is_owned) { arr_conv_24_ref = (long)arr_conv_24_var.inner | 1; } else { - arr_conv_24_ref = (long)&arr_conv_24_var; + arr_conv_24_ref = (long)arr_conv_24_var.inner & ~1; } htlcs_arr_ptr[y] = arr_conv_24_ref; } @@ -1919,7 +1819,9 @@ LDKCResult_SignatureNoneZ sign_justice_transaction_jcall(const void* this_arg, L 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); - long justice_tx_ref = (long)&justice_tx; + LDKTransaction *justice_tx_copy = MALLOC(sizeof(LDKTransaction), "LDKTransaction"); + *justice_tx_copy = justice_tx; + long justice_tx_ref = (long)justice_tx_copy; jbyteArray per_commitment_key_arr = (*_env)->NewByteArray(_env, 32); (*_env)->SetByteArrayRegion(_env, per_commitment_key_arr, 0, 32, *per_commitment_key); jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); @@ -1933,7 +1835,9 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_jcall(const void* t 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); - long htlc_tx_ref = (long)&htlc_tx; + LDKTransaction *htlc_tx_copy = MALLOC(sizeof(LDKTransaction), "LDKTransaction"); + *htlc_tx_copy = htlc_tx; + long htlc_tx_ref = (long)htlc_tx_copy; jbyteArray per_commitment_point_arr = (*_env)->NewByteArray(_env, 33); (*_env)->SetByteArrayRegion(_env, per_commitment_point_arr, 0, 33, per_commitment_point.compressed_form); jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); @@ -1947,7 +1851,9 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_jcall(const void* this_arg, L 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); - long closing_tx_ref = (long)&closing_tx; + LDKTransaction *closing_tx_copy = MALLOC(sizeof(LDKTransaction), "LDKTransaction"); + *closing_tx_copy = closing_tx; + long closing_tx_ref = (long)closing_tx_copy; 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_ref); @@ -1988,7 +1894,7 @@ static void* LDKChannelKeys_JCalls_clone(const void* this_arg) { atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release); return (void*) this_arg; } -static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv * env, jclass _a, jobject o) { +static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv * env, jclass _a, jobject o, jlong pubkeys) { jclass c = (*env)->GetObjectClass(env, o); CHECK(c != NULL); LDKChannelKeys_JCalls *calls = MALLOC(sizeof(LDKChannelKeys_JCalls), "LDKChannelKeys_JCalls"); @@ -2018,6 +1924,12 @@ static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv * env, jclass _a, jobje calls->on_accept_meth = (*env)->GetMethodID(env, c, "on_accept", "(JSS)V"); CHECK(calls->on_accept_meth != NULL); + 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); + LDKChannelKeys ret = { .this_arg = (void*) calls, .get_per_commitment_point = get_per_commitment_point_jcall, @@ -2033,12 +1945,14 @@ static inline LDKChannelKeys LDKChannelKeys_init (JNIEnv * env, jclass _a, jobje .on_accept = on_accept_jcall, .clone = LDKChannelKeys_JCalls_clone, .free = LDKChannelKeys_JCalls_free, + .pubkeys = pubkeys_conv, + .set_pubkeys = NULL, }; return ret; } -JNIEXPORT long JNICALL Java_org_ldk_impl_bindings_LDKChannelKeys_1new (JNIEnv * env, jclass _a, jobject o) { +JNIEXPORT long JNICALL Java_org_ldk_impl_bindings_LDKChannelKeys_1new (JNIEnv * env, jclass _a, jobject o, jlong pubkeys) { LDKChannelKeys *res_ptr = MALLOC(sizeof(LDKChannelKeys), "LDKChannelKeys"); - *res_ptr = LDKChannelKeys_init(env, _a, o); + *res_ptr = LDKChannelKeys_init(env, _a, o, pubkeys); return (long)res_ptr; } JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKChannelKeys_1get_1obj_1from_1jcalls (JNIEnv * env, jclass _a, jlong val) { @@ -2070,7 +1984,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1key_1derivation_ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1counterparty_1commitment(JNIEnv * _env, jclass _b, jlong this_arg, jint feerate_per_kw, jlong commitment_tx, jlong keys, jlongArray htlcs) { LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; LDKTransaction commitment_tx_conv = *(LDKTransaction*)commitment_tx; - FREE((void*)commitment_tx); LDKPreCalculatedTxCreationKeys keys_conv; keys_conv.inner = (void*)(keys & (~1)); keys_conv.is_owned = (keys & 1) || (keys == 0); @@ -2119,7 +2032,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1holder_1co JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1justice_1transaction(JNIEnv * _env, jclass _b, jlong this_arg, jlong justice_tx, jlong input, jlong amount, jbyteArray per_commitment_key, jlong htlc) { LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; LDKTransaction justice_tx_conv = *(LDKTransaction*)justice_tx; - FREE((void*)justice_tx); unsigned char per_commitment_key_arr[32]; CHECK((*_env)->GetArrayLength (_env, per_commitment_key) == 32); (*_env)->GetByteArrayRegion (_env, per_commitment_key, 0, 32, per_commitment_key_arr); @@ -2135,7 +2047,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1justice_1t JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1counterparty_1htlc_1transaction(JNIEnv * _env, jclass _b, jlong this_arg, jlong htlc_tx, jlong input, jlong amount, jbyteArray per_commitment_point, jlong htlc) { LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; LDKTransaction htlc_tx_conv = *(LDKTransaction*)htlc_tx; - FREE((void*)htlc_tx); LDKPublicKey per_commitment_point_ref; CHECK((*_env)->GetArrayLength (_env, per_commitment_point) == 33); (*_env)->GetByteArrayRegion (_env, per_commitment_point, 0, 33, per_commitment_point_ref.compressed_form); @@ -2150,7 +2061,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1counterpar JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1sign_1closing_1transaction(JNIEnv * _env, jclass _b, jlong this_arg, jlong closing_tx) { LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; LDKTransaction closing_tx_conv = *(LDKTransaction*)closing_tx; - FREE((void*)closing_tx); LDKCResult_SignatureNoneZ* ret = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ"); *ret = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, closing_tx_conv); return (long)ret; @@ -2174,6 +2084,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1on_1accept(JNIEnv (this_arg_conv->on_accept)(this_arg_conv->this_arg, &channel_points_conv, counterparty_selected_contest_delay, holder_selected_contest_delay); } +LDKChannelPublicKeys LDKChannelKeys_set_get_pubkeys(LDKChannelKeys* this_arg) { + if (this_arg->set_pubkeys != NULL) + this_arg->set_pubkeys(this_arg); + return this_arg->pubkeys; +} +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1get_1pubkeys(JNIEnv * _env, jclass _b, jlong this_arg) { + LDKChannelKeys* this_arg_conv = (LDKChannelKeys*)this_arg; + LDKChannelPublicKeys ret = LDKChannelKeys_set_get_pubkeys(this_arg_conv); + return ((long)ret.inner) | (ret.is_owned ? 1 : 0); +} + JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_LDKCVecTempl_1MonitorEvent_1arr_1info(JNIEnv *env, jclass _b, jlong ptr) { LDKCVecTempl_MonitorEvent *vec = (LDKCVecTempl_MonitorEvent*)ptr; jlongArray ret = (*env)->NewLongArray(env, vec->datalen); @@ -2224,7 +2145,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_jcall(const void* this_arg if (funding_txo_var.is_owned) { funding_txo_ref = (long)funding_txo_var.inner | 1; } else { - funding_txo_ref = (long)&funding_txo_var; + funding_txo_ref = (long)funding_txo_var.inner & ~1; } LDKChannelMonitor monitor_var = monitor; CHECK((((long)monitor_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2233,7 +2154,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_jcall(const void* this_arg if (monitor_var.is_owned) { monitor_ref = (long)monitor_var.inner | 1; } else { - monitor_ref = (long)&monitor_var; + monitor_ref = (long)monitor_var.inner & ~1; } jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); CHECK(obj != NULL); @@ -2253,7 +2174,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_jcall(const void* this_ar if (funding_txo_var.is_owned) { funding_txo_ref = (long)funding_txo_var.inner | 1; } else { - funding_txo_ref = (long)&funding_txo_var; + funding_txo_ref = (long)funding_txo_var.inner & ~1; } LDKChannelMonitorUpdate update_var = update; CHECK((((long)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. @@ -2262,7 +2183,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_jcall(const void* this_ar if (update_var.is_owned) { update_ref = (long)update_var.inner | 1; } else { - update_ref = (long)&update_var; + update_ref = (long)update_var.inner & ~1; } jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); CHECK(obj != NULL); @@ -2389,7 +2310,7 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_Watch_1release_1pending_ if (arr_conv_14_var.is_owned) { arr_conv_14_ref = (long)arr_conv_14_var.inner | 1; } else { - arr_conv_14_ref = (long)&arr_conv_14_var; + arr_conv_14_ref = (long)arr_conv_14_var.inner & ~1; } ret_arr_ptr[o] = arr_conv_14_ref; } @@ -2508,7 +2429,9 @@ void broadcast_transaction_jcall(const void* this_arg, LDKTransaction tx) { LDKBroadcasterInterface_JCalls *j_calls = (LDKBroadcasterInterface_JCalls*) this_arg; JNIEnv *_env; DO_ASSERT((*j_calls->vm)->GetEnv(j_calls->vm, (void**)&_env, JNI_VERSION_1_8) == JNI_OK); - long tx_ref = (long)&tx; + LDKTransaction *tx_copy = MALLOC(sizeof(LDKTransaction), "LDKTransaction"); + *tx_copy = tx; + long tx_ref = (long)tx_copy; jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); CHECK(obj != NULL); return (*_env)->CallVoidMethod(_env, obj, j_calls->broadcast_transaction_meth, tx_ref); @@ -2557,7 +2480,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKBroadcasterInterface_1ge JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BroadcasterInterface_1broadcast_1transaction(JNIEnv * _env, jclass _b, jlong this_arg, jlong tx) { LDKBroadcasterInterface* this_arg_conv = (LDKBroadcasterInterface*)this_arg; LDKTransaction tx_conv = *(LDKTransaction*)tx; - FREE((void*)tx); (this_arg_conv->broadcast_transaction)(this_arg_conv->this_arg, tx_conv); } @@ -2661,7 +2583,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVecTempl_1Transaction_1ne for (size_t i = 0; i < ret->datalen; i++) { jlong arr_elem = java_elems[i]; LDKTransaction arr_elem_conv = *(LDKTransaction*)arr_elem; - FREE((void*)arr_elem); ret->data[i] = arr_elem_conv; } (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0); @@ -2824,6 +2745,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_KeysInterface_1get_1dest LDKCVec_u8Z arg_var = (this_arg_conv->get_destination_script)(this_arg_conv->this_arg); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -2996,7 +2918,7 @@ void handle_open_channel_jcall(const void* this_arg, LDKPublicKey their_node_id, if (their_features_var.is_owned) { their_features_ref = (long)their_features_var.inner | 1; } else { - their_features_ref = (long)&their_features_var; + their_features_ref = (long)their_features_var.inner & ~1; } jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); CHECK(obj != NULL); @@ -3015,7 +2937,7 @@ void handle_accept_channel_jcall(const void* this_arg, LDKPublicKey their_node_i if (their_features_var.is_owned) { their_features_ref = (long)their_features_var.inner | 1; } else { - their_features_ref = (long)&their_features_var; + their_features_ref = (long)their_features_var.inner & ~1; } jobject obj = (*_env)->NewLocalRef(_env, j_calls->o); CHECK(obj != NULL); @@ -3695,12 +3617,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErro LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCVecTempl_1C3TupleTempl_1ChannelAnnouncement_1_1ChannelUpdate_1_1ChannelUpdate_1arr_1info(JNIEnv *env, jclass _b, jlong ptr) { @@ -3972,10 +3889,11 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1g jlongArray ret_arr = (*_env)->NewLongArray(_env, ret_var.datalen); jlong *ret_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, ret_arr, NULL); for (size_t l = 0; l < ret_var.datalen; l++) { - long arr_conv_63_ref = (long)&ret_var.data[l]; + /*XXX False */long arr_conv_63_ref = (long)&ret_var.data[l]; ret_arr_ptr[l] = arr_conv_63_ref; } (*_env)->ReleasePrimitiveArrayCritical(_env, ret_arr, ret_arr_ptr, 0); + CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_free(ret_var); return ret_arr; } @@ -3995,7 +3913,7 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1g if (arr_conv_18_var.is_owned) { arr_conv_18_ref = (long)arr_conv_18_var.inner | 1; } else { - arr_conv_18_ref = (long)&arr_conv_18_var; + arr_conv_18_ref = (long)arr_conv_18_var.inner & ~1; } ret_arr_ptr[s] = arr_conv_18_ref; } @@ -4150,12 +4068,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHand LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1result_1ok (JNIEnv * env, jclass _a, jlong arg) { @@ -4172,12 +4085,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErr LDKPeerHandleError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeySecpErrorZ_1result_1ok (JNIEnv * env, jclass _a, jlong arg) { @@ -4221,12 +4129,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysSec LDKTxCreationKeys res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long res_ref; - if (res_var.is_owned) { - res_ref = (long)res_var.inner | 1; - } else { - res_ref = (long)&res_var; - } + long res_ref = (long)res_var.inner & ~1; return res_ref; } JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysSecpErrorZ_1get_1err (JNIEnv * _env, jclass _a, jlong arg) { @@ -4302,12 +4205,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErr LDKRoute res_var = (*val->contents.result); CHECK((((long)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long res_ref; - if (res_var.is_owned) { - res_ref = (long)res_var.inner | 1; - } else { - res_ref = (long)&res_var; - } + long res_ref = (long)res_var.inner & ~1; return res_ref; } JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1get_1err (JNIEnv * _env, jclass _a, jlong arg) { @@ -4316,12 +4214,7 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErr LDKLightningError err_var = (*val->contents.err); CHECK((((long)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this. CHECK((((long)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this. - long err_ref; - if (err_var.is_owned) { - err_ref = (long)err_var.inner | 1; - } else { - err_ref = (long)&err_var; - } + long err_ref = (long)err_var.inner & ~1; return err_ref; } JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_LDKCVecTempl_1RouteHint_1arr_1info(JNIEnv *env, jclass _b, jlong ptr) { @@ -5049,7 +4942,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free(JNIEn for (size_t n = 0; n < arg_constr.datalen; n++) { long arr_conv_13 = arg_vals[n]; LDKTransaction arr_conv_13_conv = *(LDKTransaction*)arr_conv_13; - FREE((void*)arr_conv_13); arg_constr.data[n] = arr_conv_13_conv; } (*_env)->ReleaseLongArrayElements (_env, arg, arg_vals, 0); @@ -5176,7 +5068,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1u8Z_1free(JNIEnv * _env, JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Transaction_1free(JNIEnv * _env, jclass _b, jlong _res) { LDKTransaction _res_conv = *(LDKTransaction*)_res; - FREE((void*)_res); Transaction_free(_res_conv); } @@ -5188,7 +5079,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxOut_1free(JNIEnv * _env, jcl JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1new(JNIEnv * _env, jclass _b, jlong a, jlong b) { LDKTransaction b_conv = *(LDKTransaction*)b; - FREE((void*)b); LDKC2Tuple_usizeTransactionZ* ret = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ"); *ret = C2Tuple_usizeTransactionZ_new(a, b_conv); return (long)ret; @@ -5349,12 +5239,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free(JNIEnv * _env, jcl Event_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKEvent* orig_conv = (LDKEvent*)orig; + LDKEvent* ret = MALLOC(sizeof(LDKEvent), "LDKEvent"); + *ret = Event_clone(orig_conv); + return (long)ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)this_ptr; FREE((void*)this_ptr); MessageSendEvent_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)orig; + LDKMessageSendEvent* ret = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent"); + *ret = MessageSendEvent_clone(orig_conv); + return (long)ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEventsProvider_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)this_ptr; FREE((void*)this_ptr); @@ -5373,6 +5277,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_APIError_1free(JNIEnv * _env, APIError_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_APIError_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKAPIError* orig_conv = (LDKAPIError*)orig; + LDKAPIError* ret = MALLOC(sizeof(LDKAPIError), "LDKAPIError"); + *ret = APIError_clone(orig_conv); + return (long)ret; +} + +JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Level_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKLevel* orig_conv = (LDKLevel*)orig; + jclass ret = LDKLevel_to_java(_env, Level_clone(orig_conv)); + return ret; +} + JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Level_1max(JNIEnv * _env, jclass _b) { jclass ret = LDKLevel_to_java(_env, Level_max()); return ret; @@ -5706,6 +5623,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1write(JNI LDKCVec_u8Z arg_var = ChannelConfig_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -5818,6 +5736,12 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UserConfig_1default(JNIEnv * return ((long)ret.inner) | (ret.is_owned ? 1 : 0); } +JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_AccessError_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKAccessError* orig_conv = (LDKAccessError*)orig; + jclass ret = LDKAccessError_to_java(_env, AccessError_clone(orig_conv)); + return ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Access_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKAccess this_ptr_conv = *(LDKAccess*)this_ptr; FREE((void*)this_ptr); @@ -5842,6 +5766,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BroadcasterInterface_1free(JNI BroadcasterInterface_free(this_ptr_conv); } +JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ConfirmationTarget_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKConfirmationTarget* orig_conv = (LDKConfirmationTarget*)orig; + jclass ret = LDKConfirmationTarget_to_java(_env, ConfirmationTarget_clone(orig_conv)); + return ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FeeEstimator_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKFeeEstimator this_ptr_conv = *(LDKFeeEstimator*)this_ptr; FREE((void*)this_ptr); @@ -5967,6 +5897,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1wr LDKCVec_u8Z arg_var = ChannelMonitorUpdate_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -5979,6 +5910,12 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1read(JN return ((long)ret.inner) | (ret.is_owned ? 1 : 0); } +JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateErr_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKChannelMonitorUpdateErr* orig_conv = (LDKChannelMonitorUpdateErr*)orig; + jclass ret = LDKChannelMonitorUpdateErr_to_java(_env, ChannelMonitorUpdateErr_clone(orig_conv)); + return ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKMonitorUpdateError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -6015,6 +5952,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1write(JNIEnv LDKCVec_u8Z arg_var = HTLCUpdate_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -6082,7 +6020,7 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1and if (arr_conv_14_var.is_owned) { arr_conv_14_ref = (long)arr_conv_14_var.inner | 1; } else { - arr_conv_14_ref = (long)&arr_conv_14_var; + arr_conv_14_ref = (long)arr_conv_14_var.inner & ~1; } ret_arr_ptr[o] = arr_conv_14_ref; } @@ -6099,10 +6037,13 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1and jlongArray ret_arr = (*_env)->NewLongArray(_env, ret_var.datalen); jlong *ret_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, ret_arr, NULL); for (size_t h = 0; h < ret_var.datalen; h++) { - long arr_conv_7_ref = (long)&ret_var.data[h]; + LDKEvent *arr_conv_7_copy = MALLOC(sizeof(LDKEvent), "LDKEvent"); + *arr_conv_7_copy = Event_clone(&ret_var.data[h]); + long arr_conv_7_ref = (long)arr_conv_7_copy; ret_arr_ptr[h] = arr_conv_7_ref; } (*_env)->ReleasePrimitiveArrayCritical(_env, ret_arr, ret_arr_ptr, 0); + CVec_EventZ_free(ret_var); return ret_arr; } @@ -6115,10 +6056,13 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1lat jlongArray ret_arr = (*_env)->NewLongArray(_env, ret_var.datalen); jlong *ret_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, ret_arr, NULL); for (size_t n = 0; n < ret_var.datalen; n++) { - long arr_conv_13_ref = (long)&ret_var.data[n]; + LDKTransaction *arr_conv_13_copy = MALLOC(sizeof(LDKTransaction), "LDKTransaction"); + *arr_conv_13_copy = ret_var.data[n]; + long arr_conv_13_ref = (long)arr_conv_13_copy; ret_arr_ptr[n] = arr_conv_13_ref; } (*_env)->ReleasePrimitiveArrayCritical(_env, ret_arr, ret_arr_ptr, 0); + CVec_TransactionZ_free(ret_var); return ret_arr; } @@ -6163,10 +6107,11 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_1c jlongArray ret_arr = (*_env)->NewLongArray(_env, ret_var.datalen); jlong *ret_arr_ptr = (*_env)->GetPrimitiveArrayCritical(_env, ret_arr, NULL); for (size_t b = 0; b < ret_var.datalen; b++) { - long arr_conv_27_ref = (long)&ret_var.data[b]; + /*XXX False */long arr_conv_27_ref = (long)&ret_var.data[b]; ret_arr_ptr[b] = arr_conv_27_ref; } (*_env)->ReleasePrimitiveArrayCritical(_env, ret_arr, ret_arr_ptr, 0); + CVec_C2Tuple_TxidCVec_TxOutZZZ_free(ret_var); return ret_arr; } @@ -6269,6 +6214,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1write(JNIEnv * LDKCVec_u8Z arg_var = OutPoint_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -6287,6 +6233,13 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1fre SpendableOutputDescriptor_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)orig; + LDKSpendableOutputDescriptor* ret = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor"); + *ret = SpendableOutputDescriptor_clone(orig_conv); + return (long)ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelKeys_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKChannelKeys this_ptr_conv = *(LDKChannelKeys*)this_ptr; FREE((void*)this_ptr); @@ -6493,6 +6446,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InMemoryChannelKeys_1wri LDKCVec_u8Z arg_var = InMemoryChannelKeys_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -6768,7 +6722,7 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1ch if (arr_conv_16_var.is_owned) { arr_conv_16_ref = (long)arr_conv_16_var.inner | 1; } else { - arr_conv_16_ref = (long)&arr_conv_16_var; + arr_conv_16_ref = (long)arr_conv_16_var.inner & ~1; } ret_arr_ptr[q] = arr_conv_16_ref; } @@ -6792,7 +6746,7 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1us if (arr_conv_16_var.is_owned) { arr_conv_16_ref = (long)arr_conv_16_var.inner | 1; } else { - arr_conv_16_ref = (long)&arr_conv_16_var; + arr_conv_16_ref = (long)arr_conv_16_var.inner & ~1; } ret_arr_ptr[q] = arr_conv_16_ref; } @@ -9083,6 +9037,13 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free(JNIEnv * _env NetAddress_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKNetAddress* orig_conv = (LDKNetAddress*)orig; + LDKNetAddress* ret = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress"); + *ret = NetAddress_clone(orig_conv); + return (long)ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKUnsignedNodeAnnouncement this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -10158,6 +10119,13 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorAction_1free(JNIEnv * _en ErrorAction_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKErrorAction* orig_conv = (LDKErrorAction*)orig; + LDKErrorAction* ret = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction"); + *ret = ErrorAction_clone(orig_conv); + return (long)ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKLightningError this_ptr_conv; this_ptr_conv.inner = (void*)(this_ptr & (~1)); @@ -10458,6 +10426,13 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCFailChannelUpdate_1free(JN HTLCFailChannelUpdate_free(this_ptr_conv); } +JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCFailChannelUpdate_1clone(JNIEnv * _env, jclass _b, jlong orig) { + LDKHTLCFailChannelUpdate* orig_conv = (LDKHTLCFailChannelUpdate*)orig; + LDKHTLCFailChannelUpdate* ret = MALLOC(sizeof(LDKHTLCFailChannelUpdate), "LDKHTLCFailChannelUpdate"); + *ret = HTLCFailChannelUpdate_clone(orig_conv); + return (long)ret; +} + JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1free(JNIEnv * _env, jclass _b, jlong this_ptr) { LDKChannelMessageHandler this_ptr_conv = *(LDKChannelMessageHandler*)this_ptr; FREE((void*)this_ptr); @@ -10477,6 +10452,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1write(JNI LDKCVec_u8Z arg_var = AcceptChannel_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10496,6 +10472,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1 LDKCVec_u8Z arg_var = AnnouncementSignatures_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10515,6 +10492,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1writ LDKCVec_u8Z arg_var = ChannelReestablish_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10534,6 +10512,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1write(JNI LDKCVec_u8Z arg_var = ClosingSigned_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10553,6 +10532,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1write( LDKCVec_u8Z arg_var = CommitmentSigned_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10572,6 +10552,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1write(JN LDKCVec_u8Z arg_var = FundingCreated_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10591,6 +10572,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1write(JNI LDKCVec_u8Z arg_var = FundingSigned_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10610,6 +10592,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1write(JNI LDKCVec_u8Z arg_var = FundingLocked_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10629,6 +10612,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Init_1write(JNIEnv * _en LDKCVec_u8Z arg_var = Init_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10648,6 +10632,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1write(JNIEn LDKCVec_u8Z arg_var = OpenChannel_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10667,6 +10652,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1write(JNIE LDKCVec_u8Z arg_var = RevokeAndACK_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10686,6 +10672,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1write(JNIEnv * LDKCVec_u8Z arg_var = Shutdown_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10705,6 +10692,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1write(JN LDKCVec_u8Z arg_var = UpdateFailHTLC_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10724,6 +10712,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_ LDKCVec_u8Z arg_var = UpdateFailMalformedHTLC_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10743,6 +10732,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UpdateFee_1write(JNIEnv LDKCVec_u8Z arg_var = UpdateFee_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10762,6 +10752,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1write LDKCVec_u8Z arg_var = UpdateFulfillHTLC_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10781,6 +10772,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1write(JNI LDKCVec_u8Z arg_var = UpdateAddHTLC_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10800,6 +10792,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Ping_1write(JNIEnv * _en LDKCVec_u8Z arg_var = Ping_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10819,6 +10812,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Pong_1write(JNIEnv * _en LDKCVec_u8Z arg_var = Pong_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10838,6 +10832,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncem LDKCVec_u8Z arg_var = UnsignedChannelAnnouncement_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10857,6 +10852,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1wri LDKCVec_u8Z arg_var = ChannelAnnouncement_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10876,6 +10872,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1w LDKCVec_u8Z arg_var = UnsignedChannelUpdate_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10895,6 +10892,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1write(JNI LDKCVec_u8Z arg_var = ChannelUpdate_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10914,6 +10912,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1write(JNIE LDKCVec_u8Z arg_var = ErrorMessage_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10933,6 +10932,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement LDKCVec_u8Z arg_var = UnsignedNodeAnnouncement_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10952,6 +10952,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1write( LDKCVec_u8Z arg_var = NodeAnnouncement_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10980,6 +10981,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1wr LDKCVec_u8Z arg_var = QueryShortChannelIds_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -10999,6 +11001,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_ LDKCVec_u8Z arg_var = ReplyShortChannelIdsEnd_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11018,6 +11021,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1write LDKCVec_u8Z arg_var = QueryChannelRange_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11037,6 +11041,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1write LDKCVec_u8Z arg_var = ReplyChannelRange_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11056,6 +11061,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1w LDKCVec_u8Z arg_var = GossipTimestampFilter_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11191,7 +11197,9 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_PeerManager_1get_1peer for (size_t i = 0; i < ret_var.datalen; i++) { jbyteArray arr_conv_8_arr = (*_env)->NewByteArray(_env, 33); (*_env)->SetByteArrayRegion(_env, arr_conv_8_arr, 0, 33, ret_var.data[i].compressed_form); - (*_env)->SetObjectArrayElement(_env, ret_arr, i, arr_conv_8_arr);} + (*_env)->SetObjectArrayElement(_env, ret_arr, i, arr_conv_8_arr); + } + CVec_PublicKeyZ_free(ret_var); return ret_arr; } @@ -11470,6 +11478,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1write(JN LDKCVec_u8Z arg_var = TxCreationKeys_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11653,6 +11662,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1write LDKCVec_u8Z arg_var = ChannelPublicKeys_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11696,6 +11706,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_get_1revokeable_1redeems LDKCVec_u8Z arg_var = get_revokeable_redeemscript(revocation_key_ref, contest_delay, broadcaster_delayed_payment_key_ref); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11785,6 +11796,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1 LDKCVec_u8Z arg_var = HTLCOutputInCommitment_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11807,6 +11819,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_get_1htlc_1redeemscript( LDKCVec_u8Z arg_var = get_htlc_redeemscript(&htlc_conv, &keys_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11820,6 +11833,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_make_1funding_1redeemscr LDKCVec_u8Z arg_var = make_funding_redeemscript(broadcaster_ref, countersignatory_ref); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -11871,7 +11885,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s this_ptr_conv.inner = (void*)(this_ptr & (~1)); this_ptr_conv.is_owned = (this_ptr & 1) || (this_ptr == 0); LDKTransaction val_conv = *(LDKTransaction*)val; - FREE((void*)val); HolderCommitmentTransaction_set_unsigned_tx(&this_ptr_conv, val_conv); } @@ -11932,7 +11945,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1new_1missing_1holder_1sig(JNIEnv * _env, jclass _b, jlong unsigned_tx, jbyteArray counterparty_sig, jbyteArray holder_funding_key, jbyteArray counterparty_funding_key, jlong keys, jint feerate_per_kw, jlongArray htlc_data) { LDKTransaction unsigned_tx_conv = *(LDKTransaction*)unsigned_tx; - FREE((void*)unsigned_tx); LDKSignature counterparty_sig_ref; CHECK((*_env)->GetArrayLength (_env, counterparty_sig) == 64); (*_env)->GetByteArrayRegion (_env, counterparty_sig, 0, 64, counterparty_sig_ref.compact_form); @@ -12019,6 +12031,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransact LDKCVec_u8Z arg_var = HolderCommitmentTransaction_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -12273,6 +12286,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv * _e LDKCVec_u8Z arg_var = Route_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -12419,6 +12433,8 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_get_1route(JNIEnv * _env, jcl LDKChannelDetails 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 = ChannelDetails_clone(&arr_conv_16_conv); first_hops_constr.data[q] = arr_conv_16_conv; } (*_env)->ReleaseLongArrayElements (_env, first_hops, first_hops_vals, 0); @@ -12616,6 +12632,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1 LDKCVec_u8Z arg_var = DirectionalChannelInfo_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -12757,6 +12774,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIEn LDKCVec_u8Z arg_var = ChannelInfo_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -12835,6 +12853,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIEn LDKCVec_u8Z arg_var = RoutingFees_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -12999,6 +13018,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1wr LDKCVec_u8Z arg_var = NodeAnnouncementInfo_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -13109,6 +13129,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv * LDKCVec_u8Z arg_var = NodeInfo_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; } @@ -13128,6 +13149,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNIE LDKCVec_u8Z arg_var = NetworkGraph_write(&obj_conv); jbyteArray arg_arr = (*_env)->NewByteArray(_env, arg_var.datalen); (*_env)->SetByteArrayRegion(_env, arg_arr, 0, arg_var.datalen, arg_var.data); + CVec_u8Z_free(arg_var); return arg_arr; }