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