Граф коммитов

22 Коммитов

Автор SHA1 Сообщение Дата
Christoph M. Wintersteiger a828a4d31c
Add facilities for custom ACME challenges (#4115) 2022-08-17 17:13:16 +00:00
Julien Maffre 8a41971203
Add experimental support for HTTP/2 (#4010) 2022-07-14 14:37:10 +00:00
Julien Maffre 413ee9fe11
Add arbitrary service data (#3997) 2022-06-30 10:51:40 +00:00
Julien Maffre dc15c42d09
Add support for second read-only snapshots directory (#3973) 2022-06-30 10:03:16 +01:00
Christoph M. Wintersteiger 6d7f2a5aad
Allow regex to specify endpoints to serve on an interface (#3970) 2022-06-24 15:21:28 +01:00
Julien Maffre f3afd63a11
Restrict maximum size of client HTTP request (#3941) 2022-06-23 19:43:49 +01:00
Christoph M. Wintersteiger bd378bef0e
ACME challenge frontend (#3945) 2022-06-21 18:03:29 +00:00
Christoph M. Wintersteiger c734789723
Add ACME client for globally endorsed TLS certificates (#3877)
Co-authored-by: Amaury Chamayou <amaury@xargs.fr>
Co-authored-by: Maik Riechert <maik.riechert@arcor.de>
2022-06-15 17:06:32 +00:00
Julien Maffre 75c6bb9a3d
CheckQuorum Raft extension (#3865) 2022-05-27 11:37:28 +01:00
Christoph M. Wintersteiger 68f5cb1993
Add published_address to node-to-node interface configuration (#3867)
Co-authored-by: Eddy Ashton <ashton.eddy@gmail.com>
Co-authored-by: Julien Maffre <42961061+jumaffre@users.noreply.github.com>
2022-05-20 14:17:08 +00:00
Renato Golin 92fb195692
UDP enclave echo server (#3787)
* UDP enclave echo server

This is an end-to-end UDP echo server, which receives UDP packets from
multiple clients at the same time, passes them to the enclave with a
message type that is handled by a QUICEchoEndpoint (which just echoes
back the messages to the client) and send the message back through the
ring buffer to the host, which then send to the correct client.

The UDP packets, alongside their socket addresses, are passed to the
enclave as quic_inbound rung buffer messages and received back as
quic_outbound messages. For now, those are encoded as {long,long} to
avoid size issues in the serialization, but eventually, they'll be
broken down to their components {short,char[14]}.

UDP interfaces are created like their TCP counterparts, via a new
field in RPCInterface called 'protocol', with default to "tcp". If
the field is set to "udp", the host will listen on the UDP version
of RPCConnection and use the 'quic_*' messages, which connects to the
new QUICEchoEndpoint.

Also:
 * Renaming "service" to "port"
 * Refactoring TCPBehaviour into SocketBehaviour<ConnType>
 * Factor next_id out to share amongst all RPC connections
 * Use local ConnID in rpc_connections, same as tcp/udp
 * Factor some common logic into socket.h
 * Factor pending writes/reads into ds/pending_io.h

Issues:
 * There is an implicit 'quic_start' message but not a 'quic_close' one,
   which can be a problem for many connections, over time. It's not
   clear to me yet that this will create leaks / mismatches, but we have
   to make sure it doesn't on the next step.
 * The current RPCConnections is parametrized by TCPImpl/UDPImpl, which
   is handy for now but creates the implicit structural dependency
   between the two parameters. We need a common interface to derive
   from, so that the two structures can actually be checked at compile
   time.
 * To implement the step above, we need to fix 'proxy_ptr' and
   'close_ptr' to allow pointer checks (virtual inheritance). I tried
   implementing that first but it creates ripples throughout the code.
   We may never fix this, but then things like the auto-increment will
   have to continue being external, amongst other things.

Next Steps:

 1. To implement all services through unencrypted UDP, just like TCP, so
    we can test the longecity and stability of the UDP channel. We can
    ignore all TLS errors, and just make sure requests and responses are
    passed to the right services and back to the right clients. This
    will also need a UDP client, so that nodes can RPC each other in
    UDP.

 2. To implement QUICEndpoint using ngtcp2 and HTTP3Endpoint using nghttp3
    and test using proper TLS certificates and make sure the services are
    still available in the same way.

* Unnecessary uv dependency in quic_endpoint

* Increasing number of doxygen graph nodes

* Simplify UDP echo test

* Remove unnecessary FIXME workaround

* if constexpr isTCP/isUDP

* Fix sockaddr encoding to {short,char[14]}

* Testing multiple UDP messages
2022-05-10 16:48:33 +00:00
Julien Maffre 2a13d92af3
Allow `null` for `node_client_interface` field in `cchost` configuration (#3819) 2022-05-06 19:11:53 +01:00
Julien Maffre 21850c560f
Stricter JSON configuration schema for `cchost` (#3816) 2022-05-06 10:09:35 +01:00
Heidi Howard 10551f096b
Update docs with additional information on CCF Raft (#3778) 2022-04-22 12:43:46 +01:00
Christoph M. Wintersteiger 465481f752
Add documentation for identity parameters of transition_service_to_open (#3663)
Co-authored-by: Julien Maffre <42961061+jumaffre@users.noreply.github.com>
2022-03-18 11:27:49 +00:00
Eddy Ashton 5e05584896
Add free-form `node_data` field (#3662) 2022-03-16 18:59:09 +00:00
Maik Riechert 5e5d14e28b
Network: per-interface endorsement type (#3450) 2022-02-07 10:18:52 +00:00
Julien Maffre c636300cf1
Camel case `cchost` configuration enums (#3489) 2022-02-01 16:52:09 +00:00
Julien Maffre b3032e5d67
Mark `rpc_interfaces.bind_address` as required field in docs (#3480) 2022-02-01 14:15:08 +00:00
Julien Maffre 44edf4bf3e
Fix JSON configuration RPC public address (#3479) 2022-01-31 16:44:31 +00:00
Julien Maffre e862af2417
Fix logging host_level schema (#3463) 2022-01-27 15:31:10 +00:00
Julien Maffre 2f9078a3aa
JSON schema for `cchost` configuration file (#3446) 2022-01-27 11:57:49 +00:00