Commit Graph

274 Commits

Author SHA1 Message Date
Benjamin Sergeant
845bbc5208 all ws subcommands propagate tls options to servers (unimplemented) or ws or http client (implemented) (contributed by Matt DeBoer) 2019-09-30 18:21:20 -07:00
Benjamin Sergeant
7a26ff4de8 clang-format 2019-09-30 17:52:39 -07:00
Benjamin Sergeant
a1f3c40a2d ws has a --version option 2019-09-30 17:31:33 -07:00
Benjamin Sergeant
55141aa875 ws curl + http client tls option handling + ca cert processing for mbedtls 2019-09-29 21:13:11 -07:00
Benjamin Sergeant
864249b62d most ws command take tls options, no-op for now (contributed by Matt DeBoer) 2019-09-29 18:29:51 -07:00
Benjamin Sergeant
d1fc31b894 ws transfer + send + receive / improved logging (contributed by Matt DeBoer) 2019-09-29 17:21:52 -07:00
Benjamin Sergeant
05c7a26e3a Export port 8008 for Docker + test_ws.sh is /bin/sh compatible 2019-09-26 14:36:14 -07:00
Benjamin Sergeant
6762978ddf http server unittest + refactoring 2019-09-26 09:45:59 -07:00
Benjamin Sergeant
658650cf24 http server: in redirect mode, POST request are given a 200 status code and an empty response 2019-09-26 09:27:27 -07:00
Benjamin Sergeant
8a662b35e1 Http server: add options to ws https to redirect all requests to a given url. 2019-09-26 09:10:30 -07:00
Benjamin Sergeant
3cd7c0194f Stop having ws send subcommand send a binary message in text mode, which would cause error in make ws_test shell script test 2019-09-25 15:39:43 -07:00
Benjamin Sergeant
ceb0c602c9 Add simple Redis Server which is only capable of doing publish / subscribe. New ws redis_server sub-command to use it. The server is used in the unittest, so that we can run on CI in environment where redis isn not available like github actions env. 2019-09-23 21:04:01 -07:00
Benjamin Sergeant
95722e3bbb fix linux compilation error, by ordering dependant libraries properly 2019-09-23 12:32:04 -07:00
Benjamin Sergeant
1cde26771a move snake code to its own subfolder like ixcobra, ixcrypto, etc... 2019-09-23 11:46:16 -07:00
Benjamin Sergeant
cd3c9d879c reformat everything with clang-format 2019-09-23 10:25:23 -07:00
Benjamin Sergeant
ed4be773a2 Fix crash in the Linux unittest in the HTTP client code, in Socket::readBytes. Cobra Metrics Publisher code returns the message id of the message that got published, to be used to validated that it got sent properly when receiving an ack. 2019-09-21 09:23:58 -07:00
Benjamin Sergeant
fcdb57f31d missing file in ws tool 2019-09-19 12:51:34 -07:00
Benjamin Sergeant
47b3368f78 In DNS lookup code, make sure the weak pointer we use lives through the expected scope (if branch) 2019-09-19 12:51:11 -07:00
Benjamin Sergeant
e2121d809e fix unittest warnings + remove trailing spaces 2019-09-12 11:43:52 -07:00
Benjamin Sergeant
2453f5b717 restructure project 2019-09-10 12:19:22 -07:00
Benjamin Sergeant
427db5bd59 Fix Windows CI with appveyor (#110)
Fix windows CI with appveyor + minor tweaks.
2019-09-07 14:07:00 -07:00
Benjamin Sergeant
37a7b362d8 add cobra metrics publisher + server unittest 2019-09-05 21:57:05 -07:00
Benjamin Sergeant
21404c23dd snake unsubscription fixes 2019-09-05 20:47:15 -07:00
Benjamin Sergeant
eeefc9cf4b Fix compiler warning 2019-09-05 20:29:14 -07:00
Benjamin Sergeant
24b2475b11 ws snake (cobra simple server) add basic support for unsubscription + subscribe send the proper subscription data + redis client subscription can be cancelled 2019-09-05 20:28:34 -07:00
Benjamin Sergeant
2defe6f597 IXCobraConnection / pdu handlers can crash if they receive json data which is not an object 2019-09-05 20:24:42 -07:00
Benjamin Sergeant
f9dc460325 cobra publish fix 2019-09-05 14:31:28 -07:00
Benjamin Sergeant
eccd8b3c0e ws autobahn / use condition variables for stopping test case + add more logging on errors 2019-09-04 12:21:54 -07:00
Benjamin Sergeant
a43046c921 ws autobahn / report progress with spdlog::info to get timing info 2019-09-04 10:16:32 -07:00
Benjamin Sergeant
b360fb9ca0 truncate module 2019-09-03 20:14:35 -07:00
Benjamin Sergeant
96380dd462 doc 2019-09-01 11:28:27 -07:00
Benjamin Sergeant
61bd765784 compute test case count properly 2019-09-01 11:17:28 -07:00
Benjamin Sergeant
4a0f06193b refactoring 2019-09-01 11:10:27 -07:00
Benjamin Sergeant
826917ef17 condition variable instead of busy looping 2019-09-01 10:50:16 -07:00
Benjamin Sergeant
4e1dbbbecf quiet mode 2019-09-01 10:45:51 -07:00
Benjamin Sergeant
b5b0de2083 +add utf-8 validation code, not hooked up properly yet
+ws autobahn / Add code to test websocket client compliance with the autobahn test-suite
+Ping received with a payload too large (> 125 bytes) trigger a connection closure
+cobra / add tracking about published messages
+cobra / publish returns a message id, that can be used when
+cobra / new message type in the message received handler when publish/ok is received (can be used to implement an ack system).
2019-08-31 16:47:10 -07:00
Benjamin Sergeant
7a73ec7c06 New option to cap the max wait between reconnection attempts. Still default to 10s. (setMaxWaitBetweenReconnectionRetries) (#108) 2019-08-30 12:46:35 -07:00
Benjamin Sergeant
185869e628 tentative gcc build fix 2019-08-26 14:29:16 -07:00
Benjamin Sergeant
d3e5a63fa2 ws connect has a new option to send HTTP headers + use WebSocketHttpHeaders instead of unordered_map<string, string> 2019-08-26 10:19:09 -07:00
Benjamin Sergeant
0847e60d2a CobraConnection: sets a unique id field for all messages sent to [cobra](https://github.com/machinezone/cobra).
CobraConnection: sets a counter as a field for each event published.
2019-08-26 09:51:37 -07:00
Benjamin Sergeant
ff75846d2d Windows: use select instead of WSAPoll, through a poll wrapper 2019-08-22 10:34:17 -07:00
Benjamin Sergeant
2f730303c2 CobraMetricThreadedPublisher _enable flag is an atomic, and CobraMetricsPublisher is enabled by default 2019-08-14 19:54:30 -07:00
Benjamin Sergeant
5cc21c87fb new options for cobra commands
- ws cobra_subscribe has a new -q (quiet) option
- ws cobra_subscribe knows to and display msg stats (count and # of messages received per second)
- ws cobra_subscribe, cobra_to_statsd and cobra_to_sentry commands have a new option, --filter to restrict the events they want to receive
2019-08-01 15:22:24 -07:00
Benjamin Sergeant
505e0c79d9 ws connect command has a new option to send in binary mode (still default to text) 2019-07-25 15:48:45 -07:00
Benjamin Sergeant
ca9d59c1c1 add better line editing capability to ws connect, thanks to linenoise-cpp 2019-07-25 11:54:50 -07:00
Benjamin Sergeant
f84bc53c8d Feature/httpd (#94)
* Stub code for http server

* can send a response, cannot process body yet

* write headers to the response

* remove commented code

* add simple test + set default http handler

* tweak CI + unittest

* add missing file

* rewrite http::trim in a simple way

* doc
2019-06-23 14:54:21 -07:00
Benjamin Sergeant
dbd62b8622 cobra_to_sentry / backtraces are reversed and line number is not extracted correctly 2019-06-13 10:18:40 -07:00
Benjamin Sergeant
3e15840b14 - WebSocket::send() sends message in TEXT mode by default
- WebSocketMessage sets a new binary field, which tells whether the received incoming message is binary or text
2019-06-09 11:56:47 -07:00
Benjamin Sergeant
be93f7480a WebSocket callback only take one object, a const ix::WebSocketMessagePtr& msg 2019-06-09 11:33:17 -07:00
Benjamin Sergeant
2e5f24f1f8 ... 2019-06-09 10:22:27 -07:00
Benjamin Sergeant
9623ceb4d5 ws echo_server has a -g option to print a greeting message on connect 2019-06-08 09:16:33 -07:00
Benjamin Sergeant
076e8bf6a3 add an option to easily disable per message deflate compression 2019-06-06 13:48:53 -07:00
Benjamin Sergeant
f4f3eed78d cobra to sentry / more error handling 2019-06-05 19:37:51 -07:00
Benjamin Sergeant
89909c15bc cobra to sentry fixes 2019-06-05 18:47:48 -07:00
Benjamin Sergeant
78b3d7ff2d Feature/http async (#90)
* unittest working / uses shared_ptr for a bunch of things 🗿

* fix command line tools

* fix ws + add doc

* add more logging
2019-06-05 17:04:24 -07:00
Benjamin Sergeant
012193c74e Fix compile error with JSON uint64_t 🚯 2019-06-04 13:45:29 -07:00
Benjamin Sergeant
539abe5151 HttpResponse is a struct, not a tuple 🉐 2019-06-03 22:12:52 -07:00
Benjamin Sergeant
396d0d9bdc Feature/ws windows (#86)
* try to build ws on window on travis 📮

* cmake invocation fixed on windows 🐝

* Can use mbedtls to calculate hmac + no openssl config option

* build only windows on travis 🕢

* run msbuild 💷

* proper command to build 🕛

* some build fixes

* change weird sizeof call 🐙

* warning and missing includes fixes 💮

* ifdef out statsd code on windows 🐍

* logic invertion in ifdef 👄

* bring back makefile 📜

* command line tool is built with mbedtls 🏥
2019-06-02 20:46:20 -07:00
Benjamin Sergeant
ba4a9e1586 (clang format) fix indent and make (rarely) accessor/setters in class on a single line 2019-05-31 00:53:14 -07:00
Benjamin Sergeant
285386e47f fix cobra to sentry + change ws docker file to use alpine (much smaller footprint) 2019-05-31 00:43:22 -07:00
Benjamin Sergeant
c65fec7271 clang format, based on cpprest 2019-05-30 08:46:50 -07:00
Benjamin Sergeant
964fb20df9 try to run ws test on linux + macOS on travis 2019-05-16 13:57:33 -07:00
Dimon4eg
99a3bbc4f9 use C++11 enums (#67)
* use C++11 enums

* small rename

* update tests

* update tests

* update ws

* update ws

* update README.md
2019-05-11 14:22:06 -07:00
Benjamin Sergeant
6189e0cd50 remove irrelevant comment 2019-05-11 12:24:11 -07:00
Dimon4eg
2254421ead minor improvements (#66)
* minor improvements

* fix build

* improve tests code
2019-05-11 12:20:58 -07:00
Benjamin Sergeant
fcf5c41b43 add env var to display the ws command typed in 2019-05-10 16:27:23 -07:00
Benjamin Sergeant
88adbf0ca2 cout -> spdlog 2019-05-10 12:33:34 -07:00
Benjamin Sergeant
dc1f9fb243 use spdlog for logging in ws + unittest + remove un-needed mutex 2019-05-09 15:30:44 -07:00
Benjamin Sergeant
7c30c8aa07 cout -> cerr 2019-05-09 15:06:42 -07:00
Benjamin Sergeant
094b5834b7 warning police 2019-05-09 09:25:56 -07:00
Benjamin Sergeant
232aa069d2 IXCobraMetricsThreadedPublisher.cpp uses a lambda to log instead of std::cerr 2019-05-08 18:53:32 -07:00
Benjamin Sergeant
d53c9c5ecf change default ports for the ws command line tool 2019-05-08 13:56:42 -07:00
Benjamin Sergeant
48c19b4f3c ws connect display more accurate messages for incoming messages 2019-05-08 13:56:42 -07:00
Benjamin Sergeant
b5aae88a0b remove un-needed _backgroundThreadRunning variable 2019-05-01 11:09:25 -07:00
Benjamin Sergeant
bee97237d9 Make AutomaticReconnection optional (#47)
* unittest pass + commands behave as expected

* cleanup
2019-04-29 21:12:34 -07:00
Benjamin Sergeant
9ee05bf591 ws connect mode / add a flag to disable automatic reconnection, not hooked up yet 2019-04-29 14:31:29 -07:00
Benjamin Sergeant
1c7c07e128 initialize netSystem (aka winsock on windows) explicitely 2019-04-25 16:38:15 -07:00
Benjamin Sergeant
f6ae490723 Fix data race in WebSocket where _url is accessed without protection in setThreadName
Also fix with url usage + docker container uses fedora and works with tsan
2019-04-25 16:11:46 -07:00
Benjamin Sergeant
cf37816602 compiler warning police 2019-04-24 09:45:03 -07:00
Benjamin Sergeant
28cbe8fbeb ws cobra publish stress mode fix 2019-04-23 20:51:58 -07:00
Benjamin Sergeant
0caf875399 add example websocket C++ server snake which supports basic cobra ops (publish and subscribe without stream sql 2019-04-22 17:33:45 -07:00
Benjamin Sergeant
b6b9ffd15c doc cobra 2019-04-21 11:52:38 -07:00
Benjamin Sergeant
eacc28fedf move cobra files to their own subfolder 2019-04-21 11:20:17 -07:00
Benjamin Sergeant
5c85ee1214 add cobra metrics publisher 2019-04-21 11:16:33 -07:00
Benjamin Sergeant
d34f10b4ea fix warning / ws_cobra_subscribe does not need a verbose flag 2019-04-19 11:45:42 -07:00
Benjamin Sergeant
9fe3811c45 (ws) fix compiler warnings 2019-04-19 09:48:46 -07:00
Benjamin Sergeant
52f460f66d (doc) Add more doc to SocketServer 2019-04-17 20:36:26 -07:00
Dimon4eg
401fc39879 fix windows build (#29)
* fix windows build

* fix for Unix

* Fix build if TLS is OFF

* add OpenSSL req to ws

* Fix build on Mac

* fix tests for windows
2019-04-16 08:51:57 -07:00
Dimon4eg
d4b0839328 move security framework linking to ixwebsocket (#26) 2019-04-14 17:13:24 -07:00
Benjamin Sergeant
8f8dd076ff ws: new command to subscribe to a cobra server and send an event to a sentry server 2019-04-11 16:03:05 -07:00
Benjamin Sergeant
51fcf65424 (ws) add subcommands: cobra subscribe, and cobra subscribe to statsd bridge 2019-04-08 21:56:01 -07:00
Benjamin Sergeant
6cb2aaab65 Bump sleep time in test shell script 2019-03-29 09:36:56 -07:00
Benjamin Sergeant
c604c4591f (redis_subscribe) in verbose mode, received message gets printed with a 'received: ' header 2019-03-29 09:35:19 -07:00
Benjamin Sergeant
7767c96a9e ws redis command improvements + test script 2019-03-27 13:41:46 -07:00
Benjamin Sergeant
3388bb50e1 (ws) redis_subscribe and redis_publish can take a password + display subscribe response 2019-03-26 09:33:22 -07:00
Benjamin Sergeant
1554c587b3 update doc 2019-03-24 21:48:14 -07:00
Benjamin Sergeant
eac611ab1e Feature/connection state (#25)
* (cmake) add a warning about 32/64 conversion problems.

* fix typo

* New connection state for server code + fix OpenSSL double init bug

* update README
2019-03-20 18:34:24 -07:00
Benjamin Sergeant
0635313566 Feature/redis (#23)
* Fix warning

* (cmake) add a warning about 32/64 conversion problems.

* simple redis clients

* can publish to redis

* redis subscribe

* display messages received per second

* verbose flag

* (cmake) use clang only compile option -Wshorten-64-to-32 when compiling with clang
2019-03-20 14:29:02 -07:00
Benjamin Sergeant
13f4aee5ee fix bug with isReadyToWrite 2019-03-18 22:05:04 -07:00
Benjamin Sergeant
bbc0e2106c workaround bug in Socket::isReadyToWrite 2019-03-18 20:37:33 -07:00
Benjamin Sergeant
80e330d4c3 ws / log subcommand name 2019-03-18 17:54:06 -07:00
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
b91dc77d6f select interrupt cleanup 2019-03-14 18:37:38 -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
ad9c8318a7 ws broacast_server / can set serving hostname 2019-03-10 16:36:44 -07:00
Benjamin Sergeant
f5efd41dc1 fix compiler warnings in ws command line tool 2019-03-04 13:56:30 -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
0f4e9af172 more ws doc 2019-02-28 22:07:45 -08:00
Benjamin Sergeant
3a1352c8ec more ws doc 2019-02-28 22:03:48 -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
927484a71f Update README.md 2019-02-22 21:53:29 -08:00
Benjamin Sergeant
88adb8f5ef mv cobra_publisher under ws folder 2019-02-22 21:51:03 -08:00
Benjamin Sergeant
98e7f5cb22 ping pong added to ws 2019-02-22 21:47:57 -08:00
Benjamin Sergeant
67e5957064 comments 2019-02-22 21:27:49 -08:00
Benjamin Sergeant
1c775cb759 add echo and broadcast server as ws sub-commands 2019-02-22 21:25:56 -08:00
Benjamin Sergeant
c4054d4984 cleanup 2019-02-22 20:51:22 -08:00
Benjamin Sergeant
76e2f9f3ac add ws_chat and ws_connect sub commands to ws 2019-02-22 20:49:26 -08:00
Benjamin Sergeant
41a40b8b9f all CMakeLists are referenced by the top level one 2019-02-21 22:21:29 -08:00
Benjamin Sergeant
6b8694bfbf add target for building with homebrew 2019-02-21 22:05:30 -08:00
Benjamin Sergeant
2d696b6806 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
2019-02-21 21:24:53 -08:00