libcfd 0.1.0

A port of cloudflared (Cloudflare Tunnel Client) to Rust.
Documentation
# LibCFD


A port of [cloudflared](https://github.com/cloudflare/cloudflared) (Cloudflare Tunnel Client) to Rust.

# Purpose


LibCFD intends to be lightweight and programmable replacement for cloudflared and its command line wrappers.
The main advantage of LibCFD is that we don't have to spawn a whole new process (that uses a garbage collected runtime) to connect to Cloudflare.
Thanks to this, we can save on resources by removing the IPC and GC overheads.

# Features


The currently supported features are

- [ ] Named tunnel (Zero Trust Network Access)
- [x] Quick tunnel (TryCloudflare)
- [x] QUIC tunnel connection
- [ ] HTTP tunnel connection (non-priority)
- [ ] Proper client information reporting (priority)
- [ ] Tunnel reconnection
- [x] HTTP connection (kind of works, but is a footgun)
- [ ] HTTP connection wrapper 
- [x] Websocket connection (kind of works, but is an even bigger footgun)
- [ ] Websocket connection wrapper 
- [ ] TCP connection (gated by named tunnel)
- [ ] Remote management (gated by named tunnel)

# To Do


Aside form those already listed above, these two are some to dos I am lookning forward to

- Fix async (some futures are !Send due to capnp, there may be a need to modify capnp)
- Decouple Tokio

# Performance


Work in progress. Seems to be able to hit 1gbps at least.

# Examples


## Http Hello World


Creates a HTTP server that sends simple "hello world" response.

```sh
cargo run --example http_hello_world
```

## Http Download


Creates a HTTP server that sends data as fast as possible.

```sh
cargo run --example http_download
```

## Http Download


Creates a HTTP server that receives data as fast as possible.

```sh
cargo run --example http_upload
```

## Websocket Echo


Creates a WebSocket server that echos all received Websocket messages.

```sh
cargo run --example websocket_echo
```