QUIC for Nim
Go to file
diegomrsantos ddcb31ffb7
chore: add support for i386 (#52)
This PR reuses the `install_nim` action from `nim-libp2p`to install Nim
`i386`. We aren't running the test on `i386`- as GitHub runners are
amd64, but only using Nim `i386`.

It also uses `int64` instead of `int` for `VarIntCompatible` and
`PacketNumber` to support `i386`.
2024-09-11 16:11:31 +02:00
.github/workflows chore: add support for i386 (#52) 2024-09-11 16:11:31 +02:00
quic chore: add support for i386 (#52) 2024-09-11 16:11:31 +02:00
tests chore: add support for i386 (#52) 2024-09-11 16:11:31 +02:00
.editorconfig Project setup 2020-09-03 10:05:46 +02:00
.gitignore Add .gitignore for Nim compiled files 2020-09-07 16:32:28 +02:00
.tool-versions chore: add initial logging (#42) 2024-08-14 16:07:26 +02:00
Readme.md Adds bi-directional streams 2021-07-13 08:57:07 +02:00
nim.cfg chore: add support for Nim 2 (#51) 2024-09-10 18:46:19 +02:00
quic.nim Remove everything but the API from the main module 2021-01-04 10:05:34 +01:00
quic.nimble chore: add support for Nim 2 (#51) 2024-09-10 18:46:19 +02:00

Readme.md

QUIC for Nim

We're working towards an implementation of the QUIC protocol for Nim. This is very much a work in progress, and not yet in a usable state.

Building and testing

Install dependencies:

nimble install -d

Run tests:

nimble test

Examples

Import quic and the chronos async library:

import quic
import chronos

Outgoing connections

Connect to a QUIC peer:

let connection = await dial(initTAddress("127.0.0.1:12345"))

Open a new stream:

let stream = await connection.openStream()

Write to the stream:

let message = cast[seq[byte]]("some message")
await stream.write(message)

Close stream:

await stream.close()

Wait for peer to close connection:

await connection.waitClosed()

Incoming connections

Listen for incoming connections:

let listener = listen(initTAddress("127.0.0.1:12345"))

Accept an incoming connection:

let connection = await listener.accept()

Wait for an incoming stream:

let stream = await connection.incomingStream()

Read from a stream:

let message = await stream.read()

Close stream:

await stream.close()

Close connection:

await connection.close()

Stop listening:

await listener.stop()

Roadmap

This is a rough outline of the steps that we expect to take during implementation. They are bound to change over time.

Thanks

We would like to thank the authors of the NGTCP2 library, on whose work we're building.