Andy Green | a35c86f | 2013-01-31 10:16:44 +0800 | [diff] [blame] | 1 | Changelog |
| 2 | --------- |
| 3 | |
Andy Green | c1fdd10 | 2014-07-06 09:56:11 +0800 | [diff] [blame^] | 4 | v1.3-chrome37-firefox30 |
| 5 | ======================= |
| 6 | |
| 7 | .gitignore | 1 - |
| 8 | CMakeLists.txt | 447 +++-- |
| 9 | README.build | 35 +- |
| 10 | README.coding | 14 + |
| 11 | changelog | 66 + |
| 12 | cmake/LibwebsocketsConfig.cmake.in | 17 + |
| 13 | cmake/LibwebsocketsConfigVersion.cmake.in | 11 + |
| 14 | config.h.cmake | 18 + |
| 15 | cross-ming.cmake | 31 + |
| 16 | cross-openwrt-makefile | 91 + |
| 17 | lib/client-handshake.c | 205 ++- |
| 18 | lib/client-parser.c | 58 +- |
| 19 | lib/client.c | 158 +- |
| 20 | lib/context.c | 341 ++++ |
| 21 | lib/extension-deflate-frame.c | 2 +- |
| 22 | lib/extension.c | 178 ++ |
| 23 | lib/handshake.c | 287 +--- |
| 24 | lib/lextable.h | 338 ++++ |
| 25 | lib/libev.c | 175 ++ |
| 26 | lib/libwebsockets.c | 2089 +++-------------------- |
| 27 | lib/libwebsockets.h | 253 ++- |
| 28 | lib/lws-plat-unix.c | 404 +++++ |
| 29 | lib/lws-plat-win.c | 358 ++++ |
| 30 | lib/minilex.c | 530 +++--- |
| 31 | lib/output.c | 445 ++--- |
| 32 | lib/parsers.c | 682 ++++---- |
| 33 | lib/pollfd.c | 239 +++ |
| 34 | lib/private-libwebsockets.h | 501 +++++- |
| 35 | lib/server-handshake.c | 274 +-- |
| 36 | lib/server.c | 858 ++++++++-- |
| 37 | lib/service.c | 517 ++++++ |
| 38 | lib/sha-1.c | 38 +- |
| 39 | lib/ssl-http2.c | 78 + |
| 40 | lib/ssl.c | 571 +++++++ |
| 41 | test-server/attack.sh | 101 +- |
| 42 | test-server/test-client.c | 9 +- |
| 43 | test-server/test-echo.c | 17 +- |
| 44 | test-server/test-fraggle.c | 7 - |
| 45 | test-server/test-ping.c | 12 +- |
| 46 | test-server/test-server.c | 330 ++-- |
| 47 | test-server/test.html | 4 +- |
| 48 | win32port/client/client.vcxproj | 259 --- |
| 49 | win32port/client/client.vcxproj.filters | 39 - |
| 50 | .../libwebsocketswin32.vcxproj.filters | 93 - |
| 51 | win32port/server/server.vcxproj | 276 --- |
| 52 | win32port/server/server.vcxproj.filters | 51 - |
| 53 | win32port/win32helpers/gettimeofday.h | 59 +- |
| 54 | win32port/win32helpers/netdb.h | 1 - |
| 55 | win32port/win32helpers/strings.h | 0 |
| 56 | win32port/win32helpers/sys/time.h | 1 - |
| 57 | win32port/win32helpers/unistd.h | 0 |
| 58 | win32port/win32helpers/websock-w32.c | 104 -- |
| 59 | win32port/win32helpers/websock-w32.h | 62 - |
| 60 | win32port/win32port.sln | 100 -- |
| 61 | win32port/zlib/gzio.c | 3 +- |
| 62 | 55 files changed, 6779 insertions(+), 5059 deletions(-) |
| 63 | |
Andy Green | 7900256 | 2013-11-09 11:04:35 +0800 | [diff] [blame] | 64 | |
kapejod | ce64fb0 | 2013-11-19 13:38:16 +0100 | [diff] [blame] | 65 | User api additions |
| 66 | ------------------ |
| 67 | |
| 68 | POST method is supported |
| 69 | |
| 70 | The protocol 0 / HTTP callback can now get two new kinds of callback, |
| 71 | LWS_CALLBACK_HTTP_BODY (in and len are a chunk of the body of the HTTP request) |
| 72 | and LWS_CALLBACK_HTTP_BODY_COMPLETION (the expected amount of body has arrived |
| 73 | and been passed to the user code already). These callbacks are used with the |
| 74 | post method (see the test server for details). |
| 75 | |
| 76 | The period between the HTTP header completion and the completion of the body |
| 77 | processing is protected by a 5s timeout. |
| 78 | |
| 79 | The chunks are stored in a malloc'd buffer of size protocols[0].rx_buffer_size. |
| 80 | |
| 81 | |
James Devine | 5b34c97 | 2013-12-14 11:41:29 +0800 | [diff] [blame] | 82 | New server option you can enable from user code |
| 83 | LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT allows non-SSL connections to |
| 84 | also be accepted on an SSL listening port. It's disabled unless you enable |
| 85 | it explicitly. |
| 86 | |
| 87 | |
Andy Green | 7a13279 | 2013-12-18 09:48:26 +0800 | [diff] [blame] | 88 | Two new callbacks are added in protocols[0] that are optional for allowing |
| 89 | limited thread access to libwebsockets, LWS_CALLBACK_LOCK_POLL and |
| 90 | LWS_CALLBACK_UNLOCK_POLL. |
| 91 | |
| 92 | If you use them, they protect internal and external poll list changes, but if |
| 93 | you want to use external thread access to libwebsocket_callback_on_writable() |
| 94 | you have to implement your locking here even if you don't use external |
| 95 | poll support. |
| 96 | |
| 97 | If you will use another thread for this, take a lot of care about managing |
| 98 | your list of live wsi by doing it from ESTABLISHED and CLOSED callbacks |
| 99 | (with your own locking). |
| 100 | |
Andrew Canaday | 9769f4f | 2014-03-23 13:25:07 +0800 | [diff] [blame] | 101 | If you configure cmake with -DLWS_WITH_LIBEV=1 then the code allowing the libev |
| 102 | eventloop instead of the default poll() one will also be compiled in. But to |
| 103 | use it, you must also set the LWS_SERVER_OPTION_LIBEV flag on the context |
| 104 | creation info struct options member. |
Andy Green | 7a13279 | 2013-12-18 09:48:26 +0800 | [diff] [blame] | 105 | |
Andy Green | c1fdd10 | 2014-07-06 09:56:11 +0800 | [diff] [blame^] | 106 | IPV6 is supported and enabled by default except for Windows, you can disable |
| 107 | the support at build-time by giving -DLWS_IPV6=, and disable use of it even if |
James Devine | 3f13ea2 | 2014-03-24 16:09:25 +0800 | [diff] [blame] | 108 | compiled in by making sure the flag LWS_SERVER_OPTION_DISABLE_IPV6 is set on |
| 109 | the context creation info struct options member. |
| 110 | |
Andy Green | c1fdd10 | 2014-07-06 09:56:11 +0800 | [diff] [blame^] | 111 | You can give LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS option flag to |
| 112 | guarantee the OS CAs will not be used, even if that support was selected at |
| 113 | build-time. |
| 114 | |
| 115 | Optional "token limits" may be enforced by setting the member "token_limits" |
| 116 | in struct lws_context_creation_info to point to a struct lws_token_limits. |
| 117 | NULL means no token limits used for compatibility. |
| 118 | |
Andy Green | 7a13279 | 2013-12-18 09:48:26 +0800 | [diff] [blame] | 119 | |
Andy Green | 7900256 | 2013-11-09 11:04:35 +0800 | [diff] [blame] | 120 | User api changes |
| 121 | ---------------- |
| 122 | |
| 123 | Extra optional argument to libwebsockets_serve_http_file() allows injecion |
| 124 | of HTTP headers into the canned response. Eg, cookies may be added like |
| 125 | that without getting involved in having to send the header by hand. |
| 126 | |
Patrick Gansterer | 148b945 | 2014-02-28 02:31:23 +0100 | [diff] [blame] | 127 | A new info member http_proxy_address may be used at context creation time to |
| 128 | set the http proxy. If non-NULL, it overrides http_proxy environment var. |
Andy Green | 7900256 | 2013-11-09 11:04:35 +0800 | [diff] [blame] | 129 | |
Andy Green | d2ec7ad | 2014-03-15 10:39:29 +0800 | [diff] [blame] | 130 | Cmake supports LWS_SSL_CLIENT_USE_OS_CA_CERTS defaulting to on, which gets |
| 131 | the client to use the OS CA Roots. If you're worried somebody with the |
| 132 | ability to forge for force creation of a client cert from the root CA in |
| 133 | your OS, you should disable this since your selfsigned $0 cert is a lot safer |
| 134 | then... |
| 135 | |
Andy Green | 7900256 | 2013-11-09 11:04:35 +0800 | [diff] [blame] | 136 | |
Andy Green | 81877e6 | 2013-10-26 20:36:08 +0800 | [diff] [blame] | 137 | v1.23-chrome32-firefox24 |
| 138 | ======================== |
| 139 | |
| 140 | Android.mk | 29 + |
| 141 | CMakeLists.txt | 573 ++++++++---- |
| 142 | COPYING | 503 ----------- |
| 143 | INSTALL | 365 -------- |
| 144 | Makefile.am | 13 - |
| 145 | README.build | 371 ++------ |
| 146 | README.coding | 63 ++ |
| 147 | autogen.sh | 1578 --------------------------------- |
| 148 | changelog | 69 ++ |
| 149 | cmake/FindGit.cmake | 163 ++++ |
| 150 | cmake/FindOpenSSLbins.cmake | 15 +- |
| 151 | cmake/UseRPMTools.cmake | 176 ++++ |
| 152 | config.h.cmake | 25 +- |
| 153 | configure.ac | 226 ----- |
| 154 | cross-arm-linux-gnueabihf.cmake | 28 + |
| 155 | lib/Makefile.am | 89 -- |
| 156 | lib/base64-decode.c | 98 +- |
| 157 | lib/client-handshake.c | 123 ++- |
| 158 | lib/client-parser.c | 19 +- |
| 159 | lib/client.c | 145 ++- |
| 160 | lib/daemonize.c | 4 +- |
| 161 | lib/extension.c | 2 +- |
| 162 | lib/getifaddrs.h | 4 +- |
| 163 | lib/handshake.c | 76 +- |
| 164 | lib/libwebsockets.c | 491 ++++++---- |
| 165 | lib/libwebsockets.h | 164 ++-- |
| 166 | lib/output.c | 214 ++++- |
| 167 | lib/parsers.c | 102 +-- |
| 168 | lib/private-libwebsockets.h | 66 +- |
| 169 | lib/server-handshake.c | 5 +- |
| 170 | lib/server.c | 29 +- |
| 171 | lib/sha-1.c | 2 +- |
| 172 | libwebsockets-api-doc.html | 249 +++--- |
| 173 | libwebsockets.pc.in | 11 - |
| 174 | libwebsockets.spec | 14 +- |
| 175 | m4/ignore-me | 2 - |
| 176 | scripts/FindLibWebSockets.cmake | 33 + |
| 177 | scripts/kernel-doc | 1 + |
| 178 | test-server/Makefile.am | 131 --- |
| 179 | test-server/leaf.jpg | Bin 0 -> 2477518 bytes |
| 180 | test-server/test-client.c | 78 +- |
| 181 | test-server/test-echo.c | 33 +- |
| 182 | test-server/test-fraggle.c | 26 +- |
| 183 | test-server/test-ping.c | 15 +- |
| 184 | test-server/test-server.c | 197 +++- |
| 185 | test-server/test.html | 5 +- |
| 186 | win32port/win32helpers/gettimeofday.c | 74 +- |
| 187 | win32port/win32helpers/websock-w32.h | 6 +- |
| 188 | 48 files changed, 2493 insertions(+), 4212 deletions(-) |
| 189 | |
Andy Green | 54cb346 | 2013-02-14 22:23:54 +0800 | [diff] [blame] | 190 | |
| 191 | User api additions |
| 192 | ------------------ |
| 193 | |
| 194 | - You can now call libwebsocket_callback_on_writable() on http connectons, |
| 195 | and get a LWS_CALLBACK_HTTP_WRITEABLE callback, the same way you can |
| 196 | regulate writes with a websocket protocol connection. |
| 197 | |
Andy Green | 2672fb2 | 2013-02-22 09:54:35 +0800 | [diff] [blame] | 198 | - A new member in the context creation parameter struct "ssl_cipher_list" is |
| 199 | added, replacing CIPHERS_LIST_STRING. NULL means use the ssl library |
| 200 | default list of ciphers. |
| 201 | |
Andy Green | 58f214e | 2013-03-09 13:03:53 +0800 | [diff] [blame] | 202 | - Not really an api addition, but libwebsocket_service_fd() will now zero |
| 203 | the revents field of the pollfd it was called with if it handled the |
| 204 | descriptor. So you can tell if it is a non-lws fd by checking revents |
| 205 | after the service call... if it's still nonzero, the descriptor |
| 206 | belongs to you and you need to take care of it. |
| 207 | |
Andy Green | b55451c | 2013-03-16 12:32:27 +0800 | [diff] [blame] | 208 | - libwebsocket_rx_flow_allow_all_protocol(protocol) will unthrottle all |
| 209 | connections with the established protocol. It's designed to be |
| 210 | called from user server code when it sees it can accept more input |
| 211 | and may have throttled connections using the server rx flow apis |
| 212 | while it was unable to accept any other input The user server code |
| 213 | then does not have to try to track while connections it choked, this |
| 214 | will free up all of them in one call. |
| 215 | |
Andy Green | 0c9563b | 2013-06-10 22:54:40 +0800 | [diff] [blame] | 216 | - there's a new, optional callback LWS_CALLBACK_CLOSED_HTTP which gets |
| 217 | called when an HTTP protocol socket closes |
| 218 | |
Andy Green | 96d48fd | 2013-09-18 08:32:55 +0800 | [diff] [blame] | 219 | - for LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION callback, the user_space alloc |
| 220 | has already been done before the callback happens. That means we can |
| 221 | use the user parameter to the callback to contain the user pointer, and |
| 222 | move the protocol name to the "in" parameter. The docs for this |
| 223 | callback are also updated to reflect how to check headers in there. |
| 224 | |
Andy Green | 5dc62ea | 2013-09-20 20:26:12 +0800 | [diff] [blame] | 225 | - libwebsocket_client_connect() is now properly nonblocking and async. See |
| 226 | README.coding and test-client.c for information on the callbacks you |
| 227 | can rely on controlling the async connection period with. |
| 228 | |
Andy Green | 81877e6 | 2013-10-26 20:36:08 +0800 | [diff] [blame] | 229 | - if your OS does not support the http_proxy environment variable convention |
| 230 | (eg, reportedly OSX), you can use a new api libwebsocket_set_proxy() |
| 231 | to set the proxy details inbetween context creation and the connection |
| 232 | action. For OSes that support http_proxy, that's used automatically. |
Andy Green | b55451c | 2013-03-16 12:32:27 +0800 | [diff] [blame] | 233 | |
Andy Green | 50097dd | 2013-02-15 22:36:30 +0800 | [diff] [blame] | 234 | User api changes |
| 235 | ---------------- |
| 236 | |
| 237 | - the external poll callbacks now get the socket descriptor coming from the |
| 238 | "in" parameter. The user parameter provides the user_space for the |
| 239 | wsi as it normally does on the other callbacks. |
Edwin van den Oetelaar | 8c8a8e1 | 2013-02-20 20:56:59 +0800 | [diff] [blame] | 240 | LWS_CALLBACK_FILTER_NETWORK_CONNECTION also has the socket descriptor |
| 241 | delivered by @in now instead of @user. |
Andy Green | 50097dd | 2013-02-15 22:36:30 +0800 | [diff] [blame] | 242 | |
Andy Green | fc7c5e4 | 2013-02-23 10:50:10 +0800 | [diff] [blame] | 243 | - libwebsocket_write() now returns -1 for error, or the amount of data |
| 244 | actually accepted for send. Under load, the OS may signal it is |
| 245 | ready to send new data on the socket, but have only a restricted |
| 246 | amount of memory to buffer the packet compared to usual. |
| 247 | |
Andy Green | 50097dd | 2013-02-15 22:36:30 +0800 | [diff] [blame] | 248 | |
Andy Green | dc914cf | 2013-02-18 16:54:26 +0800 | [diff] [blame] | 249 | User api removal |
| 250 | ---------------- |
| 251 | |
| 252 | - libwebsocket_ensure_user_space() is removed from the public api, if you |
| 253 | were using it to get user_space, you need to adapt your code to only |
| 254 | use user_space inside the user callback. |
| 255 | |
Andy Green | 2672fb2 | 2013-02-22 09:54:35 +0800 | [diff] [blame] | 256 | - CIPHERS_LIST_STRING is removed |
| 257 | |
Andy Green | 0097a99 | 2013-03-09 13:06:37 +0800 | [diff] [blame] | 258 | - autotools build has been removed. See README.build for info on how to |
| 259 | use CMake for your platform |
| 260 | |
Andy Green | 54cb346 | 2013-02-14 22:23:54 +0800 | [diff] [blame] | 261 | |
Andy Green | 53a4678 | 2013-02-14 11:23:49 +0800 | [diff] [blame] | 262 | v1.21-chrome26-firefox18 |
| 263 | ======================== |
| 264 | |
| 265 | - Fixes buffer overflow bug in max frame size handling if you used the |
| 266 | default protocol buffer size. If you declared rx_buffer_size in your |
| 267 | protocol, which is recommended anyway, your code was unaffected. |
| 268 | |
Andy Green | 182cb9a | 2013-02-13 11:54:08 +0800 | [diff] [blame] | 269 | v1.2-chrome26-firefox18 |
| 270 | ======================= |
| 271 | |
| 272 | Diffstat |
| 273 | -------- |
| 274 | |
| 275 | .gitignore | 16 +++ |
| 276 | CMakeLists.txt | 544 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| 277 | LICENSE | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| 278 | Makefile.am | 1 + |
| 279 | README | 20 +++ |
| 280 | README.build | 258 ++++++++++++++++++++++++++++++++----- |
| 281 | README.coding | 52 ++++++++ |
| 282 | changelog | 136 ++++++++++++++++++++ |
| 283 | cmake/FindOpenSSLbins.cmake | 33 +++++ |
| 284 | config.h.cmake | 173 +++++++++++++++++++++++++ |
| 285 | configure.ac | 22 +++- |
| 286 | lib/Makefile.am | 20 ++- |
| 287 | lib/base64-decode.c | 2 +- |
| 288 | lib/client-handshake.c | 190 +++++++++++----------------- |
| 289 | lib/client-parser.c | 88 +++++++------ |
| 290 | lib/client.c | 384 ++++++++++++++++++++++++++++++------------------------- |
| 291 | lib/daemonize.c | 32 +++-- |
| 292 | lib/extension-deflate-frame.c | 58 +++++---- |
| 293 | lib/extension-deflate-stream.c | 19 ++- |
| 294 | lib/extension-deflate-stream.h | 4 +- |
| 295 | lib/extension.c | 11 +- |
| 296 | lib/getifaddrs.c | 315 +++++++++++++++++++++++----------------------- |
| 297 | lib/getifaddrs.h | 30 ++--- |
| 298 | lib/handshake.c | 124 +++++++++++------- |
| 299 | lib/libwebsockets.c | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------- |
| 300 | lib/libwebsockets.h | 237 ++++++++++++++++++++++------------ |
| 301 | lib/output.c | 192 +++++++++++----------------- |
| 302 | lib/parsers.c | 966 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------- |
| 303 | lib/private-libwebsockets.h | 225 +++++++++++++++++++++------------ |
| 304 | lib/server-handshake.c | 82 ++++++------ |
| 305 | lib/server.c | 96 +++++++------- |
| 306 | libwebsockets-api-doc.html | 189 ++++++++++++++++++---------- |
| 307 | libwebsockets.spec | 17 +-- |
| 308 | test-server/attack.sh | 148 ++++++++++++++++++++++ |
| 309 | test-server/test-client.c | 125 +++++++++--------- |
| 310 | test-server/test-echo.c | 31 +++-- |
| 311 | test-server/test-fraggle.c | 32 ++--- |
| 312 | test-server/test-ping.c | 52 ++++---- |
| 313 | test-server/test-server.c | 129 ++++++++++++------- |
| 314 | win32port/libwebsocketswin32/libwebsocketswin32.vcxproj | 279 ---------------------------------------- |
| 315 | win32port/libwebsocketswin32/libwebsocketswin32.vcxproj.filters | 23 +++- |
| 316 | 41 files changed, 4398 insertions(+), 2219 deletions(-) |
| 317 | |
Andy Green | 7b40545 | 2013-02-01 10:50:15 +0800 | [diff] [blame] | 318 | |
| 319 | User api additions |
| 320 | ------------------ |
| 321 | |
| 322 | - lws_get_library_version() returns a const char * with a string like |
| 323 | "1.1 9e7f737", representing the library version from configure.ac |
| 324 | and the git HEAD hash the library was built from |
| 325 | |
Andy Green | a47865f | 2013-02-10 09:39:47 +0800 | [diff] [blame] | 326 | - TCP Keepalive can now optionally be applied to all lws sockets, on Linux |
| 327 | also with controllable timeout, number of probes and probe interval. |
| 328 | (On BSD type OS, you can only use system default settings for the |
| 329 | timing and retries, although enabling it is supported by setting |
| 330 | ka_time to nonzero, the exact value has no meaning.) |
| 331 | This enables detection of idle connections which are logically okay, |
| 332 | but are in fact dead, due to network connectivity issues at the server, |
Andy Green | a690cd0 | 2013-02-09 12:25:31 +0800 | [diff] [blame] | 333 | client, or any intermediary. By default it's not enabled, but you |
| 334 | can enable it by setting a non-zero timeout (in seconds) at the new |
| 335 | ka_time member at context creation time. |
| 336 | |
Andy Green | a7109e6 | 2013-02-11 12:05:54 +0800 | [diff] [blame] | 337 | - Two new optional user callbacks added, LWS_CALLBACK_PROTOCOL_DESTROY which |
| 338 | is called one-time per protocol as the context is being destroyed, and |
| 339 | LWS_CALLBACK_PROTOCOL_INIT which is called when the context is created |
| 340 | and the protocols are added, again it's a one-time affair. |
| 341 | This lets you manage per-protocol allocations properly including |
| 342 | cleaning up after yourself when the server goes down. |
Andy Green | 7b40545 | 2013-02-01 10:50:15 +0800 | [diff] [blame] | 343 | |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 344 | User api changes |
| 345 | ---------------- |
| 346 | |
Andy Green | 1b26527 | 2013-02-09 14:01:09 +0800 | [diff] [blame] | 347 | - libwebsocket_create_context() has changed from taking a ton of parameters |
| 348 | to just taking a pointer to a struct containing the parameters. The |
| 349 | struct lws_context_creation_info is in libwebsockets.h, the members |
| 350 | are in the same order as when they were parameters to the call |
| 351 | previously. The test apps are all updated accordingly so you can |
| 352 | see example code there. |
| 353 | |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 354 | - Header tokens are now deleted after the websocket connection is |
Andy Green | 5449511 | 2013-02-06 21:10:16 +0900 | [diff] [blame] | 355 | established. Not just the header data is saved, but the pointer and |
| 356 | length array is also removed from (union) scope saving several hundred |
| 357 | bytes per connection once it is established |
| 358 | |
| 359 | - struct libwebsocket_protocols has a new member rx_buffer_size, this |
| 360 | controls rx buffer size per connection of that protocol now. Sources |
| 361 | for apps built against older versions of the library won't declare |
| 362 | this in their protocols, defaulting it to 0. Zero buffer is legal, |
| 363 | it causes a default buffer to be allocated (currently 4096) |
| 364 | |
| 365 | If you want to receive only atomic frames in your user callback, you |
| 366 | should set this to greater than your largest frame size. If a frame |
| 367 | comes that exceeds that, no error occurs but the callback happens as |
| 368 | soon as the buffer limit is reached, and again if it is reached again |
| 369 | or the frame completes. You can detect that has happened by seeing |
| 370 | there is still frame content pending using |
| 371 | libwebsockets_remaining_packet_payload() |
| 372 | |
| 373 | By correctly setting this, you can save a lot of memory when your |
| 374 | protocol has small frames (see the test server and client sources). |
| 375 | |
Andy Green | 16ab318 | 2013-02-10 18:02:31 +0800 | [diff] [blame] | 376 | - LWS_MAX_HEADER_LEN now defaults to 1024 and is the total amount of known |
| 377 | header payload lws can cope with, that includes the GET URL, origin |
| 378 | etc. Headers not understood by lws are ignored and their payload |
| 379 | not included in this. |
| 380 | |
Andy Green | 5449511 | 2013-02-06 21:10:16 +0900 | [diff] [blame] | 381 | |
| 382 | User api removals |
| 383 | ----------------- |
| 384 | |
Andy Green | 16ab318 | 2013-02-10 18:02:31 +0800 | [diff] [blame] | 385 | - The configuration-time option MAX_USER_RX_BUFFER has been replaced by a |
| 386 | buffer size chosen per-protocol. For compatibility, there's a default |
| 387 | of 4096 rx buffer, but user code should set the appropriate size for |
| 388 | the protocol frames. |
| 389 | |
| 390 | - LWS_INITIAL_HDR_ALLOC and LWS_ADDITIONAL_HDR_ALLOC are no longer needed |
| 391 | and have been removed. There's a new header management scheme that |
| 392 | handles them in a much more compact way. |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 393 | |
Andy Green | 70edd6f | 2013-02-12 10:15:25 +0800 | [diff] [blame] | 394 | - libwebsockets_hangup_on_client() is removed. If you want to close the |
| 395 | connection you must do so from the user callback and by returning |
| 396 | -1 from there. |
| 397 | |
Andy Green | 508946c | 2013-02-12 10:19:08 +0800 | [diff] [blame] | 398 | - libwebsocket_close_and_free_session() is now private to the library code |
| 399 | only and not exposed for user code. If you want to close the |
| 400 | connection, you must do so from the user callback by returning -1 |
| 401 | from there. |
| 402 | |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 403 | |
Andy Green | df60b0c | 2013-02-06 19:57:12 +0900 | [diff] [blame] | 404 | New features |
| 405 | ------------ |
| 406 | |
Andy Green | 9b09dc0 | 2013-02-08 12:48:36 +0800 | [diff] [blame] | 407 | - Cmake project file added, aimed initially at Windows support: this replaces |
Andy Green | 16ab318 | 2013-02-10 18:02:31 +0800 | [diff] [blame] | 408 | the visual studio project files that were in the tree until now. |
Andy Green | df60b0c | 2013-02-06 19:57:12 +0900 | [diff] [blame] | 409 | |
Andy Green | c3ef0d6 | 2013-02-12 10:50:49 +0800 | [diff] [blame] | 410 | - CyaSSL now supported in place of OpenSSL (--use-cyassl on configure) |
| 411 | |
Andy Green | 9b09dc0 | 2013-02-08 12:48:36 +0800 | [diff] [blame] | 412 | - PATH_MAX or MAX_PATH no longer needed |
Andy Green | df60b0c | 2013-02-06 19:57:12 +0900 | [diff] [blame] | 413 | |
Andy Green | 5449511 | 2013-02-06 21:10:16 +0900 | [diff] [blame] | 414 | - cutomizable frame rx buffer size by protocol |
| 415 | |
Andy Green | c3ef0d6 | 2013-02-12 10:50:49 +0800 | [diff] [blame] | 416 | - optional TCP keepalive so dead peers can be detected, can be enabled at |
| 417 | context-creation time |
| 418 | |
| 419 | - valgrind-clean: no SSL or CyaSSL: completely clean. With OpenSSL, 88 bytes |
| 420 | lost at OpenSSL library init and symptomless reports of uninitialized |
| 421 | memory usage... seems to be a known and ignored problem at OpenSSL |
| 422 | |
Andy Green | a3957ef | 2013-02-11 09:31:43 +0800 | [diff] [blame] | 423 | - By default debug is enabled and the library is built for -O0 -g to faclitate |
| 424 | that. Use --disable-debug configure option to build instead with -O4 |
| 425 | and no -g (debug info), obviously providing best performance and |
| 426 | reduced binary size. |
Andy Green | 7b40545 | 2013-02-01 10:50:15 +0800 | [diff] [blame] | 427 | |
Andy Green | 895d56d | 2013-02-11 09:32:53 +0800 | [diff] [blame] | 428 | - 1.0 introduced some code to try to not deflate small frames, however this |
| 429 | seems to break when confronted with a mixture of frames above and |
| 430 | below the threshold, so it's removed. Veto the compression extension |
| 431 | in your user callback if you will typically have very small frames. |
| 432 | |
Andy Green | 16ab318 | 2013-02-10 18:02:31 +0800 | [diff] [blame] | 433 | - There are many memory usage improvements, both a reduction in malloc/ |
| 434 | realloc and architectural changes. A websocket connection now |
| 435 | consumes only 296 bytes with SSL or 272 bytes without on x86_64, |
| 436 | during header processing an additional 1262 bytes is allocated in a |
| 437 | single malloc, but is freed when the websocket connection starts. |
| 438 | The RX frame buffer defined by the protocol in user |
| 439 | code is also allocated per connection, this represents the largest |
| 440 | frame you can receive atomically in that protocol. |
| 441 | |
Andy Green | c3ef0d6 | 2013-02-12 10:50:49 +0800 | [diff] [blame] | 442 | - On ARM9 build, just http+ws server no extensions or ssl, <12Kbytes .text |
| 443 | and 112 bytes per connection (+1328 only during header processing) |
| 444 | |
Andy Green | 895d56d | 2013-02-11 09:32:53 +0800 | [diff] [blame] | 445 | |
Andy Green | bd1132f | 2013-01-31 19:53:05 +0800 | [diff] [blame] | 446 | v1.1-chrome26-firefox18 |
Andy Green | a35c86f | 2013-01-31 10:16:44 +0800 | [diff] [blame] | 447 | ======================= |
| 448 | |
| 449 | Diffstat |
| 450 | -------- |
| 451 | |
| 452 | Makefile.am | 4 + |
| 453 | README-test-server | 291 --- |
| 454 | README.build | 239 ++ |
| 455 | README.coding | 138 ++ |
| 456 | README.rst | 72 - |
| 457 | README.test-apps | 272 +++ |
| 458 | configure.ac | 116 +- |
| 459 | lib/Makefile.am | 55 +- |
| 460 | lib/base64-decode.c | 5 +- |
| 461 | lib/client-handshake.c | 121 +- |
| 462 | lib/client-parser.c | 394 ++++ |
| 463 | lib/client.c | 807 +++++++ |
| 464 | lib/daemonize.c | 212 ++ |
| 465 | lib/extension-deflate-frame.c | 132 +- |
| 466 | lib/extension-deflate-stream.c | 12 +- |
| 467 | lib/extension-x-google-mux.c | 1223 ---------- |
| 468 | lib/extension-x-google-mux.h | 96 - |
| 469 | lib/extension.c | 8 - |
| 470 | lib/getifaddrs.c | 271 +++ |
| 471 | lib/getifaddrs.h | 76 + |
| 472 | lib/handshake.c | 582 +---- |
| 473 | lib/libwebsockets.c | 2493 ++++++--------------- |
| 474 | lib/libwebsockets.h | 115 +- |
| 475 | lib/md5.c | 217 -- |
| 476 | lib/minilex.c | 440 ++++ |
| 477 | lib/output.c | 628 ++++++ |
| 478 | lib/parsers.c | 2016 +++++------------ |
| 479 | lib/private-libwebsockets.h | 284 +-- |
| 480 | lib/server-handshake.c | 275 +++ |
| 481 | lib/server.c | 377 ++++ |
| 482 | libwebsockets-api-doc.html | 300 +-- |
| 483 | m4/ignore-me | 2 + |
| 484 | test-server/Makefile.am | 111 +- |
| 485 | test-server/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes |
| 486 | test-server/test-client.c | 45 +- |
| 487 | test-server/test-echo.c | 330 +++ |
| 488 | test-server/test-fraggle.c | 20 +- |
| 489 | test-server/test-ping.c | 22 +- |
| 490 | test-server/test-server-extpoll.c | 554 ----- |
| 491 | test-server/test-server.c | 349 ++- |
| 492 | test-server/test.html | 3 +- |
| 493 | win32port/zlib/ZLib.vcxproj | 749 ++++--- |
| 494 | win32port/zlib/ZLib.vcxproj.filters | 188 +- |
| 495 | win32port/zlib/adler32.c | 348 ++- |
| 496 | win32port/zlib/compress.c | 160 +- |
| 497 | win32port/zlib/crc32.c | 867 ++++---- |
| 498 | win32port/zlib/crc32.h | 882 ++++---- |
| 499 | win32port/zlib/deflate.c | 3799 +++++++++++++++----------------- |
| 500 | win32port/zlib/deflate.h | 688 +++--- |
| 501 | win32port/zlib/gzclose.c | 50 +- |
| 502 | win32port/zlib/gzguts.h | 325 ++- |
| 503 | win32port/zlib/gzlib.c | 1157 +++++----- |
| 504 | win32port/zlib/gzread.c | 1242 ++++++----- |
| 505 | win32port/zlib/gzwrite.c | 1096 +++++---- |
| 506 | win32port/zlib/infback.c | 1272 ++++++----- |
| 507 | win32port/zlib/inffast.c | 680 +++--- |
| 508 | win32port/zlib/inffast.h | 22 +- |
| 509 | win32port/zlib/inffixed.h | 188 +- |
| 510 | win32port/zlib/inflate.c | 2976 +++++++++++++------------ |
| 511 | win32port/zlib/inflate.h | 244 +- |
| 512 | win32port/zlib/inftrees.c | 636 +++--- |
| 513 | win32port/zlib/inftrees.h | 124 +- |
| 514 | win32port/zlib/trees.c | 2468 +++++++++++---------- |
| 515 | win32port/zlib/trees.h | 256 +-- |
| 516 | win32port/zlib/uncompr.c | 118 +- |
| 517 | win32port/zlib/zconf.h | 934 ++++---- |
| 518 | win32port/zlib/zlib.h | 3357 ++++++++++++++-------------- |
| 519 | win32port/zlib/zutil.c | 642 +++--- |
| 520 | win32port/zlib/zutil.h | 526 ++--- |
| 521 | 69 files changed, 19556 insertions(+), 20145 deletions(-) |
| 522 | |
| 523 | user api changes |
| 524 | ---------------- |
| 525 | |
| 526 | - libwebsockets_serve_http_file() now takes a context as first argument |
| 527 | |
| 528 | - libwebsockets_get_peer_addresses() now takes a context and wsi as first |
| 529 | two arguments |
| 530 | |
| 531 | |
| 532 | user api additions |
| 533 | ------------------ |
| 534 | |
| 535 | - lwsl_...() logging apis, default to stderr but retargetable by user code; |
| 536 | may be used also by user code |
| 537 | |
| 538 | - lws_set_log_level() set which logging apis are able to emit (defaults to |
| 539 | notice, warn, err severities), optionally set the emit callback |
| 540 | |
| 541 | - lwsl_emit_syslog() helper callback emits to syslog |
| 542 | |
| 543 | - lws_daemonize() helper code that forks the app into a headless daemon |
| 544 | properly, maintains a lock file with pid in suitable for sysvinit etc to |
| 545 | control lifecycle |
| 546 | |
| 547 | - LWS_CALLBACK_HTTP_FILE_COMPLETION callback added since http file |
| 548 | transfer is now asynchronous (see test server code) |
| 549 | |
| 550 | - lws_frame_is_binary() from a wsi pointer, let you know if the received |
| 551 | data was sent in BINARY mode |
| 552 | |
| 553 | |
| 554 | user api removals |
| 555 | ----------------- |
| 556 | |
| 557 | - libwebsockets_fork_service_loop() - no longer supported (had intractable problems) |
| 558 | arrange your code to act from the user callback instead from same |
| 559 | process context as the service loop |
| 560 | |
| 561 | - libwebsockets_broadcast() - use libwebsocket_callback_on_writable[_all_protocol]() |
| 562 | instead from same process context as the service loop. See the test apps |
| 563 | for examples. |
| 564 | |
| 565 | - x-google-mux() removed until someone wants it |
| 566 | |
| 567 | - pre -v13 (ancient) protocol support removed |
| 568 | |
| 569 | |
| 570 | New features |
| 571 | ------------ |
| 572 | |
| 573 | - echo test server and client compatible with echo.websocket.org added |
| 574 | |
| 575 | - many new configure options (see README.build) to reduce footprint of the |
| 576 | library to what you actually need, eg, --without-client and |
| 577 | --without-server |
| 578 | |
| 579 | - http + websocket server can build to as little as 12K .text for ARM |
| 580 | |
| 581 | - no more MAX_CLIENTS limitation; adapts to support the max number of fds |
| 582 | allowed to the process by ulimit, defaults to 1024 on Fedora and |
| 583 | Ubuntu. Use ulimit to control this without needing to configure |
| 584 | the library. Code here is smaller and faster. |
| 585 | |
| 586 | - adaptive ratio of listen socket to connection socket service allows |
| 587 | good behaviour under Apache ab test load. Tested with thousands |
| 588 | of simultaneous connections |
| 589 | |
| 590 | - reduction in per-connection memory footprint by moving to a union to hold |
| 591 | mutually-exclusive state for the connection |
| 592 | |
| 593 | - robustness: Out of Memory taken care of for all allocation code now |
| 594 | |
| 595 | - internal getifaddrs option if your toolchain lacks it (some uclibc) |
| 596 | |
| 597 | - configurable memory limit for deflate operations |
| 598 | |
| 599 | - improvements in SSL code nonblocking operation, possible hang solved, |
| 600 | some SSL operations broken down into pollable states so there is |
| 601 | no library blocking, timeout coverage for SSL_connect |
| 602 | |
| 603 | - extpoll test server merged into single test server source |
| 604 | |
| 605 | - robustness: library should deal with all recoverable socket conditions |
| 606 | |
| 607 | - rx flowcontrol for backpressure notification fixed and implmeneted |
| 608 | correctly in the test server |
| 609 | |
| 610 | - optimal lexical parser added for header processing; all headers in a |
| 611 | single 276-byte state table |
| 612 | |
| 613 | - latency tracking api added (configure --with-latency) |
| 614 | |
| 615 | - Improved in-tree documentation, REAME.build, README.coding, |
| 616 | README.test-apps, changelog |
| 617 | |
| 618 | - Many small fixes |
| 619 | |
| 620 | |
| 621 | v1.0-chrome25-firefox17 (6cd1ea9b005933f) |