mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 14:42:40 +01:00
pay: Factor out construction of sendpay_result
This commit is contained in:
parent
2d919d56cb
commit
bb4661f008
1 changed files with 49 additions and 19 deletions
|
@ -73,6 +73,16 @@ static void sendpay_resolve(const tal_t *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
static struct sendpay_result*
|
||||
sendpay_result_success(const tal_t *ctx,
|
||||
const struct preimage *payment_preimage)
|
||||
{
|
||||
struct sendpay_result *result = tal(ctx, struct sendpay_result);
|
||||
result->succeeded = true;
|
||||
result->preimage = *payment_preimage;
|
||||
return result;
|
||||
}
|
||||
|
||||
static void sendpay_success(struct lightningd *ld,
|
||||
const struct sha256 *payment_hash,
|
||||
const struct preimage *payment_preimage)
|
||||
|
@ -80,15 +90,32 @@ static void sendpay_success(struct lightningd *ld,
|
|||
const tal_t *tmpctx = tal_tmpctx(ld);
|
||||
struct sendpay_result *result;
|
||||
|
||||
result = tal(tmpctx, struct sendpay_result);
|
||||
result->succeeded = true;
|
||||
result->preimage = *payment_preimage;
|
||||
result = sendpay_result_success(tmpctx, payment_preimage);
|
||||
|
||||
sendpay_resolve(tmpctx, ld, payment_hash, result);
|
||||
|
||||
tal_free(tmpctx);
|
||||
}
|
||||
|
||||
static struct sendpay_result*
|
||||
sendpay_result_route_failure(const tal_t *ctx,
|
||||
bool retry_plausible,
|
||||
struct routing_failure *fail,
|
||||
const u8 *onionreply,
|
||||
const char *details)
|
||||
{
|
||||
struct sendpay_result *result = tal(ctx, struct sendpay_result);
|
||||
result->succeeded = false;
|
||||
result->errorcode =
|
||||
(!fail) ? PAY_UNPARSEABLE_ONION :
|
||||
(!retry_plausible) ? PAY_DESTINATION_PERM_FAIL :
|
||||
/*otherwise*/ PAY_TRY_OTHER_ROUTE ;
|
||||
result->onionreply = onionreply;
|
||||
result->routing_failure = fail;
|
||||
result->details = details;
|
||||
return result;
|
||||
}
|
||||
|
||||
static void sendpay_route_failure(struct lightningd *ld,
|
||||
const struct sha256 *payment_hash,
|
||||
bool retry_plausible,
|
||||
|
@ -99,21 +126,29 @@ static void sendpay_route_failure(struct lightningd *ld,
|
|||
const tal_t *tmpctx = tal_tmpctx(ld);
|
||||
struct sendpay_result *result;
|
||||
|
||||
result = tal(tmpctx, struct sendpay_result);
|
||||
result->succeeded = false;
|
||||
result->errorcode =
|
||||
(!fail) ? PAY_UNPARSEABLE_ONION :
|
||||
(!retry_plausible) ? PAY_DESTINATION_PERM_FAIL :
|
||||
/*otherwise*/ PAY_TRY_OTHER_ROUTE ;
|
||||
result->onionreply = onionreply;
|
||||
result->routing_failure = fail;
|
||||
result->details = details;
|
||||
result = sendpay_result_route_failure(tmpctx,
|
||||
retry_plausible,
|
||||
fail,
|
||||
onionreply,
|
||||
details);
|
||||
|
||||
sendpay_resolve(tmpctx, ld, payment_hash, result);
|
||||
|
||||
tal_free(tmpctx);
|
||||
}
|
||||
|
||||
static struct sendpay_result *
|
||||
sendpay_result_simple_fail(const tal_t *ctx,
|
||||
int errorcode,
|
||||
char const *details)
|
||||
{
|
||||
struct sendpay_result *result = tal(ctx, struct sendpay_result);
|
||||
result->succeeded = false;
|
||||
result->errorcode = errorcode;
|
||||
result->details = details;
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Immediately fail during send_payment call. */
|
||||
static void sendpay_fail_now(void (*cb)(const struct sendpay_result *, void*),
|
||||
void *cbarg,
|
||||
|
@ -123,10 +158,7 @@ static void sendpay_fail_now(void (*cb)(const struct sendpay_result *, void*),
|
|||
const tal_t *tmpctx = tal_tmpctx(NULL);
|
||||
struct sendpay_result *result;
|
||||
|
||||
result = tal(tmpctx, struct sendpay_result);
|
||||
result->succeeded = false;
|
||||
result->errorcode = errorcode;
|
||||
result->details = details;
|
||||
result = sendpay_result_simple_fail(tmpctx, errorcode, details);
|
||||
|
||||
cb(result, cbarg);
|
||||
|
||||
|
@ -141,9 +173,7 @@ sendpay_succeed_now(void (*cb)(const struct sendpay_result*, void*),
|
|||
const tal_t *tmpctx = tal_tmpctx(NULL);
|
||||
struct sendpay_result *result;
|
||||
|
||||
result = tal(tmpctx, struct sendpay_result);
|
||||
result->succeeded = true;
|
||||
result->preimage = *payment_preimage;
|
||||
result = sendpay_result_success(tmpctx, payment_preimage);
|
||||
|
||||
cb(result, cbarg);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue