invoices: Add delexpiredinvoice command.

This commit is contained in:
ZmnSCPxj 2018-02-26 12:37:53 +00:00 committed by Christian Decker
parent 8966a175ee
commit 3b0081aebb
11 changed files with 118 additions and 4 deletions

View File

@ -6,6 +6,7 @@ doc-wrongdir:
MANPAGES := doc/lightning-cli.1 \
doc/lightning-decodepay.7 \
doc/lightning-delexpiredinvoice.7 \
doc/lightning-delinvoice.7 \
doc/lightning-getroute.7 \
doc/lightning-invoice.7 \

View File

View File

@ -0,0 +1,35 @@
LIGHTNING-DELEXPIREDINVOICE(7)
==============================
:doctype: manpage
NAME
----
lightning-delexpiredinvoice - Protocol for removing expired invoices.
SYNOPSIS
--------
*delexpiredinvoice* ['maxexpirytime']
DESCRIPTION
-----------
The *delexpiredinvoice* RPC command removes all invoices that have
expired on or before the given 'maxexpirytime'.
If 'maxexpirytime' is not specified then all expired invoices are
deleted.
RETURN VALUE
------------
On success, does nothing.
AUTHOR
------
ZmnSCPxj <ZmnSCPxj@protonmail.com> is mainly responsible.
SEE ALSO
--------
lightning-delinvoice(7)
RESOURCES
---------
Main web site: https://github.com/ElementsProject/lightning

View File

@ -2,12 +2,12 @@
.\" Title: lightning-delinvoice
.\" Author: [see the "AUTHOR" section]
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\" Date: 01/18/2018
.\" Date: 02/26/2018
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
.TH "LIGHTNING\-DELINVOIC" "7" "01/18/2018" "\ \&" "\ \&"
.TH "LIGHTNING\-DELINVOIC" "7" "02/26/2018" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@ -45,7 +45,7 @@ On success, an invoice description will be returned as per lightning\-listinvoic
Rusty Russell <rusty@rustcorp\&.com\&.au> is mainly responsible\&.
.SH "SEE ALSO"
.sp
lightning\-listinvoice(7), lightning\-waitinvoice(7), lightning\-invoice(7)\&.
lightning\-listinvoice(7), lightning\-waitinvoice(7), lightning\-invoice(7), lightning\-delexpiredinvoice(7)
.SH "RESOURCES"
.sp
Main web site: https://github\&.com/ElementsProject/lightning

View File

@ -30,7 +30,8 @@ Rusty Russell <rusty@rustcorp.com.au> is mainly responsible.
SEE ALSO
--------
lightning-listinvoice(7), lightning-waitinvoice(7), lightning-invoice(7).
lightning-listinvoice(7), lightning-waitinvoice(7), lightning-invoice(7),
lightning-delexpiredinvoice(7)
RESOURCES
---------

View File

@ -387,6 +387,42 @@ static const struct json_command delinvoice_command = {
};
AUTODATA(json_command, &delinvoice_command);
static void json_delexpiredinvoice(struct command *cmd, const char *buffer,
const jsmntok_t *params)
{
jsmntok_t *maxexpirytimetok;
u64 maxexpirytime = time_now().ts.tv_sec;
struct json_result *result;
if (!json_get_params(cmd, buffer, params,
"?maxexpirytime", &maxexpirytimetok,
NULL)) {
return;
}
if (maxexpirytimetok) {
if (!json_tok_u64(buffer, maxexpirytimetok, &maxexpirytime)) {
command_fail(cmd, "'%.*s' is not a valid number",
maxexpirytimetok->end - maxexpirytimetok->start,
buffer + maxexpirytimetok->start);
return;
}
}
wallet_invoice_delete_expired(cmd->ld->wallet, maxexpirytime);
result = new_json_result(cmd);
json_object_start(result, NULL);
json_object_end(result);
command_success(cmd, result);
}
static const struct json_command delexpiredinvoice_command = {
"delexpiredinvoice",
json_delexpiredinvoice,
"Delete all expired invoices that expired as of given {maxexpirytime} (a UNIX epoch time), or all expired invoices if not specified"
};
AUTODATA(json_command, &delexpiredinvoice_command);
static void json_waitanyinvoice(struct command *cmd,
const char *buffer, const jsmntok_t *params)
{

View File

@ -384,6 +384,19 @@ bool invoices_delete(struct invoices *invoices,
return true;
}
void invoices_delete_expired(struct invoices *invoices,
u64 max_expiry_time)
{
sqlite3_stmt *stmt;
stmt = db_prepare(invoices->db,
"DELETE FROM invoices"
" WHERE state = ?"
" AND expiry_time <= ?;");
sqlite3_bind_int(stmt, 1, EXPIRED);
sqlite3_bind_int64(stmt, 2, max_expiry_time);
db_exec_prepared(invoices->db, stmt);
}
bool invoices_iterate(struct invoices *invoices,
struct invoice_iterator *it)
{

View File

@ -101,6 +101,16 @@ bool invoices_find_unpaid(struct invoices *invoices,
bool invoices_delete(struct invoices *invoices,
struct invoice invoice);
/**
* invoices_delete_expired - Delete all expired invoices
* with expiration time less than or equal to the given.
*
* @invoices - the invoice handler.
* @max_expiry_time - the maximum expiry time to delete.
*/
void invoices_delete_expired(struct invoices *invoices,
u64 max_expiry_time);
/**
* invoices_iterate - Iterate over all existing invoices
*

View File

@ -113,6 +113,10 @@ bool invoices_create(struct invoices *invoices UNNEEDED,
bool invoices_delete(struct invoices *invoices UNNEEDED,
struct invoice invoice UNNEEDED)
{ fprintf(stderr, "invoices_delete called!\n"); abort(); }
/* Generated stub for invoices_delete_expired */
void invoices_delete_expired(struct invoices *invoices UNNEEDED,
u64 max_expiry_time UNNEEDED)
{ fprintf(stderr, "invoices_delete_expired called!\n"); abort(); }
/* Generated stub for invoices_find_by_label */
bool invoices_find_by_label(struct invoices *invoices UNNEEDED,
struct invoice *pinvoice UNNEEDED,

View File

@ -1395,6 +1395,10 @@ bool wallet_invoice_delete(struct wallet *wallet,
{
return invoices_delete(wallet->invoices, invoice);
}
void wallet_invoice_delete_expired(struct wallet *wallet, u64 e)
{
invoices_delete_expired(wallet->invoices, e);
}
bool wallet_invoice_iterate(struct wallet *wallet,
struct invoice_iterator *it)
{

View File

@ -506,6 +506,16 @@ bool wallet_invoice_find_unpaid(struct wallet *wallet,
bool wallet_invoice_delete(struct wallet *wallet,
struct invoice invoice);
/**
* wallet_invoice_delete_expired - Delete all expired invoices
* with expiration time less than or equal to the given.
*
* @wallet - the wallet to delete invoices from.
* @max_expiry_time - the maximum expiry time to delete.
*/
void wallet_invoice_delete_expired(struct wallet *wallet,
u64 max_expiry_time);
/**
* wallet_invoice_iterate - Iterate over all existing invoices
*