diff --git a/lightning.pb-c.c b/lightning.pb-c.c index 13dadf6b8..d1a3ead3c 100644 --- a/lightning.pb-c.c +++ b/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] = { { diff --git a/lightning.pb-c.h b/lightning.pb-c.h index 5e0a4e8db..1119e698e 100644 --- a/lightning.pb-c.h +++ b/lightning.pb-c.h @@ -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; diff --git a/lightning.proto b/lightning.proto index d462358cc..d3f5c0ed7 100644 --- a/lightning.proto +++ b/lightning.proto @@ -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; }