XTP requires a duplex pipe between the External Protocol process and the client application. This duplex pipe follows the xtp-ctl
protocol, defined in this document.
xtp-ctl
uses the following other standards:
- multiaddr for describing both "external transport" and "xtp-ctl pipe" endpoint addresses.
- multistream for a self-describing wire protocol
- libp2p transports for the transport protocol interface and modules to use
- libp2p stream multiplexing to interleave many transport protocol flows in the same xtp-ctl pipe.
The xtp-ctl
wire protocol requires a reliable duplex pipe.
WIP
The xtp-ctl
wire protocol requires a reliable duplex pipe.
WIP
WIP
Discuss stream multiplexing.
(Outside or inside the protocol??)
WIP
WIP
(use protobuf??)
The xtp-ctl
wire protocol is meant to be mounted on top of multistream, but it is also possible to use xtp-ctl
without multistream. Therefore, this spec defines the xtp-ctl
protocol directly, leaving the multistream mounting to the parent.
The xtp-ctl
pipe we propose here includes multistream, and suggests a transport, but leaves it up to the user to decide ultimately, as the user may have transport constraints.
If the xtp-ctl
pipe is being transferred over a lossy protocol (eg. UDP across the internet), we strongly recommend using a transport such as QUIC to prevent head-of-line blocking issues.
It is recommended that xtp-ctl
implementations use libraries from the multiformats and libp2p projects.