@@ -436,16 +436,23 @@ uint64_t get_chan_score(const void *this_arg, uint64_t scid, const LDKNodeId *sr
436
436
return 42 ;
437
437
}
438
438
439
- struct CustomRouteFinderParams {
440
- LDKLogger *logger;
441
- LDKNetworkGraph *graph_ref;
442
- LDKThirtyTwoBytes random_seed_bytes;
443
- };
444
- struct LDKCResult_RouteLightningErrorZ custom_find_route (const void *this_arg, struct LDKPublicKey payer, const struct LDKRouteParameters *NONNULL_PTR route_params, const uint8_t (*payment_hash)[32], struct LDKCVec_ChannelDetailsZ *first_hops, const struct LDKScore *NONNULL_PTR scorer) {
445
- const struct CustomRouteFinderParams *params = (struct CustomRouteFinderParams *)this_arg;
439
+ struct LDKCResult_RouteLightningErrorZ custom_find_route (const void *this_arg, struct LDKPublicKey payer, const struct LDKRouteParameters *NONNULL_PTR route_params, const uint8_t (*payment_hash)[32], struct LDKCVec_ChannelDetailsZ *first_hops, const struct LDKInFlightHtlcs in_flights) {
440
+ const LDK::DefaultRouter *router = (LDK::DefaultRouter *)this_arg;
446
441
assert (first_hops->datalen == 1 );
447
442
assert (ChannelDetails_get_is_usable (&first_hops->data [0 ]));
448
- return find_route (payer, route_params, params->graph_ref , first_hops, *params->logger , scorer, ¶ms->random_seed_bytes .data );
443
+ const LDK::Router router_impl = DefaultRouter_as_Router (&*router);
444
+ return router_impl->find_route (router_impl->this_arg , payer, route_params, payment_hash, first_hops, in_flights);
445
+ }
446
+
447
+ void custom_notify_payment_path_failed (const void *this_arg, struct LDKCVec_RouteHopZ path, uint64_t short_channel_id) {
448
+ const LDK::DefaultRouter *router = (LDK::DefaultRouter *)this_arg;
449
+ const LDK::Router router_impl = DefaultRouter_as_Router (&*router);
450
+ return router_impl->notify_payment_path_failed (router_impl->this_arg , path, short_channel_id);
451
+ }
452
+ void custom_notify_payment_path_successful (const void *this_arg, struct LDKCVec_RouteHopZ path) {
453
+ const LDK::DefaultRouter *router = (LDK::DefaultRouter *)this_arg;
454
+ const LDK::Router router_impl = DefaultRouter_as_Router (&*router);
455
+ return router_impl->notify_payment_path_successful (router_impl->this_arg , path);
449
456
}
450
457
451
458
int main () {
@@ -527,17 +534,18 @@ int main() {
527
534
node_secret1 = *node_secret1_res->contents .result ;
528
535
529
536
LDK::ChannelManager cm1 = ChannelManager_new (fee_est, mon1, broadcast, logger1, KeysManager_as_KeysInterface (&keys1), UserConfig_default (), ChainParameters_new (network, BestBlock_new (chain_tip, 0 )));
537
+ LDK::OnionMessenger om1 = OnionMessenger_new (KeysManager_as_KeysInterface (&keys1), logger1);
530
538
531
539
LDK::CVec_ChannelDetailsZ channels = ChannelManager_list_channels (&cm1);
532
540
assert (channels->datalen == 0 );
533
541
534
- LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler1));
542
+ LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler1), OnionMessenger_as_OnionMessageHandler (&om1) );
535
543
536
544
LDK::IgnoringMessageHandler ignoring_handler1 = IgnoringMessageHandler_new ();
537
545
LDK::CustomMessageHandler custom_msg_handler1 = IgnoringMessageHandler_as_CustomMessageHandler (&ignoring_handler1);
538
546
539
547
random_bytes = keys_source1->get_secure_random_bytes (keys_source1->this_arg );
540
- LDK::PeerManager net1 = PeerManager_new (std::move (msg_handler1), node_secret1, &random_bytes.data , logger1, std::move (custom_msg_handler1));
548
+ LDK::PeerManager net1 = PeerManager_new (std::move (msg_handler1), node_secret1, 0xdeadbeef , &random_bytes.data , logger1, std::move (custom_msg_handler1));
541
549
542
550
// Demo getting a channel key and check that its returning real pubkeys:
543
551
LDK::Sign chan_signer1 = keys_source1->get_channel_signer (keys_source1->this_arg , false , 42 );
@@ -559,6 +567,7 @@ int main() {
559
567
UserConfig_set_channel_handshake_config (&config2, std::move (handshake_config2));
560
568
561
569
LDK::ChannelManager cm2 = ChannelManager_new (fee_est, mon2, broadcast, logger2, KeysManager_as_KeysInterface (&keys2), std::move (config2), ChainParameters_new (network, BestBlock_new (chain_tip, 0 )));
570
+ LDK::OnionMessenger om2 = OnionMessenger_new (KeysManager_as_KeysInterface (&keys2), logger2);
562
571
563
572
LDK::CVec_ChannelDetailsZ channels2 = ChannelManager_list_channels (&cm2);
564
573
assert (channels2->datalen == 0 );
@@ -569,13 +578,13 @@ int main() {
569
578
LDK::CResult_boolLightningErrorZ ann_res = net_msgs2->handle_channel_announcement (net_msgs2->this_arg , chan_ann->contents .result );
570
579
assert (ann_res->result_ok );
571
580
572
- LDK::MessageHandler msg_handler2 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm2), std::move (net_msgs2));
581
+ LDK::MessageHandler msg_handler2 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm2), std::move (net_msgs2), OnionMessenger_as_OnionMessageHandler (&om1) );
573
582
574
583
LDK::IgnoringMessageHandler ignoring_handler2 = IgnoringMessageHandler_new ();
575
584
LDK::CustomMessageHandler custom_msg_handler2 = IgnoringMessageHandler_as_CustomMessageHandler (&ignoring_handler2);
576
585
577
586
random_bytes = keys_source2->get_secure_random_bytes (keys_source2->this_arg );
578
- LDK::PeerManager net2 = PeerManager_new (std::move (msg_handler2), node_secret2, &random_bytes.data , logger2, std::move (custom_msg_handler2));
587
+ LDK::PeerManager net2 = PeerManager_new (std::move (msg_handler2), node_secret2, 0xdeadbeef , &random_bytes.data , logger2, std::move (custom_msg_handler2));
579
588
580
589
// Open a connection!
581
590
PeersConnection conn (cm1, cm2, net1, net2);
@@ -814,6 +823,8 @@ int main() {
814
823
assert (cm1_read->result_ok );
815
824
LDK::ChannelManager cm1 (std::move (cm1_read->contents .result ->b ));
816
825
826
+ LDK::OnionMessenger om1 = OnionMessenger_new (KeysManager_as_KeysInterface (&keys1), logger1);
827
+
817
828
LDK::CVec_ChannelMonitorZ mons_list2 = LDKCVec_ChannelMonitorZ { .data = (LDKChannelMonitor*)malloc (sizeof (LDKChannelMonitor)), .datalen = 1 };
818
829
assert (mons2.mons .size () == 1 );
819
830
mons_list2->data [0 ] = *& std::get<1 >(mons2.mons [0 ]); // Note that we need a reference, thus need a raw clone here, which *& does.
@@ -827,14 +838,16 @@ int main() {
827
838
assert (cm2_read->result_ok );
828
839
LDK::ChannelManager cm2 (std::move (cm2_read->contents .result ->b ));
829
840
841
+ LDK::OnionMessenger om2 = OnionMessenger_new (KeysManager_as_KeysInterface (&keys2), logger2);
842
+
830
843
// Attempt to close the channel...
831
844
uint8_t chan_id[32 ];
832
845
for (int i = 0 ; i < 32 ; i++) { chan_id[i] = channel_open_txid[31 -i]; }
833
846
LDK::CResult_NoneAPIErrorZ close_res = ChannelManager_close_channel (&cm1, &chan_id, ChannelManager_get_our_node_id (&cm2));
834
847
assert (!close_res->result_ok ); // Note that we can't close while disconnected!
835
848
836
849
// Open a connection!
837
- LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler1));
850
+ LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler1), OnionMessenger_as_OnionMessageHandler (&om1) );
838
851
random_bytes = keys_source1->get_secure_random_bytes (keys_source1->this_arg );
839
852
840
853
LDKPublicKey chan_2_node_id = ChannelManager_get_our_node_id (&cm2);
@@ -849,9 +862,9 @@ int main() {
849
862
},
850
863
.free = NULL ,
851
864
};
852
- LDK::PeerManager net1 = PeerManager_new (std::move (msg_handler1), node_secret1, &random_bytes.data , logger1, std::move (custom_msg_handler1));
865
+ LDK::PeerManager net1 = PeerManager_new (std::move (msg_handler1), node_secret1, 0xdeadbeef , &random_bytes.data , logger1, std::move (custom_msg_handler1));
853
866
854
- LDK::MessageHandler msg_handler2 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm2), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler2));
867
+ LDK::MessageHandler msg_handler2 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm2), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler2), OnionMessenger_as_OnionMessageHandler (&om2) );
855
868
CustomMsgQueue peer_2_custom_messages;
856
869
LDKCustomMessageHandler custom_msg_handler2 = {
857
870
.this_arg = &peer_2_custom_messages,
@@ -865,7 +878,7 @@ int main() {
865
878
.free = NULL ,
866
879
};
867
880
random_bytes = keys_source1->get_secure_random_bytes (keys_source1->this_arg );
868
- LDK::PeerManager net2 = PeerManager_new (std::move (msg_handler2), node_secret2, &random_bytes.data , logger2, std::move (custom_msg_handler2));
881
+ LDK::PeerManager net2 = PeerManager_new (std::move (msg_handler2), node_secret2, 0xdeadbeef , &random_bytes.data , logger2, std::move (custom_msg_handler2));
869
882
870
883
PeersConnection conn (cm1, cm2, net1, net2);
871
884
@@ -878,21 +891,24 @@ int main() {
878
891
}
879
892
880
893
// Send another payment, this time via the InvoicePayer
881
- struct CustomRouteFinderParams router_params = {
882
- . logger = &logger1,
883
- . graph_ref = &net_graph1,
884
- . random_seed_bytes = keys_source1-> get_secure_random_bytes (keys_source1-> this_arg ),
885
- } ;
894
+ LDK::ProbabilisticScorer scorer = ProbabilisticScorer_new ( ProbabilisticScoringParameters_default (), &net_graph1, logger1);
895
+ LDK::Score scorer_trait = ProbabilisticScorer_as_Score (&scorer);
896
+ LDK::MultiThreadedLockableScore scorer_mtx = MultiThreadedLockableScore_new ( std::move (scorer_trait));
897
+ LDK::LockableScore scorer_mtx_trait = MultiThreadedLockableScore_as_LockableScore (&scorer_mtx);
898
+ const LDK::DefaultRouter router = DefaultRouter_new (&net_graph1, logger1, keys_source1-> get_secure_random_bytes (keys_source1-> this_arg ), std::move (scorer_mtx_trait)) ;
886
899
LDKRouter sending_router = {
887
- .this_arg = &router_params ,
900
+ .this_arg = ( void *)&router ,
888
901
.find_route = custom_find_route,
902
+ .notify_payment_path_failed = custom_notify_payment_path_failed,
903
+ .notify_payment_path_successful = custom_notify_payment_path_successful,
904
+ // We don't probe, so we opt to crash if the probe functions are called.
905
+ .notify_payment_probe_successful = NULL ,
906
+ .notify_payment_probe_failed = NULL ,
889
907
.free = NULL ,
890
908
};
891
- LDK::ProbabilisticScorer scorer = ProbabilisticScorer_new (ProbabilisticScoringParameters_default (), &net_graph1, logger1);
892
- LDK::MultiThreadedLockableScore scorer_mtx = MultiThreadedLockableScore_new (ProbabilisticScorer_as_Score (&scorer));
893
909
EventQueue queue1;
894
910
LDKEventHandler handler1 = { .this_arg = &queue1, .handle_event = handle_event, .free = NULL };
895
- LDK::InvoicePayer payer = InvoicePayer_new (ChannelManager_as_Payer (&cm1), sending_router, &scorer_mtx, logger1, handler1, Retry_attempts (0 ));
911
+ LDK::InvoicePayer payer = InvoicePayer_new (ChannelManager_as_Payer (&cm1), sending_router, logger1, handler1, Retry_attempts (0 ));
896
912
897
913
LDK::CResult_InvoiceSignOrCreationErrorZ invoice_res2 = create_invoice_from_channelmanager (&cm2,
898
914
KeysManager_as_KeysInterface (&keys2),
0 commit comments