Andy Green | a35c86f | 2013-01-31 10:16:44 +0800 | [diff] [blame] | 1 | Changelog |
| 2 | --------- |
| 3 | |
Andy Green | 7b40545 | 2013-02-01 10:50:15 +0800 | [diff] [blame] | 4 | (development since 1.1....) |
| 5 | |
| 6 | User api additions |
| 7 | ------------------ |
| 8 | |
| 9 | - lws_get_library_version() returns a const char * with a string like |
| 10 | "1.1 9e7f737", representing the library version from configure.ac |
| 11 | and the git HEAD hash the library was built from |
| 12 | |
Andy Green | a690cd0 | 2013-02-09 12:25:31 +0800 | [diff] [blame^] | 13 | - TCP Keepalive can now optionally be applied to all lws sockets, with |
| 14 | controllable timeout, number of probes and probe interval. This |
| 15 | enables detection of idle connections which are logically okay, but |
| 16 | are in fact dead, due to network connectivity issues at the server, |
| 17 | client, or any intermediary. By default it's not enabled, but you |
| 18 | can enable it by setting a non-zero timeout (in seconds) at the new |
| 19 | ka_time member at context creation time. |
| 20 | |
Andy Green | 7b40545 | 2013-02-01 10:50:15 +0800 | [diff] [blame] | 21 | |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 22 | User api changes |
| 23 | ---------------- |
| 24 | |
Andy Green | 1b26527 | 2013-02-09 14:01:09 +0800 | [diff] [blame] | 25 | - libwebsocket_create_context() has changed from taking a ton of parameters |
| 26 | to just taking a pointer to a struct containing the parameters. The |
| 27 | struct lws_context_creation_info is in libwebsockets.h, the members |
| 28 | are in the same order as when they were parameters to the call |
| 29 | previously. The test apps are all updated accordingly so you can |
| 30 | see example code there. |
| 31 | |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 32 | - Header tokens are now deleted after the websocket connection is |
Andy Green | 5449511 | 2013-02-06 21:10:16 +0900 | [diff] [blame] | 33 | established. Not just the header data is saved, but the pointer and |
| 34 | length array is also removed from (union) scope saving several hundred |
| 35 | bytes per connection once it is established |
| 36 | |
| 37 | - struct libwebsocket_protocols has a new member rx_buffer_size, this |
| 38 | controls rx buffer size per connection of that protocol now. Sources |
| 39 | for apps built against older versions of the library won't declare |
| 40 | this in their protocols, defaulting it to 0. Zero buffer is legal, |
| 41 | it causes a default buffer to be allocated (currently 4096) |
| 42 | |
| 43 | If you want to receive only atomic frames in your user callback, you |
| 44 | should set this to greater than your largest frame size. If a frame |
| 45 | comes that exceeds that, no error occurs but the callback happens as |
| 46 | soon as the buffer limit is reached, and again if it is reached again |
| 47 | or the frame completes. You can detect that has happened by seeing |
| 48 | there is still frame content pending using |
| 49 | libwebsockets_remaining_packet_payload() |
| 50 | |
| 51 | By correctly setting this, you can save a lot of memory when your |
| 52 | protocol has small frames (see the test server and client sources). |
| 53 | |
| 54 | |
| 55 | User api removals |
| 56 | ----------------- |
| 57 | |
| 58 | The configuration-time option MAX_USER_RX_BUFFER has been replaced by a |
| 59 | buffer size chosen per-protocol. For compatibility, there's a default of |
| 60 | 4096 rx buffer, but user code should set the appropriate size for the |
| 61 | protocol frames. |
Andy Green | ed33446 | 2013-02-07 21:14:33 +0800 | [diff] [blame] | 62 | |
| 63 | |
Andy Green | df60b0c | 2013-02-06 19:57:12 +0900 | [diff] [blame] | 64 | New features |
| 65 | ------------ |
| 66 | |
Andy Green | 9b09dc0 | 2013-02-08 12:48:36 +0800 | [diff] [blame] | 67 | - Cmake project file added, aimed initially at Windows support: this replaces |
Andy Green | df60b0c | 2013-02-06 19:57:12 +0900 | [diff] [blame] | 68 | the visual studio project files that were in the tree until now. |
| 69 | |
Andy Green | 9b09dc0 | 2013-02-08 12:48:36 +0800 | [diff] [blame] | 70 | - PATH_MAX or MAX_PATH no longer needed |
Andy Green | df60b0c | 2013-02-06 19:57:12 +0900 | [diff] [blame] | 71 | |
Andy Green | 5449511 | 2013-02-06 21:10:16 +0900 | [diff] [blame] | 72 | - cutomizable frame rx buffer size by protocol |
| 73 | |
| 74 | |
Andy Green | 7b40545 | 2013-02-01 10:50:15 +0800 | [diff] [blame] | 75 | |
Andy Green | bd1132f | 2013-01-31 19:53:05 +0800 | [diff] [blame] | 76 | v1.1-chrome26-firefox18 |
Andy Green | a35c86f | 2013-01-31 10:16:44 +0800 | [diff] [blame] | 77 | ======================= |
| 78 | |
| 79 | Diffstat |
| 80 | -------- |
| 81 | |
| 82 | Makefile.am | 4 + |
| 83 | README-test-server | 291 --- |
| 84 | README.build | 239 ++ |
| 85 | README.coding | 138 ++ |
| 86 | README.rst | 72 - |
| 87 | README.test-apps | 272 +++ |
| 88 | configure.ac | 116 +- |
| 89 | lib/Makefile.am | 55 +- |
| 90 | lib/base64-decode.c | 5 +- |
| 91 | lib/client-handshake.c | 121 +- |
| 92 | lib/client-parser.c | 394 ++++ |
| 93 | lib/client.c | 807 +++++++ |
| 94 | lib/daemonize.c | 212 ++ |
| 95 | lib/extension-deflate-frame.c | 132 +- |
| 96 | lib/extension-deflate-stream.c | 12 +- |
| 97 | lib/extension-x-google-mux.c | 1223 ---------- |
| 98 | lib/extension-x-google-mux.h | 96 - |
| 99 | lib/extension.c | 8 - |
| 100 | lib/getifaddrs.c | 271 +++ |
| 101 | lib/getifaddrs.h | 76 + |
| 102 | lib/handshake.c | 582 +---- |
| 103 | lib/libwebsockets.c | 2493 ++++++--------------- |
| 104 | lib/libwebsockets.h | 115 +- |
| 105 | lib/md5.c | 217 -- |
| 106 | lib/minilex.c | 440 ++++ |
| 107 | lib/output.c | 628 ++++++ |
| 108 | lib/parsers.c | 2016 +++++------------ |
| 109 | lib/private-libwebsockets.h | 284 +-- |
| 110 | lib/server-handshake.c | 275 +++ |
| 111 | lib/server.c | 377 ++++ |
| 112 | libwebsockets-api-doc.html | 300 +-- |
| 113 | m4/ignore-me | 2 + |
| 114 | test-server/Makefile.am | 111 +- |
| 115 | test-server/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes |
| 116 | test-server/test-client.c | 45 +- |
| 117 | test-server/test-echo.c | 330 +++ |
| 118 | test-server/test-fraggle.c | 20 +- |
| 119 | test-server/test-ping.c | 22 +- |
| 120 | test-server/test-server-extpoll.c | 554 ----- |
| 121 | test-server/test-server.c | 349 ++- |
| 122 | test-server/test.html | 3 +- |
| 123 | win32port/zlib/ZLib.vcxproj | 749 ++++--- |
| 124 | win32port/zlib/ZLib.vcxproj.filters | 188 +- |
| 125 | win32port/zlib/adler32.c | 348 ++- |
| 126 | win32port/zlib/compress.c | 160 +- |
| 127 | win32port/zlib/crc32.c | 867 ++++---- |
| 128 | win32port/zlib/crc32.h | 882 ++++---- |
| 129 | win32port/zlib/deflate.c | 3799 +++++++++++++++----------------- |
| 130 | win32port/zlib/deflate.h | 688 +++--- |
| 131 | win32port/zlib/gzclose.c | 50 +- |
| 132 | win32port/zlib/gzguts.h | 325 ++- |
| 133 | win32port/zlib/gzlib.c | 1157 +++++----- |
| 134 | win32port/zlib/gzread.c | 1242 ++++++----- |
| 135 | win32port/zlib/gzwrite.c | 1096 +++++---- |
| 136 | win32port/zlib/infback.c | 1272 ++++++----- |
| 137 | win32port/zlib/inffast.c | 680 +++--- |
| 138 | win32port/zlib/inffast.h | 22 +- |
| 139 | win32port/zlib/inffixed.h | 188 +- |
| 140 | win32port/zlib/inflate.c | 2976 +++++++++++++------------ |
| 141 | win32port/zlib/inflate.h | 244 +- |
| 142 | win32port/zlib/inftrees.c | 636 +++--- |
| 143 | win32port/zlib/inftrees.h | 124 +- |
| 144 | win32port/zlib/trees.c | 2468 +++++++++++---------- |
| 145 | win32port/zlib/trees.h | 256 +-- |
| 146 | win32port/zlib/uncompr.c | 118 +- |
| 147 | win32port/zlib/zconf.h | 934 ++++---- |
| 148 | win32port/zlib/zlib.h | 3357 ++++++++++++++-------------- |
| 149 | win32port/zlib/zutil.c | 642 +++--- |
| 150 | win32port/zlib/zutil.h | 526 ++--- |
| 151 | 69 files changed, 19556 insertions(+), 20145 deletions(-) |
| 152 | |
| 153 | user api changes |
| 154 | ---------------- |
| 155 | |
| 156 | - libwebsockets_serve_http_file() now takes a context as first argument |
| 157 | |
| 158 | - libwebsockets_get_peer_addresses() now takes a context and wsi as first |
| 159 | two arguments |
| 160 | |
| 161 | |
| 162 | user api additions |
| 163 | ------------------ |
| 164 | |
| 165 | - lwsl_...() logging apis, default to stderr but retargetable by user code; |
| 166 | may be used also by user code |
| 167 | |
| 168 | - lws_set_log_level() set which logging apis are able to emit (defaults to |
| 169 | notice, warn, err severities), optionally set the emit callback |
| 170 | |
| 171 | - lwsl_emit_syslog() helper callback emits to syslog |
| 172 | |
| 173 | - lws_daemonize() helper code that forks the app into a headless daemon |
| 174 | properly, maintains a lock file with pid in suitable for sysvinit etc to |
| 175 | control lifecycle |
| 176 | |
| 177 | - LWS_CALLBACK_HTTP_FILE_COMPLETION callback added since http file |
| 178 | transfer is now asynchronous (see test server code) |
| 179 | |
| 180 | - lws_frame_is_binary() from a wsi pointer, let you know if the received |
| 181 | data was sent in BINARY mode |
| 182 | |
| 183 | |
| 184 | user api removals |
| 185 | ----------------- |
| 186 | |
| 187 | - libwebsockets_fork_service_loop() - no longer supported (had intractable problems) |
| 188 | arrange your code to act from the user callback instead from same |
| 189 | process context as the service loop |
| 190 | |
| 191 | - libwebsockets_broadcast() - use libwebsocket_callback_on_writable[_all_protocol]() |
| 192 | instead from same process context as the service loop. See the test apps |
| 193 | for examples. |
| 194 | |
| 195 | - x-google-mux() removed until someone wants it |
| 196 | |
| 197 | - pre -v13 (ancient) protocol support removed |
| 198 | |
| 199 | |
| 200 | New features |
| 201 | ------------ |
| 202 | |
| 203 | - echo test server and client compatible with echo.websocket.org added |
| 204 | |
| 205 | - many new configure options (see README.build) to reduce footprint of the |
| 206 | library to what you actually need, eg, --without-client and |
| 207 | --without-server |
| 208 | |
| 209 | - http + websocket server can build to as little as 12K .text for ARM |
| 210 | |
| 211 | - no more MAX_CLIENTS limitation; adapts to support the max number of fds |
| 212 | allowed to the process by ulimit, defaults to 1024 on Fedora and |
| 213 | Ubuntu. Use ulimit to control this without needing to configure |
| 214 | the library. Code here is smaller and faster. |
| 215 | |
| 216 | - adaptive ratio of listen socket to connection socket service allows |
| 217 | good behaviour under Apache ab test load. Tested with thousands |
| 218 | of simultaneous connections |
| 219 | |
| 220 | - reduction in per-connection memory footprint by moving to a union to hold |
| 221 | mutually-exclusive state for the connection |
| 222 | |
| 223 | - robustness: Out of Memory taken care of for all allocation code now |
| 224 | |
| 225 | - internal getifaddrs option if your toolchain lacks it (some uclibc) |
| 226 | |
| 227 | - configurable memory limit for deflate operations |
| 228 | |
| 229 | - improvements in SSL code nonblocking operation, possible hang solved, |
| 230 | some SSL operations broken down into pollable states so there is |
| 231 | no library blocking, timeout coverage for SSL_connect |
| 232 | |
| 233 | - extpoll test server merged into single test server source |
| 234 | |
| 235 | - robustness: library should deal with all recoverable socket conditions |
| 236 | |
| 237 | - rx flowcontrol for backpressure notification fixed and implmeneted |
| 238 | correctly in the test server |
| 239 | |
| 240 | - optimal lexical parser added for header processing; all headers in a |
| 241 | single 276-byte state table |
| 242 | |
| 243 | - latency tracking api added (configure --with-latency) |
| 244 | |
| 245 | - Improved in-tree documentation, REAME.build, README.coding, |
| 246 | README.test-apps, changelog |
| 247 | |
| 248 | - Many small fixes |
| 249 | |
| 250 | |
| 251 | v1.0-chrome25-firefox17 (6cd1ea9b005933f) |