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