Benjamin Sergeant
5c5ea6dec1
(ws) #125 / cmake detects an already installed jsoncpp and will try to use this one if present
2019-12-03 16:01:46 -08:00
Benjamin Sergeant
c91a0d2a35
(http client) use std::unordered_map instead of std::map for HttpParameters and HttpFormDataParameters class aliases
2019-12-03 09:25:00 -08:00
Benjamin Sergeant
d465511812
[ #113 ] Mention StreamSSL as an example windows schannel implementation
2019-12-03 09:22:27 -08:00
Benjamin Sergeant
6b98694caa
(client) internal IXDNSLookup class requires a valid cancellation request function callback to be passed in
2019-12-02 14:52:19 -08:00
Benjamin Sergeant
d82e05f72d
(client) fix an overflow in the exponential back off code
2019-12-02 13:51:45 -08:00
Benjamin Sergeant
a0d5f37402
(http client) Add support for multipart HTTP POST upload + (ixsentry) Add support for uploading a minidump to sentry
2019-11-25 21:11:11 -08:00
Benjamin Sergeant
155bbfa984
On Darwin SSL, add ability to skip peer verification.
2019-11-20 13:58:08 -08:00
Benjamin Sergeant
89aae8b344
bump version for 32-bit fix
2019-11-20 11:35:07 -08:00
fcojavmc
708969c126
Compile bug ( #122 )
...
* 1) IXWebSocketTransport: BUG: int type has no warranty of number of bits. It depends on compiler and architecture. In my system (64 bit) is 32 bit.
1 << 63 is bad idea in this case because the final number is 0 by overflow.
The symptom observed is that the server can't receive messages.
2) IXSocketFactory: Compilation Warning: Variable not in use.
* Better aproach suggested by Benjamin.
2019-11-20 11:12:24 -08:00
Benjamin Sergeant
cc492bf1a3
add a python websocket proxy which works on Linux, while ws proxy_server does not
2019-11-18 13:46:11 -08:00
Benjamin Sergeant
16c6f08e2d
fix android build + proxy work
2019-11-16 06:51:53 -08:00
Benjamin Sergeant
6e9f27d63c
bump version
2019-11-15 17:19:06 -08:00
Benjamin Sergeant
b07827790f
check max frame size ( #119 )
2019-10-28 21:53:31 -07:00
Benjamin Sergeant
c3a619f114
Add client support for websocket subprotocol. Look for the new addSubProtocol method for details
2019-10-13 13:37:34 -07:00
Benjamin Sergeant
128545cc2b
OpenSSL: add an extra cipher to the default cipher set, which let us connect to wss//echo.websocket.org
2019-10-10 09:37:27 -07:00
Benjamin Sergeant
852bf452b6
Freebsd ( #117 )
...
* add file
* CMake freebsd fix
2019-10-09 17:00:32 -07:00
Benjamin Sergeant
b38e80f846
(freebsd compile fix) add some missing socket related headers
2019-10-09 15:38:40 -07:00
Benjamin Sergeant
1f8944852a
bump version
2019-10-01 16:01:32 -07:00
Benjamin Sergeant
95dd03b298
Add mbed tls version in user agent string + set user agent properly when enabling openssl on macOS
2019-10-01 15:58:35 -07:00
Benjamin Sergeant
a0cfaff528
Implement SSL server with OpenSSL backend / still flaky
2019-10-01 15:43:37 -07:00
Benjamin Sergeant
d6542383ed
Add --tls option to pass to ws server command, to enable/disable tls
2019-10-01 13:54:46 -07:00
Benjamin Sergeant
afed387bcf
Socket Factory has only one function which works for server and client code, and can do tls for both
2019-09-30 22:06:46 -07:00
Benjamin Sergeant
313949f087
SocketServer::handleConnection takes an std::shared_ptr<Socket> instead of a file descriptor
2019-09-30 21:48:55 -07:00
Benjamin Sergeant
e5c8e2e7f4
openSSLHandshake -> openSSLClientHandshake
2019-09-30 21:24:25 -07:00
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
1fdbc2bc22
bump version number
2019-09-29 22:10:07 -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
4e4792d6dc
update copyright dates and authors
2019-09-29 20:09:51 -07:00
Benjamin Sergeant
2aca019d84
openssl client: handle TLS options
2019-09-29 20:07:53 -07:00
Benjamin Sergeant
d1fb34694c
SocketTLSOptions: more methods (contributed by Matt DeBoer)
2019-09-29 17:35:18 -07:00
Benjamin Sergeant
f6bf2531bb
Add ability to use OpenSSL on apple platforms.
2019-09-29 15:34:58 -07:00
Benjamin Sergeant
0ee675e554
ixcobra / fix crash in CobraConnection::publishNext when the queue is empty + handle CobraConnection_PublishMode_Batch in CobraMetricsThreadedPublisher
2019-09-28 10:36:47 -07:00
Benjamin Sergeant
4cd11fdbc7
mbedtls fixes / the unittest now pass on macOS, and hopefully will on Windows/AppVeyor as well.
2019-09-27 14:07:01 -07:00
Benjamin Sergeant
6762978ddf
http server unittest + refactoring
2019-09-26 09:45:59 -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
d3cee46e93
wrong mutex being used ...
2019-09-24 14:10:41 -07:00
Benjamin Sergeant
94c589f696
Fix 2 race conditions detected with TSan, one in CobraMetricsPublisher::push and another one in WebSocketTransport::sendData (that one was bad).
2019-09-24 11:46:54 -07:00
Benjamin Sergeant
169e225ccd
fix warning + add redis server logging
2019-09-23 21:14:20 -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
cd3c9d879c
reformat everything with clang-format
2019-09-23 10:25:23 -07:00
Benjamin Sergeant
398c4fbf99
fix unittest
2019-09-22 19:40:33 -07:00
Benjamin Sergeant
6f76fea188
compile fixes
2019-09-22 18:52:57 -07:00
Benjamin Sergeant
041fa3e340
compiled fixes on mac and windows
2019-09-22 18:43:57 -07:00
Matt DeBoer
408ee41990
WIP: support configurable certificates/keys, and root trust CAs ( #114 )
...
* wip: tls options implemented in openssl
* update naming, remove #define guard
* assert compiled with USE_TLS for tls options
* apply autoformatter
* include tls options impl
* style cleanup; auto ssl_err
* ssl_err -> sslErr
* be explicit about SSL_VERIFY_NONE
2019-09-22 18:06:15 -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
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
20ce498d23
On error while doing a client handshake, additionally display port number next to the host name
2019-09-17 12:08:52 -07:00
Benjamin Sergeant
e2121d809e
fix unittest warnings + remove trailing spaces
2019-09-12 11:43:52 -07:00
Benjamin Sergeant
64d3c99f99
improve some websocket error messages + add a utility function with unittest to parse status line and stop using scanf which triggers warnings on Windows
2019-09-09 21:23:57 -07:00
Benjamin Sergeant
fb271953f7
websocket and http server: server does not close the bound client socket in many cases
2019-09-09 16:48:26 -07:00
Benjamin Sergeant
7080c5679f
move poll wrapper on top of select (only used on Windows) to the ix namespace
2019-09-08 11:15:08 -07:00
Benjamin Sergeant
f9dc460325
cobra publish fix
2019-09-05 14:31:28 -07:00
Benjamin Sergeant
003afc8b56
all client autobahn test should pass ! last failing one was ...
...
+- zlib/deflate has a bug with windowsbits == 8, so we silently upgrade it to 9/ (fix autobahn test 13.X which uses 8 for the windows size)
2019-09-04 21:01:30 -07:00
Benjamin Sergeant
95a97a197a
Fragmentation: for sent messages which are compressed, the continuation fragments should not have the rsv1 bit set (fix all autobahn tests for zlib compression 12.X)
...
Websocket Server / do a case insensitive string search when looking for an Upgrade header whose value is websocket. (some client use WebSocket with some upper-case characters)
2019-09-04 18:23:56 -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
0bf185e143
Per message deflate/compression: handle fragmented messages (fix autobahn test: 12.1.X and probably others)
2019-09-03 17:42:48 -07:00
Benjamin Sergeant
da3d134be0
Receiving invalid UTF-8 TEXT message should fail and close the connection (fix remaining autobahn test: 6.X UTF-8 Handling)
2019-09-03 16:07:48 -07:00
Benjamin Sergeant
b4c4746d43
IXWebSocketTransport message processing refactoring
2019-09-03 15:48:55 -07:00
Benjamin Sergeant
fdd1ad9b17
Validate close codes. Autobahn 7.9.*
2019-09-03 15:43:16 -07:00
Benjamin Sergeant
1be8d9d46f
Validate that the close reason is proper utf-8. Autobahn 7.5.1
2019-09-03 14:35:40 -07:00
Benjamin Sergeant
51799353a6
Sending invalid UTF-8 TEXT message should fail and close the connection (fix remaining autobahn test: 6.X UTF-8 Handling)
2019-09-03 14:12:40 -07:00
Benjamin Sergeant
3ad13a592d
Framentation: data and continuation blocks received out of order (fix autobahn test: 5.9 through 5.20 Fragmentation)
2019-09-03 12:02:56 -07:00
Benjamin Sergeant
55934918ff
Sending invalid UTF-8 TEXT message should fail and close the connection (fix **tons** of autobahn test: 6.X UTF-8 Handling)
2019-09-03 10:30:22 -07:00
Benjamin Sergeant
ab93e4f168
Message type (TEXT or BINARY) is invalid for received fragmented messages (fix autobahn test: 5.3 through 5.8 Fragmentation)
2019-09-03 09:13:38 -07:00
Benjamin Sergeant
cbe3e7617c
Ping and Pong messages cannot be fragmented (autobahn test: 5.1 and 5.2 Fragmentation)
2019-09-02 10:13:40 -07:00
Benjamin Sergeant
94c8966e86
Close connections when reserved bits are used (autobahn test: 3 Reserved Bits)
2019-09-01 16:23:00 -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
a95fcbbdbf
user agent
2019-08-30 12:50:56 -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
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
ac60ec4320
put windows poll in the global namespace, not ix namespace
2019-08-26 09:51:37 -07:00
ozychhi
93debc00dc
Add client handshake extra headers ( #105 )
...
Even though 6455 defines all the necessary headers needed for
client/server handshake, in practice most of the cases websocket servers
expect few more headers. Therefore adding this functionality.
2019-08-26 09:37:40 -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
f78a3f88ff
add poll alias to WSAPoll on Windows
2019-08-19 22:26:25 -07:00
Benjamin Sergeant
142987259c
fix #101 / wrong include in IXSocket.cpp on Windows
2019-08-19 22:19:39 -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
e98ec9ec75
clang format
2019-08-13 10:59:18 -07:00
Benjamin Sergeant
ffecef901a
fix #99 / Connect error descriptions are invalid
2019-08-13 10:49:11 -07:00
Benjamin Sergeant
b1b6697c37
fix typo in README
2019-07-23 13:52:16 -07:00
Benjamin Sergeant
747746cba1
dns / use cancellable instead of blocking
2019-06-30 23:26:14 -07:00
Benjamin Sergeant
5b73edec8c
make IXDNSLookup more robust
2019-06-26 19:12:48 -07:00
Benjamin Sergeant
3750781bce
simplify IXDNSLookup
2019-06-26 16:25:07 -07:00
Benjamin Sergeant
e646e53dac
use poll instead of select in SocketServer
2019-06-25 17:18:24 -07:00
Benjamin Sergeant
6b8aa43ec0
switch from select to poll to deal with Android 9 giving us high socket fds when calling ::connect
2019-06-25 17:11:27 -07:00
Benjamin Sergeant
e8a20c7e8a
refactor select code + add protection against large fds (cf Android 9)
2019-06-25 15:41:39 -07:00
Benjamin Sergeant
4a600c2611
select refactoring IXSocket::select -> IXSocket::poll
2019-06-25 10:16:40 -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
b26e9d0338
IXDNSLookup. Uses weak pointer + smart_ptr + shared_from_this instead of static sets + mutex to handle object going away before dns lookup has resolved
2019-06-19 00:43:59 -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
0d147cbd94
WebSocket::send takes a third arg, binary which default to true (can be text too)
2019-06-09 11:35:31 -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
23cf4bd59b
Add explicite WebSocket::sendBinary
...
New headers + WebSocketMessage class to hold message data, still not used across the board
2019-06-09 10:10:33 -07:00
Benjamin Sergeant
e1a7395880
IXSocketMbedTLS: better error handling in close and connect
2019-06-06 14:59:22 -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
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
539abe5151
HttpResponse is a struct, not a tuple 🉐
2019-06-03 22:12:52 -07:00
Benjamin Sergeant
7e5aba140e
http / PUT fix 🐚
2019-06-03 21:12:39 -07:00
Benjamin Sergeant
6b933391e5
http client: stop hardcoding Accept header, and use a default value if one is passed in 👭
2019-06-03 14:02:54 -07:00
Benjamin Sergeant
1e2a5ee21d
Add simple HTTP and HTTPS client test ㊙️
2019-06-03 12:23:35 -07:00
Benjamin Sergeant
225a5ef808
(http client) / Add DEL and PUT method, make requests and other utilities public 👐
2019-06-03 11:38:56 -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
88c8fb74bb
play with podmena ♓
2019-06-02 11:03:44 -07:00
Benjamin Sergeant
06cbebe22e
Feature/mbedtls ( #84 )
...
* try to import mbedtls and build it
* add stubs socket class
* some boilterplate, read and write function implemented
* more boilterplate / current error in handshake because no CA cert is setup
* add something so skip ca verification, can ws curl https://google.com !
* cleanup / close implemented
* tweak CMakefiles
* typo in include
* update readme
* disable unittests
2019-06-01 17:41:48 -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
c65fec7271
clang format, based on cpprest
2019-05-30 08:46:50 -07:00
Benjamin Sergeant
879a4b38aa
std::chrono::duration is not initialized to 0 units of time
2019-05-26 14:16:15 -07:00
Benjamin Sergeant
13c87e38ed
do not select on a closed file descriptor (doing so crash on Android)
2019-05-22 18:58:22 -07:00
Kumamon38
26de9b9714
Clean ( #82 )
...
Thanks
2019-05-21 12:14:58 -07:00
Kumamon38
8a4826164b
fix close bug and tests : let poll do his job when closing ( #79 )
...
* let poll do his job when closing
* try fix test
* try fix test
* Update IXWebSocketTransport.cpp
* add log to find issue on CI
* add log to find issue on CI
* add log to find issue on CI
* add log to find issue on CI
* add log to find issue on CI
* change state immediately, and send close frame after
* add immediate close test
* disable test for windows
2019-05-21 09:34:08 -07:00
Benjamin Sergeant
6bd81bb92e
add back IXWebSocketMessageQueue, with its unittest disabled
2019-05-16 22:41:39 -07:00
Benjamin Sergeant
126a91dfec
Linux build fix: strncpy needs <string.h>
2019-05-16 22:21:15 -07:00
Benjamin Sergeant
51fa147b99
Revert "Merge branch 'Dimon4eg-message-queue'"
...
This reverts commit 13fa325134
, reversing
changes made to aecd5e9c94
.
2019-05-16 22:15:17 -07:00
Benjamin Sergeant
6160877167
Fix Address Sanitizer heap-buffer-overflow in WebSocketHandshakeKeyGen::generate
...
=================================================================
==5077==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6070000077e0 at pc 0x00010ba18c54 bp 0x70000dd45b10 sp 0x70000dd45b08
READ of size 1 at 0x6070000077e0 thread T12
#0 0x10ba18c53 in WebSocketHandshakeKeyGen::generate(char const*, char*) libwshandshake.hpp:113
#1 0x10ba2065a in ix::WebSocketHandshake::serverHandshake(int, int) IXWebSocketHandshake.cpp:356
#2 0x10b9c4952 in ix::WebSocketTransport::connectToSocket(int, int) IXWebSocketTransport.cpp:190
#3 0x10b97e4c2 in ix::WebSocket::connectToSocket(int, int) IXWebSocket.cpp:193
2019-05-16 21:59:03 -07:00
Benjamin Sergeant
f71331056c
bring back socket mutex which is needed, some CI failures are happening without it
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
c131ff2662
disable socket mutex usage in WebSocketTransport
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
616447e01d
remove dead code
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
90d71deb0f
Add constants for closing code and messages
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
dae21e7681
use a regular mutex instead of a recursive one + stop properly
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
f894504761
enum class HttpErrorCode derives from int
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
a12250dc16
recursive mutex + enable test that was breaking on Ubuntu Xenial + gcc + tsan
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
0c9bcfb8ac
more protection against socket when closing
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
ccaaedf38f
close and stop with code and reason + docker = ubuntu xenial
2019-05-16 19:23:32 -07:00
Dimon4eg
751f294164
add isEnabledAutomaticReconnection ( #75 )
...
* add isEnabledAutomaticReconnection
* test isEnabledAutomaticReconnection
* rename
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
e2acbe8499
Revert "Revert "fix cast warning caught on windows""
...
This reverts commit 25eaf730bc
.
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
aba880a6b3
Revert "fix cast warning caught on windows"
...
This reverts commit 4edb7447df
.
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
616e8da0a5
fix cast warning caught on windows
2019-05-16 19:23:32 -07:00
Benjamin Sergeant
fc4623381a
server code / add dedicated thread to close/join terminated connection threads
2019-05-16 19:23:31 -07:00
Kumamon38
4b96632a69
save timepoints after connect and not in contructor, adjusted tests ( #72 )
...
* save timepoints after connect and not in contructor, adjusted tests
* move call into setReadyState
* more time to detect client close in test
2019-05-16 19:20:29 -07:00
Dimon4eg
22a806ca6f
fix for Windows ( #69 )
...
* fix for Windows
* fix condition
* make condition only on Windows
2019-05-16 19:20:29 -07:00
dimon4eg
8a94c945b7
Merge branch 'master' into message-queue
2019-05-12 22:00:10 +03:00
Benjamin Sergeant
7740028291
all derived class use final keyword
2019-05-12 11:43:21 -07:00
dimon4eg
7369e9c233
add setOnMessageCallback with r-value
2019-05-12 20:59:18 +03:00
dimon4eg
8c66825a78
correct style
2019-05-12 20:16:02 +03:00
dimon4eg
a56f8272a9
fix warnings
2019-05-12 20:05:28 +03:00
dimon4eg
e846ca392f
update comment
2019-05-12 20:00:15 +03:00
dimon4eg
97617ced4a
Added WebSocketMessageQueue
2019-05-12 01:49:06 +03: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
Dimon4eg
2254421ead
minor improvements ( #66 )
...
* minor improvements
* fix build
* improve tests code
2019-05-11 12:20:58 -07:00
Benjamin Sergeant
4934f5846b
minor tweaks to have full feature parity before unittest broke
2019-05-11 11:54:21 -07:00
Benjamin Sergeant
c8c1aabf20
fix race condition in SelectInteruptPipe, where _fildes are not protected (caught by fedora tsan)
2019-05-11 11:45:26 -07:00
Dimon4eg
93b901a286
remove more iostream includes ( #65 )
2019-05-11 11:27:58 -07:00
Benjamin Sergeant
518a445074
rename some variables, minor cleanup
2019-05-11 10:24:28 -07:00
dimon4eg
d49b1bd78a
fix crash on close
2019-05-11 10:15:22 -07:00
Dimon4eg
bd96050d84
fix crash on close
2019-05-11 10:12:33 -07:00
Dimon4eg
2a90ad9e53
Fix crash during closing on Windows ( #64 )
...
* fix crash on close
* Improve calculateRetryWaitMilliseconds (#63 )
* improve calculateRetryWaitMilliseconds
* update comment
* cout -> spdlog
* fix crash on close
* uncomment test
* Revert "uncomment test"
This reverts commit 27df86ee8f
.
2019-05-11 09:51:26 -07:00
Dimon4eg
3df142db7a
Improve calculateRetryWaitMilliseconds ( #63 )
...
* improve calculateRetryWaitMilliseconds
* update comment
2019-05-10 12:31:21 -07:00
Benjamin Sergeant
f90fc4bfa2
fix static analyzer thing with un-used variable
2019-05-09 16:57:58 -07:00
Benjamin Sergeant
dc1f9fb243
use spdlog for logging in ws + unittest + remove un-needed mutex
2019-05-09 15:30:44 -07:00
tiwariashish86
b1d13105e7
Fixed pong synchronization issue ( #62 )
...
* Fixed pong synchronization issue
* Minor optimization in lock by scoping it to necessary changes.
* Fixing compilation issues
2019-05-09 15:06:05 -07:00
Kumamon38
1eb98cc74f
fix ping, fix send frame close ( #49 )
...
* fix ping, fix send frame close
* fixes for data race on _closeCode etc. and fix test
* fixing one TC
* fix waiting forever if no time to change of readyState, and poll never end
* add 1005 code if no status code received
* fixes for 1005 code
* fix test issue
* fix macOS issue
* revert to master tests and renaming
2019-05-09 09:21:05 -07:00
dimon4eg
a69408fa25
rename ptr
2019-05-09 01:05:47 +03:00
dimon4eg
75011d0b4e
simplify bindWebsocket
2019-05-09 00:23:16 +03:00
dimon4eg
28ae70ed20
use lock_guard
2019-05-09 00:20:26 +03:00
dimon4eg
2727d39fa4
update comments
2019-05-09 00:16:37 +03:00
dimon4eg
467f99b3bb
Rename to WebSocketMessageQueue
2019-05-09 00:09:51 +03:00
Dimon4eg
16e5b08a0f
Remove redundant iostream includes ( #60 )
2019-05-08 13:33:21 -07:00
Dimon4eg
636a69e9e1
qf
2019-05-08 22:24:39 +03:00
Dimon4eg
45d40dc159
Added IXWebSocketPoll class
2019-05-08 22:02:56 +03:00
Dimon4eg
88abb79a96
set thread name for Windows ( #57 )
2019-05-08 07:43:43 -07:00
Dimon4eg
979ff60a6b
Use LUrlParser to fix issue of Windows ( #53 )
...
LGTM
2019-05-06 14:45:02 -07:00
Dimon4eg
ea2e8f0787
added tests for IXUrlParser ( #52 )
...
* added tests for IXUrlParser
* add me as author
2019-05-06 12:47:15 -07:00
Benjamin Sergeant
3893c12054
socket server / used wrong mutex to protect _connectionsThreads
2019-05-06 12:24:20 -07:00
Dimon4eg
8ad47a315b
Fix windows ( #51 )
...
* More fixes for Windows
* fix tests for windows
* qf for linux
* clean up
2019-05-06 12:22:57 -07:00
Dimon4eg
4d83dab4f3
Fix for windows ( #50 )
2019-05-06 09:13:42 -07:00
Benjamin Sergeant
28a7ec4f35
doc: add reference to the conan file built at https://github.com/Zinnion/conan-IXWebSocket
2019-05-01 21:31:32 -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
8c8e950455
build fix
2019-04-29 20:54:00 -07:00
Benjamin Sergeant
ad8b344298
tsan fixes on ubuntu xenial (what travis run)
2019-04-29 20:48:16 -07:00
Benjamin Sergeant
6d310d417a
dns lookup: fix race condition accessing _errMsg
2019-04-29 19:29:27 -07:00
Benjamin Sergeant
9dca893ce7
tsan linux tentative fix / copy string instead of passing a const reference
2019-04-29 17:27:53 -07:00
Benjamin Sergeant
e3444e666b
rename _blocking to _backgroundThreadRunning and invert the naming
2019-04-29 16:54:08 -07:00
Alexandre Konieczny
e37e69311b
fix data race on _thread
2019-04-29 16:46:16 -07:00
Alexandre Konieczny
6918f863b1
fix data race on _useMask
2019-04-29 16:41:34 -07:00
Benjamin Sergeant
1c7c07e128
initialize netSystem (aka winsock on windows) explicitely
2019-04-25 16:38:15 -07:00
Dimon4eg
4fbc4e3be9
Fixes for windows ( #45 )
...
* init Net system on Windows
* propagate DNS error
* Add zlib 1.2.11 sources
* link zlib statically for windows
* remove not implemented function declaration
* fix connect on Windows
2019-04-25 16:26:53 -07:00
Benjamin Sergeant
e251c81d43
fix indentation of greatestCommonDivisor
2019-04-25 16:21:36 -07:00
Benjamin Sergeant
f30a5074ab
Remove commented code
2019-04-25 16:16:52 -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
a443bbdf80
Fix data races in DNSLookup (tsan)
2019-04-24 21:53:31 -07:00
Benjamin Sergeant
26ee46b246
better server termination / another try at preventing thread join failures
2019-04-24 09:45:53 -07:00
Kumamon38
28210ee31d
add boolean and add missing protocol error close constant ( #41 )
2019-04-23 04:31:55 -07:00
Benjamin Sergeant
323684efff
(server) attempt to fix broken macOS unittest on travis CI
2019-04-22 09:36:16 -07:00
Benjamin Sergeant
7df7453365
indentation / comestic changes
2019-04-19 16:57:38 -07:00
Benjamin Sergeant
662f66e501
(socket server) wait for all connections threads to be terminated before exiting stop method
2019-04-19 16:31:33 -07:00
Benjamin Sergeant
cce759b8dd
fix Linux cast warning
2019-04-19 15:03:49 -07:00
Benjamin Sergeant
5370201df8
add locks around Socket::send and Socket::recv to see if it helps with thread sanitizer error in Linux CI
2019-04-19 14:28:51 -07:00
Benjamin Sergeant
a2d170f415
fix bad merge in IXWebSocketTransport.cpp ...
2019-04-19 09:41:16 -07:00
Benjamin Sergeant
03f762db86
Socket::Poll does not need a callback
2019-04-19 09:32:49 -07:00
Kumamon38
aea859af52
Ping timeout use constant ( #36 )
...
* use constant for ping timeout
* change close code types
2019-04-19 09:16:25 -07:00
Kumamon38
5682129b1d
fix close code/reason issue ( #34 )
...
* fix close code/reason issue
* added code 1006 for abnormal closure
2019-04-18 10:02:31 -07:00
Kumamon38
c3431f19bf
Real ping ( #32 )
...
* close method change and fix code
* missing mutex
* wip
* renaming and fixes
* renaming, fixes
* added enablePong/disablePong, add tests
* added new test cases
* add 1 test case
* fix gcd name to greatestCommonDivisor
* move ping and ping timeout checks into socket poll, local var in test cases and indent fixes
* indent issue
2019-04-18 09:24:16 -07:00
Benjamin Sergeant
f4f60d38b8
docker + linux build fix
2019-04-17 22:52:03 -07:00
Benjamin Sergeant
4337345103
setter method does not need to return anything, make it void
2019-04-17 20:36:26 -07:00
Benjamin Sergeant
52f460f66d
(doc) Add more doc to SocketServer
2019-04-17 20:36:26 -07:00
Benjamin Sergeant
d486c72e02
websocket server: closed connection threads are joined properly
2019-04-17 20:36:26 -07:00
Benjamin Sergeant
bdfc55b951
Bug/30 server connection problem ( #31 )
...
* use threads instead of std::async, need to cleanup threads
* less buggy server connection per thread system
2019-04-16 22:19:44 -07:00
Benjamin Sergeant
b0f6026c23
make closeWireSize a default parameter of WebSocketTransport::close
2019-04-16 09:55:12 -07:00
Kumamon38
b2aca491b6
close method change and fix code ( #28 )
...
* close method change and fix code
* missing mutex
2019-04-16 08:58:34 -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
Benjamin Sergeant
37c64841ff
fix warning
2019-04-13 21:16:04 -07:00
Benjamin Sergeant
804ec9246f
(server) fix masking bug
2019-03-22 15:33:04 -07:00
Benjamin Sergeant
f029321664
can send TEXT message (we only support BINARY messages now)
2019-03-22 14:24:22 -07:00
Benjamin Sergeant
d41b7f64e4
unmasked code is broken
2019-03-22 14:24:15 -07:00
Benjamin Sergeant
0366d1afb9
remove printf + unittest fix
2019-03-22 09:56:28 -07:00
Benjamin Sergeant
4ef3073ca4
(server) server should not mask data when sending to client (some python client libraries enforce that and assert)
2019-03-22 09:53:56 -07:00
Benjamin Sergeant
68a53aa884
(server) HTTP response is malformed
2019-03-22 09:52:19 -07:00
Benjamin Sergeant
2358b3ff26
minor cleanup
2019-03-21 13:51:25 -07:00
Benjamin Sergeant
00ed1d2817
HTTP/1.1 response should contains a reason (websocket server)
...
Fix compatibility problem with websockets python library, where the response does not contains a reason
File "/.../lib/python3.7/site-packages/websockets/http.py", line 126, in read_response
version, status_code, reason = status_line[:-2].split(b' ', 2)
ValueError: not enough values to unpack (expected 3, got 2)
The above exception was the direct cause of the following exception:
websockets.exceptions.InvalidMessage: Malformed HTTP message
2019-03-21 13:43:47 -07:00
Benjamin Sergeant
5b6fdb6526
cleanup, remove dead method
2019-03-21 10:06:59 -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
Michael Lu
663299c91e
Fixed heartbeat typos ( #22 )
2019-03-19 21:31:43 -07:00
Benjamin Sergeant
523a6e989a
make PollResultType an enum class
2019-03-19 09:29:57 -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
eb6ee52aaa
use milliseconds
2019-03-18 20:17:44 -07:00
Benjamin Sergeant
a3adc49d8c
disable sigpipe on osx when writing/reading into a dead pipe
2019-03-18 17:52:01 -07:00
Benjamin Sergeant
572a217050
no default parameters for isReadyToWrite and isReadyToRead
2019-03-18 14:31:21 -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
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