Commit Graph

55 Commits

Author SHA1 Message Date
Dmitriy Ryajov 5af418f850
add accepts api (#51)
* add accepts api

* 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

* fix merge

* add tls support for `accept` call

* fix tests to use accepts & cb
2021-06-14 17:20:28 -06:00
andri lim f80278aeee
implement frame reader for buffered payload (#55)
now the frame can choose to read from buffered
payload if available or read from asyncstream
if the buffer is empty
2021-06-14 13:41:31 -06:00
jangko 99d643013b
fix autobahn client to process multi messages test case
turn out the autobahn server not only use single echo
message for all test case, but also use multi messages
response to measure performance.
2021-06-12 14:58:28 +07:00
jangko 3634754621
run autobahn client test in CI
fixes #27
2021-06-12 13:51:54 +07:00
jangko a60dbd5dc9
fixes required to allow autobahn client works
- send requestUrl.query in client.nim
- fixes genMaskKey bug in utils.nim
- using Base64Pad instead of Base64 in `connect` proc
- add `host` field to request HTTP header in `connect` proc
- add missing `secure` param in `connect` proc

fixes #32
2021-06-12 13:51:50 +07:00
jangko 88e99ff028
fixes failing utf8 test case
it was a buggy test case, not related to windows
but by chance discovered on windows.
2021-06-12 13:39:24 +07:00
Dmitriy Ryajov 480560c7c8
don't await `nil` futures 2021-06-11 20:53:34 -06:00
Dmitriy Ryajov deb46fef31
fix messages with multiple empty frames (#61) 2021-06-11 20:14:53 -06:00
Dmitriy Ryajov 1188bf3c0b
fix limits tests (#59) 2021-06-11 19:05:06 -06:00
Dmitriy Ryajov 03744f37c7
Fix autobahn tls tests (#57)
* split out message and control frames sending

* fix premature closure under TLS

* dissable hints noise
2021-06-11 18:40:56 -06:00
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
Dmitriy Ryajov e632202037
wip: modeling extensions api (#48) 2021-06-01 14:24:00 -06:00
andri lim 1fed598d8c
implement extension parameters parser (#44)
fixes #43
2021-05-31 21:02:24 -06:00
Dmitriy Ryajov 64da1a4344
Rework http (#38)
* wip

* wip

* move http under ws folder

* use asyctest

* wip

* wip

* rework response sending

* make example work with latest changes

* wip request/response

* misc

* fix example to use new http layer

* pass tls flags to client

* more cleanup

* unused imports

* more unsused imports

* better headers

* add helpre sendError

* export sendError

* attach selected proto to session

* move proto to session

* handle unsupported version

* fix tests

* comment out for now

* fix utf8 tests

* allow tests to be ran in tls

* misc

* use Port type

* add tls flags

* better api

* run tls tests

* fix tests on windows

* allow running tests with tls

* mic

* wip

* fix autobahn ci

* handle close

* cleanup

* logging and error handling

* remove old stream
2021-05-31 20:39:14 -06:00
andri lim 723971a39d
autobahn: add test for tlsserver (#42)
also publish the result to github pages like ws server
2021-05-28 10:48:23 -06:00
andri lim 90c664545d
implement UTF8 handling (#35)
* implement UTF8 handling

or to be precisely, we add UTF8 validator which main duty
is to detect malformed UTF8 sequence using a fast DFA UTF8
decoder.

also enable autobahn UTF8 category tests, much more green :)

fixes #13

* fixes case 7.5.1 Send a close frame with invalid UTF8 payload

* add tests for validateUTF8

- tests for validateUTF8 in raw mode
- tests for validateUTF8 in websocket client/server
2021-05-28 10:47:24 -06:00
andri lim 93f0aba685
add autobahn_client for incoming autobahn client test (#34) 2021-05-26 11:07:57 -06:00
Dmitriy Ryajov eb62ec1725
Extract session (#31)
* extract websocket session

* fix tests

* fix frame tests
2021-05-25 16:39:10 -06:00
Dmitriy Ryajov 0f48b62eb9
Fix tlsclient (#30)
* fix npe in handshake

* fix tls client
2021-05-25 15:00:53 -06:00
Dmitriy Ryajov 5d0bcf6375
Client server (#29)
* better client/server separation (WIP)

* add extensions interface

* index out of bounds
2021-05-25 08:02:32 -06:00
Dmitriy Ryajov 0a4121c29d
Fix first frame (#28)
* split out frame

* use new api

* fix import
2021-05-24 18:47:27 -06:00
jangko cdd5224905
autobahn: fixes unknownserver in summary report 2021-05-22 20:07:30 +07:00
jangko f3185c216f
change the python version in github action ci
from: 2.7.17 to pypy-2.7

why:
there is annoying warning message in github action ci:

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020.
Please upgrade your Python as Python 2.7 won't be maintained after that date.
A future version of pip will drop support for Python 2.7.
More details about Python 2 support in pip, can be found at
https://pip.pypa.io/en/latest/development/release-process/#python-2-support
2021-05-22 17:31:24 +07:00
Dmitriy Ryajov 352bb6b3a4
use binary flag 2021-05-22 03:09:28 -06:00
Arijit Das 1b3e47d2f5
Add support for binary frame 2021-05-22 03:05:57 -06:00
Dmitriy Ryajov f37e4bb19a
Cleanup (#21)
* cleanup

* send payload with ping
2021-05-22 02:26:45 -06:00
jangko 30d4f5ca17
add meaningful name to the example server
this server name will appear at autobahn summary report.
if we do not set the server name, it will display ugly `unknown server`.
2021-05-22 12:12:42 +07:00
jangko c38ddf89de
add autobahn summary report link to readme.md 2021-05-22 12:12:42 +07:00
jangko 888ec6f089
make autobahn start_server.sh executable
from:          ./scripts/start_server.sh
to  : chmod +x ./scripts/start_server.sh
2021-05-22 12:12:42 +07:00
jangko 4de768910b
text formatting: consistent indentation
using 2 spaces for both `testtlswebsockets.nim` and
`tests/testwebsockets.nim`
2021-05-22 12:12:41 +07:00
jangko 2ed87ca58d
skip failing test case in `tests/testwebsockets.nim`
on Windows there is bug with message:
`Unhandled exception: Stream is already closed! [AsyncStreamIncorrectDefect]`
caused by the async stream closed more than once.
2021-05-22 12:12:41 +07:00
Arijit Das ffeaaa9d68
Automate autobhan test suite. 2021-05-22 12:12:41 +07:00
Arijit Das f8cfcd1f99
Fix webscoket close and fix test cases. 2021-05-22 12:12:41 +07:00
Arijit Das 51d834a0a1
Fix webscoket close and fix test cases. 2021-05-22 12:12:31 +07:00
Dmitriy Ryajov 0feac12a67
cleanup nimble file 2021-05-21 11:44:58 -06:00
Dmitriy Ryajov 4133d1d87c
bump chronos to 3.0.0 2021-05-21 10:42:41 +07:00
jangko 6bdc3680f0
add .gitignore 2021-05-21 10:25:31 +07:00
Arijit Das de1446593d
Update Readme.md with roadmap. 2021-05-21 09:47:14 +07:00
jangko 51ad3fd685
fix github action script
change "mingw$arch-6.3.0.7z" to "mingw$arch.7z"
2021-05-21 09:14:36 +07:00
jangko 640f21b0ca
add github action CI badge to readme.md 2021-05-21 09:13:09 +07:00
Arijit Das 6b76bd8261
WIP: Implement websocket TLS. (#7)
* Update http to use chronos http.

* Implement TLS in websocket.

* Add webscoket TLS test.

* Minor nit.

* Add TLS test file.

* Update http to use chronos http. (#6)

* Update http to use chronos http.

* Add stream.nim file.

* Address comments.

* Fix CI failure.

* Minor change.

* Address comments.

* Fix windows CI failing test.

* minor cleanup

* spacess

* more idiomatic connect

* use stew/base10

Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>

* Implement TLS in websocket.

* Minor nit.

* merge master

* wip

* Update http to use chronos http. (#6)

* Update http to use chronos http.

* Add stream.nim file.

* Address comments.

* Fix CI failure.

* Minor change.

* Address comments.

* Fix windows CI failing test.

* minor cleanup

* spacess

* more idiomatic connect

* use stew/base10

Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>

* Update http to use chronos http.

* Implement TLS in websocket.

* Minor nit.

* Update http to use chronos http. (#6)

* Update http to use chronos http.

* Add stream.nim file.

* Address comments.

* Fix CI failure.

* Minor change.

* Address comments.

* Fix windows CI failing test.

* minor cleanup

* spacess

* more idiomatic connect

* use stew/base10

Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>

* Implement TLS in websocket.

* Minor nit.

* add testing keys

* wip

* fix test

* wip

* remove eth dep and add skipdirs

* fix package structure

* fix deps

* check nim version

* Fix CI failure.

* Don't call `ws.stream.closeWait()`

* always close both ends to complete the sequence

* misc

* don't fail on close

* Fix windows CI.

* fix linux x86 builds

* use consistent connect pattern

* move keys to better place

* return dumbResponse

* small cleanup

Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
2021-04-13 16:05:58 -06:00
Arijit Das e4f00698ea
Update http to use chronos http. (#6)
* Update http to use chronos http.

* Add stream.nim file.

* Address comments.

* Fix CI failure.

* Minor change.

* Address comments.

* Fix windows CI failing test.

* minor cleanup

* spacess

* more idiomatic connect

* use stew/base10

Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
2021-04-05 15:01:10 -06:00
Dmitriy Ryajov 3923a9be20
Rework (#5)
* Use seq[byte] to store data.

* Working bytes conversion.

* Refactor the code.

* Add test.

* Add websocket test and fix closing handshake.

* Add MsgReader to read data in external buffer.

* rework frame reading

* don't do toTitleCase

* fix examples

* use byte for more comfort

* rework message reading + api

* fix tests

* adding specific exception types

* minor cleanup

* fixing tests

* more tests

* check the fin flag at the correct place

* info for debug

* split data not encoded frames

* more tests

* wip - control messages

* closing flow and more explicit exception handling

* test close and pings

* add tests task to nimble

* adding ci

* change recv semantics

* add frame tests

* remove echo

* better frame tests

* fix

* fix

* handle continuation frames properly

* more close logic handling

* wip tests

* handle close reasons properly

* test control frames encoding

* don't pass ws to event callbacks

* fix masking and use correct base64 encoding

* fix ci

* addressing review comments

* fix client example

* i386 ci fix

* wip ci

* fix reading offset

* don't read if socket closed

* fix ci

* wip

* don't read if socket is closed

Co-authored-by: Arijit Das <arijit@status.im>
Co-authored-by: Arijit Das <arijitad.in@gmail.com>
2021-03-18 09:30:21 -06:00
Arijit Das a1ae7d2c70
[WIP] Web socket client implementation. (#2)
* Implement websocket server.

* Implement websocket client.

* Run nimpretty.

* Remove commented code.

* Address comments.

* Address comments on websocket server.

* Use seq[byte] to store data.

* Working bytes conversion.

* Remove result from return

* Refactor the code.

* Minor change.

* Add test.

* Add websocket test and fix closing handshake.

* Add MsgReader to read data in external buffer.
2021-03-10 21:34:14 -06:00
Arijit Das 8e34e0f138 Remove ws.nim file. 2021-01-05 18:29:06 +05:30
Arijit Das 350fa94418 Add HTTP and websocket client. 2021-01-05 18:27:46 +05:30
Arijit Das fa37c87dd5 Parse Frame and handle different message type. 2020-12-15 18:39:50 +05:30
Arijit Das 8fb4e78353 Support Websocket handshake and update the readme. 2020-12-08 18:19:22 +05:30
Arijit Das a1c1c37a41 Update the readme instruction to test the server. 2020-12-08 15:45:21 +05:30
Arijit Das d4901f1cba Add callback handler for HTTP server 2020-12-08 15:39:11 +05:30