Houkime
e1a0ce5af9
Prevent GDScript language server from listening to external hosts by default
...
* Add bind_ip property to WebSocketServer defaulting to "*" (listen to everyone)
* Set default for GDscript Language Server to listen only to localhost
Fixes potential security issue with GDScript language server being exposed to the
broad net by default.
Since it is the server which primary usage is to provide utility to the local
editor there is no need to expose it.
2020-01-15 00:29:59 +00:00
Fabio Alessandrelli
aa744aee7d
Update documentation to reflect HTML5 limitations.
2020-01-14 15:42:47 +01:00
Rémi Verschelde
a7f49ac9a1
Update copyright statements to 2020
...
Happy new year to the wonderful Godot community!
We're starting a new decade with a well-established, non-profit, free
and open source game engine, and tons of further improvements in the
pipeline from hundreds of contributors.
Godot will keep getting better, and we're looking forward to all the
games that the community will keep developing and releasing with it.
2020-01-01 11:16:22 +01:00
Fabio Alessandrelli
9afdb9dcd3
WSLPeer now prevents receiving data after close.
...
Used to spit error and report empty packets when connection was still
half-closed (waiting for confirmation from other end).
2019-12-21 16:38:36 +01:00
Marcel Admiraal
8fa72a20f3
Fix Visual Studio throwing C4334 warning.
2019-11-15 14:11:12 +01:00
Fabio Alessandrelli
2bb3e358e0
Trim protocol field from spaces in WS classes.
2019-10-16 16:16:27 +02:00
Fabio Alessandrelli
d75e0de729
Fix HTML5 build after 67a4c30
.
...
I messed up a rebase and a commit was partly skipped
2019-10-15 14:15:02 +02:00
Rémi Verschelde
d655a7c097
doc: Sync classref with current source
2019-10-11 08:45:03 +02:00
Fabio Alessandrelli
2c557787c1
Document all this new improvements.
2019-10-09 13:53:04 +02:00
Fabio Alessandrelli
67a4c3033b
Custom headers support in WebSocketClient.
...
This commit also converts all PoolVector<String> parameters to
`const Vector<String>` in both WebSocketServer and WebSocketClient.
2019-10-09 13:53:04 +02:00
Fabio Alessandrelli
c723a8b6aa
Implement WebSocketServer SSL support.
2019-10-09 13:53:04 +02:00
Fabio Alessandrelli
33644d7118
WebSocketClient can now use custom SSL certificate
...
Via the `trusted_ssl_certificate` property.
2019-10-09 13:53:04 +02:00
Fabio Alessandrelli
025cc04d9e
Re-implement WebSocket get host/port.
...
Was lost during library switch
2019-10-09 13:53:04 +02:00
Rémi Verschelde
a7ac8ec876
doc: Fix parsing of self-closing XML tags
...
Follow-up to #31925 , `<member />` tags just before `</members>` would cause
a parsing issue, and we'd never notice that we're no longer parsing members.
Also added space before closing `/>`.
2019-09-24 13:34:05 +02:00
Bojidar Marinov
b397bcf4a1
Run doctool after overridden properties changes
2019-09-04 15:26:08 +03:00
Rémi Verschelde
538328898b
Style: Fix copyright headers in new files
2019-08-28 09:19:52 +02:00
Rémi Verschelde
99980d856b
Merge pull request #29871 from Faless/crypto/initial_pr
...
More Crypto, SSL server, crt/key as Resource, HashingContext
2019-08-21 18:03:03 +02:00
Rémi Verschelde
f2c9252b6e
Merge pull request #31483 from Faless/ws/fix_double_relay
...
Fix WebSocketServer relaying message twice.
2019-08-20 12:49:15 +02:00
Fabio Alessandrelli
d1539db2c6
Fix WebSocketServer relaying message 2 times.
...
The WebSocketMultiplayerPeer was relaying the same message two times,
both in _server_relay and _process_multiplayer (which was only supposed
to store the packet, given the server was one of the destination).
_process_multiplayer now only store the packet, and calls _server_relay
which will relay the message to other clients if needed.
2019-08-19 18:18:13 +02:00
Fabio Alessandrelli
17be67b8c7
WebSocketServer now sanitize destination peers.
...
When relaying messages in multiplayer mode.
Could cause a crash in case a malicious client sends a bogus packet and
for those cases where a peer has just disconnected and a message arrive
from another peer with the disconnected one as destination.
2019-08-19 17:26:07 +02:00
Fabio Alessandrelli
c19871af6d
Move CryptoCore to it's own folder.
...
Crypto classes will be placed in core/crypto.
2019-08-19 16:31:05 +02:00
Rémi Verschelde
d3153c28f0
Replace last occurrences of 'ERR_EXPLAIN' with 'ERR_FAIL_*_MSG'
...
The last remaining ERR_EXPLAIN call is in FreeType code and makes sense as is
(conditionally defines the error message).
There are a few ERR_EXPLAINC calls for C-strings where String is not included
which can stay as is to avoid adding additional _MSGC macros just for that.
Part of #31244 .
2019-08-17 13:31:22 +02:00
Robin Hübner
8aeade74db
Replace 'ERR_EXPLAIN' with 'ERR_FAIL_*_MSG' in rest of 'modules/'
2019-08-12 10:15:54 +02:00
Fabio Alessandrelli
d6c9b377b9
Fix WebSocketClient crash when unref during signal
...
Always call disconnect before emitting signals, to avoid calling it on a
freed object if the user decides to unreference it in a signal.
2019-07-28 15:23:20 +02:00
Fabio Alessandrelli
3e305ea036
Fix WebSocketClient consuming data during hanshake
...
Was missing a break of the while loop on connection.
This potentially caused early data frames to be trashed.
2019-07-08 19:24:27 +02:00
Rémi Verschelde
9da5fdc955
Merge pull request #30419 from Faless/ws/wslay_server_proto
...
(Re-)Implement subprotocols in websocket server.
2019-07-08 08:18:00 +02:00
Fabio Alessandrelli
11452dcf91
(Re-)Implement subprotocols in websocket server.
2019-07-08 07:48:26 +02:00
qarmin
9a77d748c0
Fixes minor issues found by static analyzer
2019-07-07 23:08:51 +02:00
Fabio Alessandrelli
3380dc9638
Optimize header reads (avoid extra allocs)
2019-07-04 15:03:04 +02:00
Fabio Alessandrelli
aae6c075aa
Remove libwebsocket. No longer used, yay!
2019-07-04 15:03:04 +02:00
Fabio Alessandrelli
9e303ef71c
WebSocket module now uses wslay library.
...
Both client and server are supported on native builds (as usual).
SSL server is still not supported, but will soon be possible with this
new library.
The API stays the same, we just need to work out potential issues due to
this big library switch.
2019-07-04 15:03:04 +02:00
Rémi Verschelde
b0d41847ed
SCons: Use CPPDEFINES instead of CPPFLAGS for pre-processor defines
...
It's the recommended way to set those, and is more portable
(automatically prepends -D for GCC/Clang and /D for MSVC).
We still use CPPFLAGS for some pre-processor flags which are not
defines.
2019-07-03 09:59:04 +02:00
Hugo Locurcio
f7f6115f76
Proofread and improve the whole class reference
...
- Document a few more properties and methods
- Add more information to many classes
- Fix lots of typos and gramar mistakes
- Use [code] tags for parameters consistently
- Use [b] and [i] tags consistently
- Put "Warning:" and "Note:" on their own line to be more visible,
and make them always bold
- Tweak formatting in code examples to be more readable
- Use double quotes consistently
- Add more links to third-party technologies
2019-06-27 22:30:19 +02:00
Rémi Verschelde
bc82781f7d
doc: Replace all [code]CONSTANT[/code] by new [constant CONSTANT] hyperlinks
2019-06-27 13:49:36 +02:00
qarmin
4e5310cc60
Some code changed with Clang-Tidy
2019-06-26 15:08:25 +02:00
Fabio Alessandrelli
5b2f098ed4
Expose WebSocket set_buffers and document it.
2019-06-15 17:21:08 +02:00
Fabio Alessandrelli
ee90da4acb
Allow setting websocket buffers sizes internally.
...
Needed by LSP.
2019-06-15 16:57:23 +02:00
Fabio Alessandrelli
be414e4476
Revert "Update libwebsockets to 3.1 (plus UWP patch)"
...
This reverts commit 90210c4862
.
2019-05-01 14:41:47 +02:00
Rémi Verschelde
d52b70fb5e
SCons: Always use env.Prepend for CPPPATH
...
Include paths are processed from left to right, so we use Prepend to
ensure that paths to bundled thirdparty files will have precedence over
system paths (e.g. `/usr/include` should have lowest priority).
2019-04-30 13:12:06 +02:00
Rémi Verschelde
c2a669a9f0
SCons: Review uses of CCFLAGS, CXXFLAGS and CPPFLAGS
...
Many contributors (me included) did not fully understand what CCFLAGS,
CXXFLAGS and CPPFLAGS refer to exactly, and were thus not using them
in the way they are intended to be.
As per the SCons manual: https://www.scons.org/doc/HTML/scons-user/apa.html
- CCFLAGS: General options that are passed to the C and C++ compilers.
- CFLAGS: General options that are passed to the C compiler (C only;
not C++).
- CXXFLAGS: General options that are passed to the C++ compiler. By
default, this includes the value of $CCFLAGS, so that setting
$CCFLAGS affects both C and C++ compilation.
- CPPFLAGS: User-specified C preprocessor options. These will be
included in any command that uses the C preprocessor, including not
just compilation of C and C++ source files [...], but also [...]
Fortran [...] and [...] assembly language source file[s].
TL;DR: Compiler options go to CCFLAGS, unless they must be restricted
to either C (CFLAGS) or C++ (CXXFLAGS). Preprocessor defines go to
CPPFLAGS.
2019-04-24 16:57:58 +02:00
Rémi Verschelde
6af69f851a
doc: Drop unused <demos> tag
2019-04-19 11:03:46 +02:00
Fabio Alessandrelli
6a1bf006a3
Move IDHandler JS module to platform from Websock
2019-04-12 12:41:49 +02:00
marxin
e7f22ebdcd
Enable warnings=extra on clang and GCC testers.
...
And remove 2 warnings from warnings=extra.
2019-04-02 17:14:47 +02:00
Rémi Verschelde
39c868171e
doc: Bump version to 3.2
2019-04-01 12:33:56 +02:00
Fabio Alessandrelli
90210c4862
Update libwebsockets to 3.1 (plus UWP patch)
2019-03-06 02:02:52 +01:00
marxin
e5f665c718
Fix -Wsign-compare warnings.
...
I decided to modify code in a defensive way. Ideally functions
like size() or length() should return an unsigned type.
2019-02-27 07:45:57 +01:00
marxin
8d51618949
Add -Wshadow=local to warnings and fix reported issues.
...
Fixes #25316 .
2019-02-20 19:44:12 +01:00
marxin
155cbe0b37
Fix warnings seen with warnings=all and recent GCC 8.2.
2019-02-18 21:54:31 +01:00
Rémi Verschelde
fe7e11e008
Modules: Ensure classes match their header filename
...
Renamed:
- `modules/mono/mono_gd/gd_mono_class_member.h` -> `i_mono_class_member.h`
- `modules/upnp/upnpdevice.h` -> `upnp_device.h`
- `modules/websocket/websocket_multiplayer.h` -> `websocket_multiplayer_peer.h`
2019-02-12 22:59:56 +01:00
Fabio Alessandrelli
14e59ff112
Update docs and errors for WebSocket module
2019-01-28 02:12:50 +01:00
Rémi Verschelde
26fddb77be
doc: Fix wrong references found by new makerst.py
...
Thanks @PJB3005
2019-01-07 10:06:12 +01:00
Rémi Verschelde
b16c309f82
Update copyright statements to 2019
...
Happy new year to the wonderful Godot community!
2019-01-01 12:58:10 +01:00
Rémi Verschelde
d1f3b622f0
Fix missing/malformed license headers
2019-01-01 12:46:36 +01:00
Fabio Alessandrelli
77466285f2
Fix HTML5 WebSocket client buffers size.
2018-12-26 17:51:12 +01:00
Rémi Verschelde
6cdcde7114
doc: Add missing commas after "If true/false"
2018-12-20 13:47:12 +01:00
Fabio Alessandrelli
c3d3f1dedb
Websocket LWS keep servicing till no CB are left
...
Apparently, only a single WRITABLE/READABLE callback is called at each
servicing. For this reason, we want to keep servicing until we end up
not receiving any callback.
When that happens, we can assume that we can't (or don't want to) write
more, and that there is nothing left to read in the socket buffer.
2018-11-25 17:25:03 +01:00
Fabio Alessandrelli
c066db4d59
Convert WebSocket module to use PacketBuffer class
2018-11-12 22:55:17 +01:00
Fabio Alessandrelli
4847b5bff5
Add new PacketBuffer class for buffered peers
2018-11-12 21:49:50 +01:00
Rémi Verschelde
c02cd5139f
Merge pull request #23490 from Faless/lws_client_memfix
...
Fix access to freed mem in WS client after #23241
2018-11-10 22:18:42 +01:00
Juan Linietsky
f2e54057ae
-Moved EditorDefaultValue to ClassDB, made it core
...
-Removed one and zero hints for properties, replaced by default value
2018-11-08 11:30:59 -03:00
Fabio Alessandrelli
e3008b71c3
Fix access to freed mem in WS client after #23241
...
I was wrong in assuming that String had to survive long enough to avoid
it, what actually needed to survive was the CharString obtained from the
acsii() or utf8() function.
At least according to valgrind
2018-11-03 23:39:15 +01:00
Fabio Alessandrelli
e6a069119b
Add missing EMWSServer::poll function.
...
Empty of course as server is not supported in HTML5, but the symbol must
be defined.
2018-10-23 12:49:24 +02:00
Fabio Alessandrelli
bafcde805c
Remove unneeded strncpy in lws_client.
...
Pass the String buffer directly, lws_client_connect_via_info will copy
them for us.
2018-10-23 12:31:47 +02:00
Dualtagh Murray
b902a2f2a7
Fixing warnings generated by MSVC
...
Fixes #22684 .
2018-10-19 11:45:24 +02:00
Fabio Alessandrelli
d65afb2c74
Fix LWSClient connect_to_host string termination.
...
Coming from strncpy might get you a non-NULL terminated buffer.
The solution, if you accept trunction, is to give one less byte to
strncpy and manually set the last char in the buffer to '\0'.
If the source string is shorter, than the buffer is padded with '\0'
automatically.
2018-10-07 14:50:14 +02:00
Fabio Alessandrelli
8b2688786f
Fix -Wunused-function in websocket module
2018-09-29 22:26:32 +02:00
Rémi Verschelde
3a2ca68af3
SCons: Build thirdparty code in own env, disable warnings
...
Also remove unnecessary `Export('env')` in other SCsubs,
Export should only be used when exporting *new* objects.
2018-09-28 14:07:39 +02:00
Fabio Alessandrelli
9d9a14e289
Remove socket_helper.h after NetSocket refactor
2018-09-28 02:03:23 +02:00
Rémi Verschelde
cda5b0bfe1
Fix warnings about unused variables [-Wunused-variable]
...
Fixes the following GCC 5 warnings:
```
drivers/gles2/rasterizer_scene_gles2.cpp:1139:15: warning: unused variable 'offset' [-Wunused-variable]
drivers/gles2/rasterizer_scene_gles2.cpp:1205:39: warning: unused variable 'multi_mesh' [-Wunused-variable]
drivers/gles2/rasterizer_storage_gles2.cpp:359:7: warning: unused variable 'srgb' [-Wunused-variable]
drivers/gles2/shader_gles2.cpp:1016:45: warning: unused variable 'texture_hints' [-Wunused-variable]
editor/animation_track_editor.cpp:776:9: warning: unused variable 'keys_to' [-Wunused-variable]
editor/editor_inspector.cpp:273:7: warning: unused variable 'vs_height' [-Wunused-variable]
editor/editor_themes.cpp:202:10: warning: unused variable 'begin_time' [-Wunused-variable]
editor/editor_themes.cpp:239:10: warning: unused variable 'end_time' [-Wunused-variable]
editor/plugins/animation_blend_tree_editor_plugin.cpp:726:17: warning: unused variable 'an' [-Wunused-variable]
editor/plugins/script_text_editor.cpp:1278:8: warning: unused variable 'fold_state' [-Wunused-variable]
main/main.cpp:132:13: warning: 'use_vsync' defined but not used [-Wunused-variable]
modules/cvtt/image_compress_cvtt.cpp:231:8: warning: unused variable 'y_end' [-Wunused-variable]
modules/cvtt/image_compress_cvtt.cpp:311:6: warning: unused variable 'shift' [-Wunused-variable]
modules/gdscript/gdscript_editor.cpp:58:7: warning: unused variable 'th' [-Wunused-variable]
modules/gridmap/grid_map.cpp:1084:6: warning: unused variable 'ofs' [-Wunused-variable]
modules/theora/video_stream_theora.cpp:442:9: warning: unused variable 'tr' [-Wunused-variable]
modules/visual_script/visual_script_editor.cpp:2606:6: warning: unused variable 'count' [-Wunused-variable]
modules/visual_script/visual_script_editor.cpp:2829:6: warning: unused variable 'seq_count' [-Wunused-variable]
modules/visual_script/visual_script_editor.cpp:2844:24: warning: unused variable 'vnode_function' [-Wunused-variable]
modules/websocket/lws_peer.cpp:122:12: warning: unused variable 'peer_data' [-Wunused-variable]
modules/websocket/lws_peer.cpp:135:12: warning: unused variable 'peer_data' [-Wunused-variable]
modules/websocket/lws_peer.cpp:63:12: warning: unused variable 'peer_data' [-Wunused-variable]
modules/websocket/lws_peer.cpp:91:12: warning: unused variable 'peer_data' [-Wunused-variable]
platform/android/export/export.cpp:763:16: warning: unused variable 'node_size' [-Wunused-variable]
scene/gui/rich_text_label.cpp:850:10: warning: unused variable 'x_ofs' [-Wunused-variable]
scene/gui/text_edit.cpp:653:8: warning: unused variable 'tab_w' [-Wunused-variable]
scene/resources/bit_mask.cpp:186:6: warning: unused variable 'i' [-Wunused-variable]
scene/resources/mesh.cpp:549:20: warning: '_array_name' defined but not used [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:107:10: warning: unused variable 'v2' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:108:10: warning: unused variable 'v3' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:109:10: warning: unused variable 'v4' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:110:10: warning: unused variable 'v5' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:111:10: warning: unused variable 'v0n' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:112:10: warning: unused variable 'v1n' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:113:10: warning: unused variable 'v2n' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:114:10: warning: unused variable 'v3n' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:115:10: warning: unused variable 'v4n' [-Wunused-variable]
servers/audio/audio_rb_resampler.cpp:116:10: warning: unused variable 'v5n' [-Wunused-variable]
servers/visual/default_mouse_cursor.xpm:2:21: warning: 'default_mouse_cursor_xpm' defined but not used [-Wunused-variable]
```
2018-09-27 16:25:24 +02:00
Fabio Alessandrelli
df43b94e6e
Update WebSocket documentation
2018-09-24 01:50:37 +02:00
Fabio Alessandrelli
4b92956db7
Implement WebSocket clean close detection.
2018-09-24 01:50:37 +02:00
Fabio Alessandrelli
5d91e87c64
Implement WebSocket close notify.
2018-09-24 01:50:37 +02:00
Rémi Verschelde
1a16dabfb5
Merge pull request #21982 from luzpaz/misc-typos
...
Misc. typos
2018-09-13 10:59:00 +02:00
luz.paz
08bde5b2de
Misc. typos
...
Found via `codespell -q 3 -I ../godot-word-whitelist.txt --skip="./thirdparty,*.po"`
2018-09-12 21:39:17 -04:00
Rémi Verschelde
277b24dfb7
Make core/ includes absolute, remove subfolders from include path
...
This allows more consistency in the manner we include core headers,
where previously there would be a mix of absolute, relative and
include path-dependent includes.
2018-09-12 09:52:22 +02:00
Fabio Alessandrelli
6bc97cc7cc
Allow WebSocket connect with no sub-protocols.
2018-08-30 20:23:16 +02:00
Rémi Verschelde
139e621338
Merge pull request #20913 from pulkomandy/master
...
Rebase patches for fixing haiku build.
2018-08-13 21:26:15 +02:00
Adrien Destugues
a294a842cb
Rebase patches for fixing haiku build.
2018-08-11 17:20:51 +02:00
Fabio Alessandrelli
6a57f29573
Fix WebSocket crash due to non PDO init.
...
Move RingBuffer (and few related vars) to LWSPeer.
2018-08-06 03:47:02 +02:00
Wilson E. Alvarez
a22e746bc3
Removed unnecessary assignments
2018-07-24 09:51:03 +02:00
Rémi Verschelde
7c9f7452f4
Style: Format code with clang-format 6.0.1
2018-07-18 16:27:03 +02:00
Fabio Alessandrelli
267b3746c5
Sanitize protocol struct, def LWS T/RX buffer size
2018-06-23 20:17:15 +02:00
Fabio Alessandrelli
e56a3c1dc4
Bump libwebsockets to version 3.0.0
2018-06-07 18:07:35 +02:00
Rémi Verschelde
d0811ed3f9
Thirdparty: Fill copyright for lws, miniupnpc, clipper
...
Rename `lws` to `libwebsockets` which is its library name.
Add missing license file for mbedtls.
2018-06-07 10:46:05 +02:00
Fabio Alessandrelli
6cda58a12f
Fix LWSPeer get_connected_[host/port]
2018-06-06 18:34:08 +02:00
Rémi Verschelde
3334209a73
SCons: Pass env to modules can_build method
...
This allows to disable modules based on the environment,
in particular `env[tools]` which tells us if we are
building the editor or not.
2018-05-30 19:11:36 +02:00
Fabio Alessandrelli
dd546dc5b8
Document websocket module, further document enet
2018-05-08 21:15:50 +02:00
Fabio Alessandrelli
03bf783f3c
Various coverity scan fixes for networking
...
Fix FreeBSD websocket compilation error
2018-04-21 15:36:41 +02:00
Fabio Alessandrelli
6b9ec810c6
Implement get_peer_[address|port] in ENet/WSServer
...
Also implement get_connected_host and get_connected_port in WebSocketPeer
(not supported in HTML5 due to browser limitation).
Add shorthand disconnect_peer(id) for get_peer(id)->close() like in ENet to
WebSocketServer.
2018-04-12 12:30:51 +02:00
Fabio Alessandrelli
2e078142a0
Websocket client SSL support
2018-04-03 20:13:57 +02:00
Poommetee Ketson
ff070de986
s/2017/2018/g for gles2, websocket, linux appdata
2018-03-21 16:07:51 +07:00
Fabio Alessandrelli
982fa59126
Remove unneeded and problematic minilex.c from lws.
...
We don't need it, it's used upstream to test the lexical parser
2018-03-01 16:43:42 +01:00
Fabio Alessandrelli
659c62ee33
Use Prepend instead of Append for mbedTLS include
...
Fixes build on FreeBSD when system-wide mbedTLS and/or openSSL are installed
2018-02-28 20:02:16 +01:00
luz.paz
612ab4bbc6
Fix typos with codespell
...
Found via `codespell -q 3 --skip="./thirdparty,./editor/translations" -I ../godot-word-whitelist.txt`
Whitelist consists of:
```
ang
doubleclick
lod
nd
que
te
unselect
```
2018-02-21 19:46:06 +01:00
George Marques
a2ef49f8b9
Websocket module properly recognize UWP (by @vnen)
2018-02-20 15:11:50 +01:00
Fabio Alessandrelli
bd3c27ba78
Allow building with system wide mbedtls on X11
...
Using builtin_mbedtls=yes is still the default as many distributions
do not ship with mbedtls included.
2018-02-14 01:34:25 +01:00
Fabio Alessandrelli
34b9fc3022
lws module now uses mbedtls as OpenSSL replacement
2018-02-14 01:26:23 +01:00
Fabio Alessandrelli
658d71c3b9
Relicense module to the wondeful Godot community!
2018-02-06 14:10:13 +01:00
Fabio Alessandrelli
6a644d3ee1
Add websocket module.
...
Webassembly is client-only for obvious reasons.
Other platforms support both client and server using libwebsockets.
2018-02-06 14:10:13 +01:00