Websocket for Nim
Go to file
Dmitriy Ryajov 3e1599d790
Fix partial frame handling and allow extensions to hijack the flow (#56)
* moving files around

* wip

* wip

* move tls example into server example

* add tls functionality

* rename

* rename

* fix tests

* move extension related files to own folder

* use trace instead of debug

* export extensions

* rework partial frame handling and closing

* rework status codes as distincts

* logging

* re-enable extensions processing for frames

* enable all test for non-tls server

* remove tlsserver

* remove offset to mask - don't think we need it

* pass sessions extensions when calling send/recv

* adding encode/decode extensions flow test

* move server/client setup to helpers

* proper frame order execution on decode

* fix tls tests
2021-06-11 14:04:09 -06:00
.github/workflows Fix partial frame handling and allow extensions to hijack the flow (#56) 2021-06-11 14:04:09 -06:00
autobahn Fix partial frame handling and allow extensions to hijack the flow (#56) 2021-06-11 14:04:09 -06:00
examples Fix partial frame handling and allow extensions to hijack the flow (#56) 2021-06-11 14:04:09 -06:00
tests Fix partial frame handling and allow extensions to hijack the flow (#56) 2021-06-11 14:04:09 -06:00
ws Fix partial frame handling and allow extensions to hijack the flow (#56) 2021-06-11 14:04:09 -06:00
.editorconfig Implement web socket handshake 2020-12-01 18:13:59 +05:30
.gitignore add .gitignore 2021-05-21 10:25:31 +07:00
Readme.md add autobahn summary report link to readme.md 2021-05-22 12:12:42 +07:00
ws.nimble Rework http (#38) 2021-05-31 20:39:14 -06:00

Readme.md

Websocket for Nim

Github action

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

See what is available and what is missing in Autobahn summary report

Building and testing

Install dependencies:

nimble install -d

Starting HTTP server:

nim c -r test/server.nim

Testing Server Response:

curl --location --request GET 'http://localhost:8888'

Testing Websocket Handshake:

curl --include \
   --no-buffer \
   --header "Connection: Upgrade" \
   --header "Upgrade: websocket" \
   --header "Host: example.com:80" \
   --header "Origin: http://example.com:80" \
   --header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
   --header "Sec-WebSocket-Version: 13" \
   http://localhost:8888/ws

Roadmap

  • Framing
    • Text Messages
    • Binary Messages
  • Pings/Pongs
  • Reserved Bits
  • Opcodes
    • Non-control Opcodes
    • Control Opcodes
  • Fragmentation
  • UTF-8 Handling
  • Close Handling
    • Basic close behavior
    • Close frame structure
    • Payload length
    • Valid close codes
    • Invalid close codes
  • Integrate Autobahn Test suite. (In progress)
  • WebSocket Compression
  • WebSocket Extensions
  • Performance