core-lightning/plugins/renepay/routetracker.h
Lagrang3 0c685f541e renepay: rethink the computed routes storage
Simply move the "computed routes" array from the payment to the
routetracker. It makes sense to put all temporary stages of routing into
a single data structure: the routetracker.

Signed-off-by: Lagrang3 <lagrang3@protonmail.com>
2024-08-12 13:27:34 -07:00

59 lines
2.1 KiB
C

#ifndef LIGHTNING_PLUGINS_RENEPAY_ROUTETRACKER_H
#define LIGHTNING_PLUGINS_RENEPAY_ROUTETRACKER_H
/* This module provides entry points for the management of a route thread. */
#include "config.h"
#include <plugins/renepay/route.h>
struct routetracker{
/* Routes that we compute and are kept here before sending them. */
struct route **computed_routes;
/* Routes that we sendpay and are still waiting for rpc returning
* success. */
struct route_map *sent_routes;
/* Routes that have concluded (either SENDPAY_FAILED or
* SENDPAY_COMPLETE). */
struct route **finalized_routes;
};
struct routetracker *new_routetracker(const tal_t *ctx, struct payment *payment);
void routetracker_cleanup(struct routetracker *routetracker);
bool routetracker_have_results(struct routetracker *routetracker);
/* The payment has a list of route that have "returned". Calling this function
* payment will look through that list and process those routes' results:
* - update the commited amounts,
* - update the uncertainty network,
* - and free the allocated memory. */
void payment_collect_results(struct payment *payment,
struct preimage **payment_preimage,
enum jsonrpc_errcode *final_error,
const char **final_msg);
/* Sends a sendpay request for this route. */
struct command_result *route_sendpay_request(struct command *cmd,
struct route *route TAKES,
struct payment *payment);
struct command_result *notification_sendpay_failure(struct command *cmd,
const char *buf,
const jsmntok_t *params);
struct command_result *notification_sendpay_success(struct command *cmd,
const char *buf,
const jsmntok_t *params);
/* Notify the tracker that this route has failed. */
void route_failure_register(struct routetracker *routetracker,
struct route *route);
// FIXME: double-check that we actually get one notification for each sendpay,
// ie. that after some time we don't have yet pending sendpays for old failed or
// successful payments that we havent processed because we haven't received the
// notification
#endif /* LIGHTNING_PLUGINS_RENEPAY_ROUTETRACKER_H */