Commit Graph

209 Commits

Author SHA1 Message Date
Benjamin Sergeant
a0e35ad644 build fix 2019-03-14 18:53:21 -07:00
Benjamin Sergeant
b91dc77d6f select interrupt cleanup 2019-03-14 18:37:38 -07:00
Benjamin Sergeant
b462b5a5c8 linux build fix 2019-03-14 15:17:17 -07:00
Benjamin Sergeant
b5e7fb20b6 replace uint8_t with uint64_t for the send/close requests types / use named variable to index into the _fildes array 2019-03-14 15:03:57 -07:00
Benjamin Sergeant
9d245add9c set a default close reason string 2019-03-14 14:52:51 -07:00
Benjamin Sergeant
ded03ed743 do not busy loop while sending 2019-03-14 14:48:08 -07:00
Benjamin Sergeant
5b4354a6f3 send optimization + ws file transfer test 2019-03-14 14:47:53 -07:00
Benjamin Sergeant
08c2cdbf1d send can fail silently when sending would block (EWOULDBLOCK return for send) (#18)
* try to use a pipe for communication

* flush send buffer on the background thread

* cleanup

* linux fix / linux still use event fd for now

* cleanup
2019-03-13 23:09:45 -07:00
Benjamin Sergeant
dedbeb3eab websocket send: make sure all data in the kernel buffer is sent 2019-03-11 22:16:55 -07:00
Benjamin Sergeant
d88bf16500 add new message type when receiving message fragments 2019-03-11 11:12:43 -07:00
Benjamin Sergeant
c202f8cf1d Socket code refactoring, plus stop polling with a 1s timeout in readBytes while we only want to poll with a 1ms timeout 2019-03-04 13:40:15 -08:00
Benjamin Sergeant
0c226c7629 readBytes does not read bytes one by one but in chunks 2019-03-02 21:11:16 -08:00
Benjamin Sergeant
a9e772f330 create a blocking + cancellable Socket::readBytes method 2019-03-02 15:16:46 -08:00
Benjamin Sergeant
86cc76388e create a blocking + cancellable Socket::readBytes method 2019-03-02 11:01:51 -08:00
Benjamin Sergeant
2c86fd947f Feature/http (#16)
* add skeleton and broken http client code.

GET returns "Resource temporarily unavailable" errors...

* linux compile fix

* can GET some pages

* Update formatting in README.md

* unittest for sending large messages

* document bug

* Feature/send large message (#14)

* introduce send fragment

* can pass a fin frame

* can send messages which are a perfect multiple of the chunk size

* set fin only for last fragment

* cleanup

* last fragment should be of type CONTINUATION

* Add simple send and receive programs

* speedups receiving + better way to wait for thing

* receive speedup by using linked list of chunks instead of large array

* document bug

* use chunks to receive data

* trailing spaces

* Update README.md

Add note about message fragmentation.

* Feature/ws cli (#15)

* New command line tool for transfering files / still very beta.

* add readme

* use cli11 for argument parsing

* json -> msgpack

* stop using base64 and use binary which can be stored in message pack

* add target for building with homebrew

* all CMakeLists are referenced by the top level one

* add ws_chat and ws_connect sub commands to ws

* cleanup

* add echo and broadcast server as ws sub-commands

* add gitignore

* comments

* ping pong added to ws

* mv cobra_publisher under ws folder

* Update README.md

* linux build fix

* linux build fix

* move http_client to a ws sub-command

* simple HTTP post support (urlencode parameters)

* can specify extra headers

* chunk encoding / simple redirect support / -I option

* follow redirects is optional

* make README vim markdown plugin friendly

* cleanup argument parsing + add socket creation factory

* add missing file

* http gzip compression

* cleanup

* doc

* Feature/send large message (#14)

* introduce send fragment

* can pass a fin frame

* can send messages which are a perfect multiple of the chunk size

* set fin only for last fragment

* cleanup

* last fragment should be of type CONTINUATION

* Add simple send and receive programs

* speedups receiving + better way to wait for thing

* receive speedup by using linked list of chunks instead of large array

* document bug

* use chunks to receive data

* trailing spaces
2019-02-28 21:54:03 -08:00
Benjamin Sergeant
932bb732e0 Feature/send large message (#14)
* introduce send fragment

* can pass a fin frame

* can send messages which are a perfect multiple of the chunk size

* set fin only for last fragment

* cleanup

* last fragment should be of type CONTINUATION

* Add simple send and receive programs

* speedups receiving + better way to wait for thing

* receive speedup by using linked list of chunks instead of large array

* document bug

* use chunks to receive data

* trailing spaces
2019-02-20 18:59:07 -08:00
Benjamin Sergeant
726e66ca66 unittest for sending large messages 2019-02-16 10:32:02 -08:00
Benjamin Sergeant
8983dd97a1 use dynamically generated port number to configure servers in unittest 2019-01-28 15:24:19 -08:00
Benjamin Sergeant
907605c59c windows build fix 2019-01-27 10:46:02 -08:00
Benjamin Sergeant
58921592c8 constexpr to declare number of fds 2019-01-26 21:01:36 -08:00
Benjamin Sergeant
b9c49c38ed linux fix 2019-01-26 20:57:48 -08:00
Benjamin Sergeant
76c97027c8 remove shutdown call 2019-01-26 20:54:23 -08:00
Benjamin Sergeant
5db3620f49 rebase poll branch 2019-01-26 20:50:25 -08:00
Benjamin Sergeant
a2e6fa0b16 insensitive string compare when validating server connection header 2019-01-25 16:17:51 -08:00
Benjamin Sergeant
885d245afb heartbeat correct 2019-01-25 16:11:39 -08:00
Benjamin Sergeant
75d01c0c11 close server socket on exit 2019-01-24 21:16:32 -08:00
Benjamin Sergeant
a8b6573f96 hearbeat 2019-01-24 12:42:49 -08:00
Benjamin Sergeant
121c84a2d1 check and validate the Connection: Upgrade header in client/server 2019-01-15 09:31:37 -08:00
Tony Lin
2434605c06 Fix missing upgrade header error 2019-01-15 15:35:37 +08:00
Benjamin Sergeant
a0f15bfb56 C++14 + use make_unique and make_shared to make shared pointers 2019-01-11 21:25:06 -08:00
Benjamin Sergeant
8a0afef825 check select errors better 2019-01-07 11:18:00 -08:00
Benjamin Sergeant
bf3e8195f7 DNSLookup _id member does not need to be an atomic 2019-01-06 18:32:19 -08:00
Benjamin Sergeant
bce3071a12 DNSLookup: fix #8 2019-01-06 18:27:26 -08:00
Benjamin Sergeant
911f684e4d DNSLookup: copy hostname and port instead of accessing member 2019-01-06 18:17:12 -08:00
Benjamin Sergeant
49bc156a56 return false -> return -1 2019-01-06 18:10:39 -08:00
Benjamin Sergeant
372af54e46 remove dead file 2019-01-06 14:26:11 -08:00
Benjamin Sergeant
2f9ad54bae gcc linux compile fix 2019-01-06 12:12:39 -08:00
Benjamin Sergeant
57c22cddb8 make a class hierarchy for server code (IXWebSocketServer <- IXSocketServer) 2019-01-06 12:09:31 -08:00
Benjamin Sergeant
60dc765178 unittest + compiler warnings 2019-01-05 21:10:08 -08:00
Benjamin Sergeant
5e1c150024 windows compile fix 2019-01-05 21:02:55 -08:00
Benjamin Sergeant
0fd06bb592 int -> ssize_t for socker recv and send 2019-01-05 20:53:50 -08:00
Benjamin Sergeant
9641c8cf49 header refactoring 2019-01-05 20:38:43 -08:00
Benjamin Sergeant
4ca31be4a2 windows connect (compile fix) 2019-01-05 17:35:50 -08:00
Benjamin Sergeant
667f18cbfe windows connect potential fix 2019-01-05 17:32:21 -08:00
Benjamin Sergeant
4df5050760 more accurate description of errors 2019-01-05 17:18:43 -08:00
Benjamin Sergeant
b80696af00 windows (compile) fix 2019-01-05 17:04:09 -08:00
Benjamin Sergeant
3cb2f6dcf7 windows fix 2019-01-05 17:02:39 -08:00
Benjamin Sergeant
89ff9dd5ac fix gcc warning 2019-01-05 16:26:11 -08:00
Benjamin Sergeant
e892b21872 openssl cleanup 2019-01-05 11:42:25 -08:00
Benjamin Sergeant
3eef8fba27 unittest on appveyor 2019-01-04 17:28:13 -08:00
Benjamin Sergeant
cc43357fb4 Socket::readLine works with arbitrary long lines 2019-01-03 18:47:01 -08:00
Benjamin Sergeant
bce5ef2dca timeout is configurable 2019-01-03 18:33:08 -08:00
Benjamin Sergeant
3021ac4b95 remove useless FIXME comment 2019-01-03 18:02:03 -08:00
Benjamin Sergeant
bd1c8873d0 capture path/uri when connecting, and pass it back through callbacks in the openInfo member 2019-01-03 17:44:10 -08:00
Benjamin Sergeant
6ac3bdb94a implement a max connections (default = 32) settings 2019-01-03 17:05:44 -08:00
Benjamin Sergeant
e964a0a1f0 correct validation of the request (request line + headers) 2019-01-03 13:41:06 -08:00
Benjamin Sergeant
97255fbd62 cancellation refactoring 2019-01-03 12:53:44 -08:00
Benjamin Sergeant
64f649d1f9 split handshake code into its own files, so that Transport file is less massive 2019-01-02 20:07:54 -08:00
Benjamin Sergeant
097c7e5397 server unittest for validating client request / new timeout cancellation handling (need refactoring) 2019-01-02 16:08:32 -08:00
Benjamin Sergeant
b1710bfa31 server per message deflate support 2019-01-02 08:12:29 -08:00
Benjamin Sergeant
2b136b2981 refactoring + cancellation was buggy during http upgrade 2019-01-02 07:45:07 -08:00
Benjamin Sergeant
b95e5e36dc use select to detect new incoming connections 2019-01-01 22:21:07 -08:00
Benjamin Sergeant
1bc5bc7f1c add a way to run in blocking more, which is useful for server mode to have N*thread instead of 2N*thread for N connections 2019-01-01 21:25:15 -08:00
Benjamin Sergeant
946d7015a2 more named constants 2019-01-01 19:23:27 -08:00
Benjamin Sergeant
973a3f03c3 linux fix + unittest works with Linux 2019-01-01 17:13:26 -08:00
Benjamin Sergeant
e5937638d4 crash when server failed to start 2019-01-01 16:14:46 -08:00
Benjamin Sergeant
7c4f14f941 thread accepting connections can be cancelled/stopped externally 2019-01-01 16:11:27 -08:00
Benjamin Sergeant
ead54d6c37 listen job run in its own thread, non blocking 2019-01-01 14:52:14 -08:00
Benjamin Sergeant
d279aecb87 cleanup / remove printf, add mutex, remove hardcoded values, can pass in a binding host 2019-01-01 14:28:41 -08:00
Benjamin Sergeant
67de0fc8da use shared_ptr 2019-01-01 13:53:13 -08:00
Benjamin Sergeant
8ed2399517 unittest pass 2019-01-01 13:47:25 -08:00
Benjamin Sergeant
cf340011e2 record workers in a map instead of a vector 2018-12-31 14:52:59 -08:00
Benjamin Sergeant
3443e82812 more cleanup to propagate server connection error and let onOpen callback execute 2018-12-31 12:43:47 -08:00
Benjamin Sergeant
63138507d6 only bind to localhost 2018-12-31 11:48:49 -08:00
Benjamin Sergeant
b2eb07db14 server code has a callback that takes a websocket 2018-12-30 22:12:13 -08:00
Benjamin Sergeant
379a845166 cleanup / use a websocket instead of raw websockettransport 2018-12-30 22:00:49 -08:00
Benjamin Sergeant
266cf93584 can accept multiple connection / server can send data back to client 2018-12-30 21:16:05 -08:00
Benjamin Sergeant
0ee71e9a09 proof of concept server implementation 2018-12-29 23:15:27 -08:00
Benjamin Sergeant
ea07afcc0b can create a socket from a fd 2018-12-29 21:53:33 -08:00
Benjamin Sergeant
43cd6d34ca add simple unittest 2018-12-29 18:34:08 -08:00
Benjamin Sergeant
3b67032adb add missing src files (IXSetThreadName.{cpp,h}) ... 2018-12-23 14:19:30 -08:00
Benjamin Sergeant
2d46a0605b fix warning: field '_eventCallback' will be initialized after field '_publishMode' 2018-12-23 14:18:53 -08:00
Benjamin Sergeant
ba54664748 Fix warning: field '_done' will be initialized after field '_wait' [-Wreorder] _done(false), 2018-12-23 14:17:30 -08:00
Benjamin Sergeant
a79f4c10a1 set thread name / rename example 2018-12-23 14:14:38 -08:00
Benjamin Sergeant
bd04b28b9e async dns lookup fix 2018-12-14 17:49:42 -08:00
Benjamin Sergeant
cbadecab33 non blocking dns lookup 2018-12-14 16:28:17 -08:00
Benjamin Sergeant
8c079787f0 add cancellation support while connecting, to speed up WebSocket::stop 2018-12-09 17:56:20 -08:00
Benjamin Sergeant
62528e6a0b http upgrade and connections use non blocking sockets 2018-12-09 14:07:40 -08:00
Benjamin Sergeant
49bf8bd830 threading race condition fixes, detected by TSAN 2018-12-06 08:27:28 -08:00
Benjamin Sergeant
c64bc20bb5 cleanup 2018-11-14 15:52:28 -08:00
Benjamin Sergeant
54da891f79 per-message deflate compression fixes 2018-11-13 17:46:05 -08:00
Benjamin Sergeant
9cb1d03411 tweaks doc / license + send proper error code when closing the connecion 2018-11-12 09:00:55 -08:00
Benjamin Sergeant
4fed156b90 per message deflate support (with zlib) 2018-11-09 18:42:09 -08:00
Benjamin Sergeant
de8bcd36e8 (satori_publisher) better error handling 2018-11-07 14:54:44 -08:00
Benjamin Sergeant
2b203c4616 Add missing files ... 2018-11-07 12:25:38 -08:00
Benjamin Sergeant
f12e655cf8 Add DockerFile + parse rsv1 field 2018-11-07 11:45:17 -08:00
Benjamin Sergeant
cf0045a483 stopping connection on Linux does not close the socket, which can create problem when re-starting the connection 2018-11-01 17:02:49 -07:00
Benjamin Sergeant
912d926260 Handle Sec-WebSocket-Accept correctly 2018-10-27 10:24:48 -07:00
Benjamin Sergeant
a8dfd640a7 capture an error code and a reason when the server closes the connection 2018-10-25 18:51:19 -07:00
Benjamin Sergeant
208c693088 ping / pong support / fix bug in dispatching received message type 2018-10-25 14:43:35 -07:00
Benjamin Sergeant
eae2f7d113 Better ping/pong support 2018-10-25 14:43:35 -07:00
Benjamin Sergeant
71b40c6d6c Windows support (no TLS yet) 2018-10-08 21:44:54 -07:00
Benjamin Sergeant
af12089e7a make TLS support optional 2018-10-08 15:24:36 -07:00
Benjamin Sergeant
376c8c2e00 Update IXWebSocket.h
Remove dead code
2018-10-07 15:49:07 -07:00
Benjamin Sergeant
436bf8deb5 more ssl peer validation stuff 2018-10-05 18:45:44 -07:00
Benjamin Sergeant
10ce046b0f (openssl) verify that the certificate we are getting match the domain we are requesting 2018-10-05 12:08:45 -07:00
Benjamin Sergeant
8f5d83c5c2 (openssl) add sni support 2018-10-01 17:36:21 -07:00
Benjamin Sergeant
09af729c07 g++ build fixes 2018-10-01 14:46:11 -07:00
Benjamin Sergeant
9b8d6cedfe First import 2018-09-27 14:57:19 -07:00