Commit Graph

316 Commits

Author SHA1 Message Date
Benjamin Sergeant d58798e36c when trying to flush the send buffer, use select to wait until it is possible instead of using sleep to retry at a given frequency 2019-03-18 14:25:27 -07:00
Benjamin Sergeant e158635f57 linux hangs when closing 2019-03-16 11:38:23 -07:00
Benjamin Sergeant 68e397ab34 use pipe to abort select on Linux as well as macOS 2019-03-15 17:46:40 -07:00
Benjamin Sergeant 4c78b94cd8 missing assert include on Linux 2019-03-15 11:43:27 -07:00
Benjamin Sergeant 3a9cc9b079 cleanup 2019-03-15 11:41:57 -07:00
Benjamin Sergeant 6f90425154 linux compile fix 2019-03-14 18:55:33 -07:00
Benjamin Sergeant 49ec9b1d9e linux fixes 2019-03-14 18:54:47 -07:00
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