mirror of
https://github.com/aljazceru/lightning.git
synced 2026-02-03 05:04:21 +01:00
protocol: add routing information.
This will be onioned, but the structure (or something like it) should survive. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
189
lightning.pb-c.c
189
lightning.pb-c.c
@@ -480,6 +480,92 @@ void open_complete__free_unpacked
|
||||
assert(message->base.descriptor == &open_complete__descriptor);
|
||||
protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
|
||||
}
|
||||
void route_step__init
|
||||
(RouteStep *message)
|
||||
{
|
||||
static RouteStep init_value = ROUTE_STEP__INIT;
|
||||
*message = init_value;
|
||||
}
|
||||
size_t route_step__get_packed_size
|
||||
(const RouteStep *message)
|
||||
{
|
||||
assert(message->base.descriptor == &route_step__descriptor);
|
||||
return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
|
||||
}
|
||||
size_t route_step__pack
|
||||
(const RouteStep *message,
|
||||
uint8_t *out)
|
||||
{
|
||||
assert(message->base.descriptor == &route_step__descriptor);
|
||||
return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
|
||||
}
|
||||
size_t route_step__pack_to_buffer
|
||||
(const RouteStep *message,
|
||||
ProtobufCBuffer *buffer)
|
||||
{
|
||||
assert(message->base.descriptor == &route_step__descriptor);
|
||||
return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
|
||||
}
|
||||
RouteStep *
|
||||
route_step__unpack
|
||||
(ProtobufCAllocator *allocator,
|
||||
size_t len,
|
||||
const uint8_t *data)
|
||||
{
|
||||
return (RouteStep *)
|
||||
protobuf_c_message_unpack (&route_step__descriptor,
|
||||
allocator, len, data);
|
||||
}
|
||||
void route_step__free_unpacked
|
||||
(RouteStep *message,
|
||||
ProtobufCAllocator *allocator)
|
||||
{
|
||||
assert(message->base.descriptor == &route_step__descriptor);
|
||||
protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
|
||||
}
|
||||
void route__init
|
||||
(Route *message)
|
||||
{
|
||||
static Route init_value = ROUTE__INIT;
|
||||
*message = init_value;
|
||||
}
|
||||
size_t route__get_packed_size
|
||||
(const Route *message)
|
||||
{
|
||||
assert(message->base.descriptor == &route__descriptor);
|
||||
return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
|
||||
}
|
||||
size_t route__pack
|
||||
(const Route *message,
|
||||
uint8_t *out)
|
||||
{
|
||||
assert(message->base.descriptor == &route__descriptor);
|
||||
return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
|
||||
}
|
||||
size_t route__pack_to_buffer
|
||||
(const Route *message,
|
||||
ProtobufCBuffer *buffer)
|
||||
{
|
||||
assert(message->base.descriptor == &route__descriptor);
|
||||
return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
|
||||
}
|
||||
Route *
|
||||
route__unpack
|
||||
(ProtobufCAllocator *allocator,
|
||||
size_t len,
|
||||
const uint8_t *data)
|
||||
{
|
||||
return (Route *)
|
||||
protobuf_c_message_unpack (&route__descriptor,
|
||||
allocator, len, data);
|
||||
}
|
||||
void route__free_unpacked
|
||||
(Route *message,
|
||||
ProtobufCAllocator *allocator)
|
||||
{
|
||||
assert(message->base.descriptor == &route__descriptor);
|
||||
protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
|
||||
}
|
||||
void routing__init
|
||||
(Routing *message)
|
||||
{
|
||||
@@ -1741,6 +1827,109 @@ const ProtobufCMessageDescriptor open_complete__descriptor =
|
||||
(ProtobufCMessageInit) open_complete__init,
|
||||
NULL,NULL,NULL /* reserved[123] */
|
||||
};
|
||||
static const ProtobufCFieldDescriptor route_step__field_descriptors[3] =
|
||||
{
|
||||
{
|
||||
"end",
|
||||
1,
|
||||
PROTOBUF_C_LABEL_OPTIONAL,
|
||||
PROTOBUF_C_TYPE_BOOL,
|
||||
offsetof(RouteStep, next_case),
|
||||
offsetof(RouteStep, end),
|
||||
NULL,
|
||||
NULL,
|
||||
0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */
|
||||
0,NULL,NULL /* reserved1,reserved2, etc */
|
||||
},
|
||||
{
|
||||
"bitcoin",
|
||||
2,
|
||||
PROTOBUF_C_LABEL_OPTIONAL,
|
||||
PROTOBUF_C_TYPE_MESSAGE,
|
||||
offsetof(RouteStep, next_case),
|
||||
offsetof(RouteStep, bitcoin),
|
||||
&bitcoin_pubkey__descriptor,
|
||||
NULL,
|
||||
0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */
|
||||
0,NULL,NULL /* reserved1,reserved2, etc */
|
||||
},
|
||||
{
|
||||
"amount",
|
||||
4,
|
||||
PROTOBUF_C_LABEL_REQUIRED,
|
||||
PROTOBUF_C_TYPE_UINT32,
|
||||
0, /* quantifier_offset */
|
||||
offsetof(RouteStep, amount),
|
||||
NULL,
|
||||
NULL,
|
||||
0, /* flags */
|
||||
0,NULL,NULL /* reserved1,reserved2, etc */
|
||||
},
|
||||
};
|
||||
static const unsigned route_step__field_indices_by_name[] = {
|
||||
2, /* field[2] = amount */
|
||||
1, /* field[1] = bitcoin */
|
||||
0, /* field[0] = end */
|
||||
};
|
||||
static const ProtobufCIntRange route_step__number_ranges[2 + 1] =
|
||||
{
|
||||
{ 1, 0 },
|
||||
{ 4, 2 },
|
||||
{ 0, 3 }
|
||||
};
|
||||
const ProtobufCMessageDescriptor route_step__descriptor =
|
||||
{
|
||||
PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
|
||||
"route_step",
|
||||
"RouteStep",
|
||||
"RouteStep",
|
||||
"",
|
||||
sizeof(RouteStep),
|
||||
3,
|
||||
route_step__field_descriptors,
|
||||
route_step__field_indices_by_name,
|
||||
2, route_step__number_ranges,
|
||||
(ProtobufCMessageInit) route_step__init,
|
||||
NULL,NULL,NULL /* reserved[123] */
|
||||
};
|
||||
static const ProtobufCFieldDescriptor route__field_descriptors[1] =
|
||||
{
|
||||
{
|
||||
"steps",
|
||||
1,
|
||||
PROTOBUF_C_LABEL_REPEATED,
|
||||
PROTOBUF_C_TYPE_MESSAGE,
|
||||
offsetof(Route, n_steps),
|
||||
offsetof(Route, steps),
|
||||
&route_step__descriptor,
|
||||
NULL,
|
||||
0, /* flags */
|
||||
0,NULL,NULL /* reserved1,reserved2, etc */
|
||||
},
|
||||
};
|
||||
static const unsigned route__field_indices_by_name[] = {
|
||||
0, /* field[0] = steps */
|
||||
};
|
||||
static const ProtobufCIntRange route__number_ranges[1 + 1] =
|
||||
{
|
||||
{ 1, 0 },
|
||||
{ 0, 1 }
|
||||
};
|
||||
const ProtobufCMessageDescriptor route__descriptor =
|
||||
{
|
||||
PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
|
||||
"route",
|
||||
"Route",
|
||||
"Route",
|
||||
"",
|
||||
sizeof(Route),
|
||||
1,
|
||||
route__field_descriptors,
|
||||
route__field_indices_by_name,
|
||||
1, route__number_ranges,
|
||||
(ProtobufCMessageInit) route__init,
|
||||
NULL,NULL,NULL /* reserved[123] */
|
||||
};
|
||||
static const ProtobufCFieldDescriptor routing__field_descriptors[1] =
|
||||
{
|
||||
{
|
||||
|
||||
@@ -26,6 +26,8 @@ typedef struct _OpenChannel OpenChannel;
|
||||
typedef struct _OpenAnchor OpenAnchor;
|
||||
typedef struct _OpenCommitSig OpenCommitSig;
|
||||
typedef struct _OpenComplete OpenComplete;
|
||||
typedef struct _RouteStep RouteStep;
|
||||
typedef struct _Route Route;
|
||||
typedef struct _Routing Routing;
|
||||
typedef struct _UpdateAddHtlc UpdateAddHtlc;
|
||||
typedef struct _UpdateFulfillHtlc UpdateFulfillHtlc;
|
||||
@@ -282,9 +284,50 @@ struct _OpenComplete
|
||||
, NULL }
|
||||
|
||||
|
||||
/*
|
||||
* FIXME: Routing information.
|
||||
*/
|
||||
typedef enum {
|
||||
ROUTE_STEP__NEXT__NOT_SET = 0,
|
||||
ROUTE_STEP__NEXT_END = 1,
|
||||
ROUTE_STEP__NEXT_BITCOIN = 2,
|
||||
} RouteStep__NextCase;
|
||||
|
||||
struct _RouteStep
|
||||
{
|
||||
ProtobufCMessage base;
|
||||
/*
|
||||
* How much to forward (difference is fee)
|
||||
*/
|
||||
uint32_t amount;
|
||||
RouteStep__NextCase next_case;
|
||||
union {
|
||||
/*
|
||||
* Actually, this is the last one
|
||||
*/
|
||||
protobuf_c_boolean end;
|
||||
/*
|
||||
* Next lightning node.
|
||||
*/
|
||||
/*
|
||||
* Other realms go here...
|
||||
*/
|
||||
BitcoinPubkey *bitcoin;
|
||||
};
|
||||
};
|
||||
#define ROUTE_STEP__INIT \
|
||||
{ PROTOBUF_C_MESSAGE_INIT (&route_step__descriptor) \
|
||||
, 0, ROUTE_STEP__NEXT__NOT_SET, {} }
|
||||
|
||||
|
||||
struct _Route
|
||||
{
|
||||
ProtobufCMessage base;
|
||||
size_t n_steps;
|
||||
RouteStep **steps;
|
||||
};
|
||||
#define ROUTE__INIT \
|
||||
{ PROTOBUF_C_MESSAGE_INIT (&route__descriptor) \
|
||||
, 0,NULL }
|
||||
|
||||
|
||||
struct _Routing
|
||||
{
|
||||
ProtobufCMessage base;
|
||||
@@ -728,6 +771,44 @@ OpenComplete *
|
||||
void open_complete__free_unpacked
|
||||
(OpenComplete *message,
|
||||
ProtobufCAllocator *allocator);
|
||||
/* RouteStep methods */
|
||||
void route_step__init
|
||||
(RouteStep *message);
|
||||
size_t route_step__get_packed_size
|
||||
(const RouteStep *message);
|
||||
size_t route_step__pack
|
||||
(const RouteStep *message,
|
||||
uint8_t *out);
|
||||
size_t route_step__pack_to_buffer
|
||||
(const RouteStep *message,
|
||||
ProtobufCBuffer *buffer);
|
||||
RouteStep *
|
||||
route_step__unpack
|
||||
(ProtobufCAllocator *allocator,
|
||||
size_t len,
|
||||
const uint8_t *data);
|
||||
void route_step__free_unpacked
|
||||
(RouteStep *message,
|
||||
ProtobufCAllocator *allocator);
|
||||
/* Route methods */
|
||||
void route__init
|
||||
(Route *message);
|
||||
size_t route__get_packed_size
|
||||
(const Route *message);
|
||||
size_t route__pack
|
||||
(const Route *message,
|
||||
uint8_t *out);
|
||||
size_t route__pack_to_buffer
|
||||
(const Route *message,
|
||||
ProtobufCBuffer *buffer);
|
||||
Route *
|
||||
route__unpack
|
||||
(ProtobufCAllocator *allocator,
|
||||
size_t len,
|
||||
const uint8_t *data);
|
||||
void route__free_unpacked
|
||||
(Route *message,
|
||||
ProtobufCAllocator *allocator);
|
||||
/* Routing methods */
|
||||
void routing__init
|
||||
(Routing *message);
|
||||
@@ -972,6 +1053,12 @@ typedef void (*OpenCommitSig_Closure)
|
||||
typedef void (*OpenComplete_Closure)
|
||||
(const OpenComplete *message,
|
||||
void *closure_data);
|
||||
typedef void (*RouteStep_Closure)
|
||||
(const RouteStep *message,
|
||||
void *closure_data);
|
||||
typedef void (*Route_Closure)
|
||||
(const Route *message,
|
||||
void *closure_data);
|
||||
typedef void (*Routing_Closure)
|
||||
(const Routing *message,
|
||||
void *closure_data);
|
||||
@@ -1023,6 +1110,8 @@ extern const ProtobufCEnumDescriptor open_channel__anchor_offer__descriptor;
|
||||
extern const ProtobufCMessageDescriptor open_anchor__descriptor;
|
||||
extern const ProtobufCMessageDescriptor open_commit_sig__descriptor;
|
||||
extern const ProtobufCMessageDescriptor open_complete__descriptor;
|
||||
extern const ProtobufCMessageDescriptor route_step__descriptor;
|
||||
extern const ProtobufCMessageDescriptor route__descriptor;
|
||||
extern const ProtobufCMessageDescriptor routing__descriptor;
|
||||
extern const ProtobufCMessageDescriptor update_add_htlc__descriptor;
|
||||
extern const ProtobufCMessageDescriptor update_fulfill_htlc__descriptor;
|
||||
|
||||
@@ -118,7 +118,24 @@ message open_complete {
|
||||
// FIXME: add a merkle proof plus block headers here?
|
||||
}
|
||||
|
||||
// FIXME: Routing information.
|
||||
message route_step {
|
||||
// Where to next?
|
||||
oneof next {
|
||||
// Actually, this is the last one
|
||||
bool end = 1;
|
||||
// Next lightning node.
|
||||
bitcoin_pubkey bitcoin = 2;
|
||||
// Other realms go here...
|
||||
}
|
||||
|
||||
// How much to forward (difference is fee)
|
||||
required uint32 amount = 4;
|
||||
};
|
||||
|
||||
message route {
|
||||
repeated route_step steps = 1;
|
||||
};
|
||||
|
||||
message routing {
|
||||
required bytes info = 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user