Benjamin Sergeant
521286ae88
fix android build + proxy work
2019-11-16 06:51:53 -08:00
Benjamin Sergeant
d122e12a1f
bump version
2019-11-15 17:19:06 -08:00
Benjamin Sergeant
c943e72c7b
check max frame size ( #119 )
2019-10-28 21:53:31 -07:00
Benjamin Sergeant
0e9cf863cf
Add client support for websocket subprotocol. Look for the new addSubProtocol method for details
2019-10-13 13:37:34 -07:00
Benjamin Sergeant
279f6fbfed
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
d2cf616737
Freebsd ( #117 )
...
* add file
* CMake freebsd fix
2019-10-09 17:00:32 -07:00
Benjamin Sergeant
11a3b64657
(freebsd compile fix) add some missing socket related headers
2019-10-09 15:38:40 -07:00
Benjamin Sergeant
d93bd9b58b
bump version
2019-10-01 16:01:32 -07:00
Benjamin Sergeant
13801dff8a
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
de87fa34dc
Implement SSL server with OpenSSL backend / still flaky
2019-10-01 15:43:37 -07:00
Benjamin Sergeant
d60f5de231
Add --tls option to pass to ws server command, to enable/disable tls
2019-10-01 13:54:46 -07:00
Benjamin Sergeant
22b4e6a8fb
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
1ed39677ce
SocketServer::handleConnection takes an std::shared_ptr<Socket> instead of a file descriptor
2019-09-30 21:48:55 -07:00
Benjamin Sergeant
562d7484e4
openSSLHandshake -> openSSLClientHandshake
2019-09-30 21:24:25 -07:00
Benjamin Sergeant
58d6e4bb26
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
0539d2df2e
clang-format
2019-09-30 17:52:39 -07:00
Benjamin Sergeant
e023dd9c36
ws has a --version option
2019-09-30 17:31:33 -07:00
Benjamin Sergeant
a95cf727b1
bump version number
2019-09-29 22:10:07 -07:00
Benjamin Sergeant
2229159bd2
ws curl + http client tls option handling + ca cert processing for mbedtls
2019-09-29 21:13:11 -07:00
Benjamin Sergeant
89d2606b1d
update copyright dates and authors
2019-09-29 20:09:51 -07:00
Benjamin Sergeant
a7a41c51d9
openssl client: handle TLS options
2019-09-29 20:07:53 -07:00
Benjamin Sergeant
b3784b4c60
SocketTLSOptions: more methods (contributed by Matt DeBoer)
2019-09-29 17:35:18 -07:00
Benjamin Sergeant
28c4b83ab9
Add ability to use OpenSSL on apple platforms.
2019-09-29 15:34:58 -07:00
Benjamin Sergeant
3c8cd6289b
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
1b6584ccba
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
f18980d010
http server unittest + refactoring
2019-09-26 09:45:59 -07:00
Benjamin Sergeant
7495c9ebb8
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
b26d463bad
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
a9b8b6decd
wrong mutex being used ...
2019-09-24 14:10:41 -07:00
Benjamin Sergeant
ea83327261
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
c32067013a
fix warning + add redis server logging
2019-09-23 21:14:20 -07:00
Benjamin Sergeant
fbf80f4ab1
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
6f2fe49a7b
reformat everything with clang-format
2019-09-23 10:25:23 -07:00
Benjamin Sergeant
b667c0ad40
fix unittest
2019-09-22 19:40:33 -07:00
Benjamin Sergeant
ab1b5cd665
compile fixes
2019-09-22 18:52:57 -07:00
Benjamin Sergeant
d0963f4af0
compiled fixes on mac and windows
2019-09-22 18:43:57 -07:00
Matt DeBoer
dd01f734c6
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
1769199d32
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
a7cf151639
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
f7a12f52f8
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
57086e28d8
fix unittest warnings + remove trailing spaces
2019-09-12 11:43:52 -07:00
Benjamin Sergeant
7bfa6e8478
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
6beba16ca7
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
48cefe5525
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
3e3f7171fc
cobra publish fix
2019-09-05 14:31:28 -07:00
Benjamin Sergeant
66ed7577b1
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
cae23c764f
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
508d372df1
ws autobahn / report progress with spdlog::info to get timing info
2019-09-04 10:16:32 -07:00
Benjamin Sergeant
98189c23dc
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
ec55b4a82a
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
5d58982f77
IXWebSocketTransport message processing refactoring
2019-09-03 15:48:55 -07:00
Benjamin Sergeant
57665ca825
Validate close codes. Autobahn 7.9.*
2019-09-03 15:43:16 -07:00
Benjamin Sergeant
deaa753657
Validate that the close reason is proper utf-8. Autobahn 7.5.1
2019-09-03 14:35:40 -07:00
Benjamin Sergeant
7c7c877621
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
afa71a6b4b
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
172cd39702
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
82213fd3a5
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
61eb662e5f
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
2887370666
Close connections when reserved bits are used (autobahn test: 3 Reserved Bits)
2019-09-01 16:23:00 -07:00
Benjamin Sergeant
10dbe2d44d
+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
6b2cdb6b54
user agent
2019-08-30 12:50:56 -07:00
Benjamin Sergeant
06bc795133
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
45d7bb34d7
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
8eb0d0b7c3
put windows poll in the global namespace, not ix namespace
2019-08-26 09:51:37 -07:00
ozychhi
f18f04c0ee
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
193da820b2
Windows: use select instead of WSAPoll, through a poll wrapper
2019-08-22 10:34:17 -07:00
Benjamin Sergeant
c72b2dbd6b
add poll alias to WSAPoll on Windows
2019-08-19 22:26:25 -07:00
Benjamin Sergeant
835523f77b
fix #101 / wrong include in IXSocket.cpp on Windows
2019-08-19 22:19:39 -07:00
Benjamin Sergeant
dd0d7c268f
CobraMetricThreadedPublisher _enable flag is an atomic, and CobraMetricsPublisher is enabled by default
2019-08-14 19:54:30 -07:00
Benjamin Sergeant
b2bfccac0a
clang format
2019-08-13 10:59:18 -07:00
Benjamin Sergeant
8b8b352e61
fix #99 / Connect error descriptions are invalid
2019-08-13 10:49:11 -07:00
Benjamin Sergeant
4dd5950406
fix typo in README
2019-07-23 13:52:16 -07:00
Benjamin Sergeant
4fb268585c
dns / use cancellable instead of blocking
2019-06-30 23:26:14 -07:00
Benjamin Sergeant
3a2495c456
make IXDNSLookup more robust
2019-06-26 19:12:48 -07:00
Benjamin Sergeant
1d4d058ed0
simplify IXDNSLookup
2019-06-26 16:25:07 -07:00
Benjamin Sergeant
15a1347531
use poll instead of select in SocketServer
2019-06-25 17:18:24 -07:00
Benjamin Sergeant
4cbfa71338
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
705625af0a
refactor select code + add protection against large fds (cf Android 9)
2019-06-25 15:41:39 -07:00
Benjamin Sergeant
eea42bff66
select refactoring IXSocket::select -> IXSocket::poll
2019-06-25 10:16:40 -07:00
Benjamin Sergeant
691502d7ad
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
43deaba547
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
55c65b08bf
- 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
a11aa3e0dd
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
de0bf5ebcd
WebSocket callback only take one object, a const ix::WebSocketMessagePtr& msg
2019-06-09 11:33:17 -07:00
Benjamin Sergeant
15369e1ae9
...
2019-06-09 10:22:27 -07:00
Benjamin Sergeant
d4115880b9
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
d2747487e3
IXSocketMbedTLS: better error handling in close and connect
2019-06-06 14:59:22 -07:00
Benjamin Sergeant
cbf21b4008
add an option to easily disable per message deflate compression
2019-06-06 13:48:53 -07:00
Benjamin Sergeant
15d8c663da
cobra to sentry fixes
2019-06-05 18:47:48 -07:00
Benjamin Sergeant
d50125c62d
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
2b111e8352
HttpResponse is a struct, not a tuple 🉐
2019-06-03 22:12:52 -07:00
Benjamin Sergeant
a35cbdfb7c
http / PUT fix 🐚
2019-06-03 21:12:39 -07:00
Benjamin Sergeant
6a41b7389f
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
a187e69650
Add simple HTTP and HTTPS client test ㊙️
2019-06-03 12:23:35 -07:00
Benjamin Sergeant
fcacddbd9f
(http client) / Add DEL and PUT method, make requests and other utilities public 👐
2019-06-03 11:38:56 -07:00
Benjamin Sergeant
fa84ade6be
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
17eaa323ed
play with podmena ♓
2019-06-02 11:03:44 -07:00
Benjamin Sergeant
57976cf613
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
977e8794ec
(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
c6dfb14953
clang format, based on cpprest
2019-05-30 08:46:50 -07:00