blob: 6881a5b2c0d026e4a2800816fe5a9e1a91a5d702 [file] [log] [blame]
Andy Greena35c86f2013-01-31 10:16:44 +08001Changelog
2---------
3
Olehfaeac3c2014-07-29 23:18:41 +08004(post-1.3)
5==========
6
7User api additions
8------------------
9
10There's a new member in the info struct used to control context creation,
11ssl_private_key_password, which allows passing into lws the passphrase on
12an SSL cetificate
13
Andy Greeneabed8d2014-08-11 12:11:36 +080014There's a new member in struct protocols, id, which is ignored by lws but can
15be used by the user code to mark the selected protocol by user-defined version
16or capabliity flag information, for the case multiple versions of a protocol are
17supported.
18
Andy Greenb128ccc2014-08-16 09:54:27 +080019int lws_is_ssl(wsi) added to allow user code to know if the connection was made
20over ssl or not. If LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT is used, both
21ssl and non-ssl connections are possible and may need to be treated differently
22in the user code.
23
Andy Green14425ea2014-08-18 22:49:39 +080024int lws_partial_buffered(wsi) added... should be checked after any
25libwebsocket_write that will be followed by another libwebsocket_write inside
26the same writeable callback. If set, you can't do any more writes until the
27writeable callback is called again. If you only do one write per writeable callback,
28you can ignore this.
29
Andy Green917f43a2014-10-12 14:31:47 +080030HTTP2-related: HTTP2 changes how headers are handled, lws now has new version-
31agnositic header creation APIs. These do the right thing depending on each
32connection's HTTP version without the user code having to know or care, except
33to make sure to use the new APIs for headers (test-server is updated to use
34them already, so look there for examples)
35
36The APIs "render" the headers into a user-provided buffer and bump *p as it
37is used. If *p reaches end, then the APIs return nonzero for error.
38
39LWS_VISIBLE LWS_EXTERN int
40lws_add_http_header_status(struct libwebsocket_context *context,
41 struct libwebsocket *wsi,
42 unsigned int code,
43 unsigned char **p,
44 unsigned char *end);
45
46Start a response header reporting status like 200, 500, etc
47
48LWS_VISIBLE LWS_EXTERN int
49lws_add_http_header_by_name(struct libwebsocket_context *context,
50 struct libwebsocket *wsi,
51 const unsigned char *name,
52 const unsigned char *value,
53 int length,
54 unsigned char **p,
55 unsigned char *end);
56
57Add a header like name: value in HTTP1.x
58
59LWS_VISIBLE LWS_EXTERN int
60lws_finalize_http_header(struct libwebsocket_context *context,
61 struct libwebsocket *wsi,
62 unsigned char **p,
63 unsigned char *end);
64
65Finish off the headers, like add the extra \r\n in HTTP1.x
66
67LWS_VISIBLE LWS_EXTERN int
68lws_add_http_header_by_token(struct libwebsocket_context *context,
69 struct libwebsocket *wsi,
70 enum lws_token_indexes token,
71 const unsigned char *value,
72 int length,
73 unsigned char **p,
74 unsigned char *end);
75
76Add a header by using a lws token as the name part. In HTTP2, this can be
77compressed to one or two bytes.
78
Olehfaeac3c2014-07-29 23:18:41 +080079
Andy Green822241c2014-08-18 22:21:51 +080080User api removal
81----------------
82
83protocols struct member no_buffer_all_partial_tx is removed. Under some
84conditions like rewriting extention such as compression in use, the built-in
85partial send buffering is the only way to deal with the problem, so turning
86it off is deprecated.
87
88
Andy Green917f43a2014-10-12 14:31:47 +080089User api changes
90----------------
91
92HTTP2-related: API libwebsockets_serve_http_file() takes an extra parameter at
93the end now
94
95int other_headers_len)
96
97If you are providing other headers, they must be generated using the new
98HTTP-version-agnostic APIs, and you must provide the length of them using this
99additional parameter.
100
Andy Green822241c2014-08-18 22:21:51 +0800101
Andy Greenc1fdd102014-07-06 09:56:11 +0800102v1.3-chrome37-firefox30
103=======================
104
105 .gitignore | 1 -
106 CMakeLists.txt | 447 +++--
107 README.build | 35 +-
108 README.coding | 14 +
109 changelog | 66 +
110 cmake/LibwebsocketsConfig.cmake.in | 17 +
111 cmake/LibwebsocketsConfigVersion.cmake.in | 11 +
112 config.h.cmake | 18 +
113 cross-ming.cmake | 31 +
114 cross-openwrt-makefile | 91 +
115 lib/client-handshake.c | 205 ++-
116 lib/client-parser.c | 58 +-
117 lib/client.c | 158 +-
118 lib/context.c | 341 ++++
119 lib/extension-deflate-frame.c | 2 +-
120 lib/extension.c | 178 ++
121 lib/handshake.c | 287 +---
122 lib/lextable.h | 338 ++++
123 lib/libev.c | 175 ++
124 lib/libwebsockets.c | 2089 +++--------------------
125 lib/libwebsockets.h | 253 ++-
126 lib/lws-plat-unix.c | 404 +++++
127 lib/lws-plat-win.c | 358 ++++
128 lib/minilex.c | 530 +++---
129 lib/output.c | 445 ++---
130 lib/parsers.c | 682 ++++----
131 lib/pollfd.c | 239 +++
132 lib/private-libwebsockets.h | 501 +++++-
133 lib/server-handshake.c | 274 +--
134 lib/server.c | 858 ++++++++--
135 lib/service.c | 517 ++++++
136 lib/sha-1.c | 38 +-
137 lib/ssl-http2.c | 78 +
138 lib/ssl.c | 571 +++++++
139 test-server/attack.sh | 101 +-
140 test-server/test-client.c | 9 +-
141 test-server/test-echo.c | 17 +-
142 test-server/test-fraggle.c | 7 -
143 test-server/test-ping.c | 12 +-
144 test-server/test-server.c | 330 ++--
145 test-server/test.html | 4 +-
146 win32port/client/client.vcxproj | 259 ---
147 win32port/client/client.vcxproj.filters | 39 -
148 .../libwebsocketswin32.vcxproj.filters | 93 -
149 win32port/server/server.vcxproj | 276 ---
150 win32port/server/server.vcxproj.filters | 51 -
151 win32port/win32helpers/gettimeofday.h | 59 +-
152 win32port/win32helpers/netdb.h | 1 -
153 win32port/win32helpers/strings.h | 0
154 win32port/win32helpers/sys/time.h | 1 -
155 win32port/win32helpers/unistd.h | 0
156 win32port/win32helpers/websock-w32.c | 104 --
157 win32port/win32helpers/websock-w32.h | 62 -
158 win32port/win32port.sln | 100 --
159 win32port/zlib/gzio.c | 3 +-
160 55 files changed, 6779 insertions(+), 5059 deletions(-)
161
Andy Green79002562013-11-09 11:04:35 +0800162
kapejodce64fb02013-11-19 13:38:16 +0100163User api additions
164------------------
165
166POST method is supported
167
168The protocol 0 / HTTP callback can now get two new kinds of callback,
169LWS_CALLBACK_HTTP_BODY (in and len are a chunk of the body of the HTTP request)
170and LWS_CALLBACK_HTTP_BODY_COMPLETION (the expected amount of body has arrived
171and been passed to the user code already). These callbacks are used with the
172post method (see the test server for details).
173
174The period between the HTTP header completion and the completion of the body
175processing is protected by a 5s timeout.
176
177The chunks are stored in a malloc'd buffer of size protocols[0].rx_buffer_size.
178
179
James Devine5b34c972013-12-14 11:41:29 +0800180New server option you can enable from user code
181LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT allows non-SSL connections to
182also be accepted on an SSL listening port. It's disabled unless you enable
183it explicitly.
184
185
Andy Green7a132792013-12-18 09:48:26 +0800186Two new callbacks are added in protocols[0] that are optional for allowing
187limited thread access to libwebsockets, LWS_CALLBACK_LOCK_POLL and
188LWS_CALLBACK_UNLOCK_POLL.
189
190If you use them, they protect internal and external poll list changes, but if
191you want to use external thread access to libwebsocket_callback_on_writable()
192you have to implement your locking here even if you don't use external
193poll support.
194
195If you will use another thread for this, take a lot of care about managing
196your list of live wsi by doing it from ESTABLISHED and CLOSED callbacks
197(with your own locking).
198
Andrew Canaday9769f4f2014-03-23 13:25:07 +0800199If you configure cmake with -DLWS_WITH_LIBEV=1 then the code allowing the libev
200eventloop instead of the default poll() one will also be compiled in. But to
201use it, you must also set the LWS_SERVER_OPTION_LIBEV flag on the context
202creation info struct options member.
Andy Green7a132792013-12-18 09:48:26 +0800203
Andy Greenc1fdd102014-07-06 09:56:11 +0800204IPV6 is supported and enabled by default except for Windows, you can disable
205the support at build-time by giving -DLWS_IPV6=, and disable use of it even if
James Devine3f13ea22014-03-24 16:09:25 +0800206compiled in by making sure the flag LWS_SERVER_OPTION_DISABLE_IPV6 is set on
207the context creation info struct options member.
208
Andy Greenc1fdd102014-07-06 09:56:11 +0800209You can give LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS option flag to
210guarantee the OS CAs will not be used, even if that support was selected at
211build-time.
212
213Optional "token limits" may be enforced by setting the member "token_limits"
214in struct lws_context_creation_info to point to a struct lws_token_limits.
215NULL means no token limits used for compatibility.
216
Andy Green7a132792013-12-18 09:48:26 +0800217
Andy Green79002562013-11-09 11:04:35 +0800218User api changes
219----------------
220
221Extra optional argument to libwebsockets_serve_http_file() allows injecion
222of HTTP headers into the canned response. Eg, cookies may be added like
223that without getting involved in having to send the header by hand.
224
Patrick Gansterer148b9452014-02-28 02:31:23 +0100225A new info member http_proxy_address may be used at context creation time to
226set the http proxy. If non-NULL, it overrides http_proxy environment var.
Andy Green79002562013-11-09 11:04:35 +0800227
Andy Greend2ec7ad2014-03-15 10:39:29 +0800228Cmake supports LWS_SSL_CLIENT_USE_OS_CA_CERTS defaulting to on, which gets
229the client to use the OS CA Roots. If you're worried somebody with the
230ability to forge for force creation of a client cert from the root CA in
231your OS, you should disable this since your selfsigned $0 cert is a lot safer
232then...
233
Andy Green79002562013-11-09 11:04:35 +0800234
Andy Green81877e62013-10-26 20:36:08 +0800235v1.23-chrome32-firefox24
236========================
237
238 Android.mk | 29 +
239 CMakeLists.txt | 573 ++++++++----
240 COPYING | 503 -----------
241 INSTALL | 365 --------
242 Makefile.am | 13 -
243 README.build | 371 ++------
244 README.coding | 63 ++
245 autogen.sh | 1578 ---------------------------------
246 changelog | 69 ++
247 cmake/FindGit.cmake | 163 ++++
248 cmake/FindOpenSSLbins.cmake | 15 +-
249 cmake/UseRPMTools.cmake | 176 ++++
250 config.h.cmake | 25 +-
251 configure.ac | 226 -----
252 cross-arm-linux-gnueabihf.cmake | 28 +
253 lib/Makefile.am | 89 --
254 lib/base64-decode.c | 98 +-
255 lib/client-handshake.c | 123 ++-
256 lib/client-parser.c | 19 +-
257 lib/client.c | 145 ++-
258 lib/daemonize.c | 4 +-
259 lib/extension.c | 2 +-
260 lib/getifaddrs.h | 4 +-
261 lib/handshake.c | 76 +-
262 lib/libwebsockets.c | 491 ++++++----
263 lib/libwebsockets.h | 164 ++--
264 lib/output.c | 214 ++++-
265 lib/parsers.c | 102 +--
266 lib/private-libwebsockets.h | 66 +-
267 lib/server-handshake.c | 5 +-
268 lib/server.c | 29 +-
269 lib/sha-1.c | 2 +-
270 libwebsockets-api-doc.html | 249 +++---
271 libwebsockets.pc.in | 11 -
272 libwebsockets.spec | 14 +-
273 m4/ignore-me | 2 -
274 scripts/FindLibWebSockets.cmake | 33 +
275 scripts/kernel-doc | 1 +
276 test-server/Makefile.am | 131 ---
277 test-server/leaf.jpg | Bin 0 -> 2477518 bytes
278 test-server/test-client.c | 78 +-
279 test-server/test-echo.c | 33 +-
280 test-server/test-fraggle.c | 26 +-
281 test-server/test-ping.c | 15 +-
282 test-server/test-server.c | 197 +++-
283 test-server/test.html | 5 +-
284 win32port/win32helpers/gettimeofday.c | 74 +-
285 win32port/win32helpers/websock-w32.h | 6 +-
286 48 files changed, 2493 insertions(+), 4212 deletions(-)
287
Andy Green54cb3462013-02-14 22:23:54 +0800288
289User api additions
290------------------
291
292 - You can now call libwebsocket_callback_on_writable() on http connectons,
293 and get a LWS_CALLBACK_HTTP_WRITEABLE callback, the same way you can
294 regulate writes with a websocket protocol connection.
295
Andy Green2672fb22013-02-22 09:54:35 +0800296 - A new member in the context creation parameter struct "ssl_cipher_list" is
297 added, replacing CIPHERS_LIST_STRING. NULL means use the ssl library
298 default list of ciphers.
299
Andy Green58f214e2013-03-09 13:03:53 +0800300 - Not really an api addition, but libwebsocket_service_fd() will now zero
301 the revents field of the pollfd it was called with if it handled the
302 descriptor. So you can tell if it is a non-lws fd by checking revents
303 after the service call... if it's still nonzero, the descriptor
304 belongs to you and you need to take care of it.
305
Andy Greenb55451c2013-03-16 12:32:27 +0800306 - libwebsocket_rx_flow_allow_all_protocol(protocol) will unthrottle all
307 connections with the established protocol. It's designed to be
308 called from user server code when it sees it can accept more input
309 and may have throttled connections using the server rx flow apis
310 while it was unable to accept any other input The user server code
311 then does not have to try to track while connections it choked, this
312 will free up all of them in one call.
313
Andy Green0c9563b2013-06-10 22:54:40 +0800314 - there's a new, optional callback LWS_CALLBACK_CLOSED_HTTP which gets
315 called when an HTTP protocol socket closes
316
Andy Green96d48fd2013-09-18 08:32:55 +0800317 - for LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION callback, the user_space alloc
318 has already been done before the callback happens. That means we can
319 use the user parameter to the callback to contain the user pointer, and
320 move the protocol name to the "in" parameter. The docs for this
321 callback are also updated to reflect how to check headers in there.
322
Andy Green5dc62ea2013-09-20 20:26:12 +0800323 - libwebsocket_client_connect() is now properly nonblocking and async. See
324 README.coding and test-client.c for information on the callbacks you
325 can rely on controlling the async connection period with.
326
Andy Green81877e62013-10-26 20:36:08 +0800327 - if your OS does not support the http_proxy environment variable convention
328 (eg, reportedly OSX), you can use a new api libwebsocket_set_proxy()
329 to set the proxy details inbetween context creation and the connection
330 action. For OSes that support http_proxy, that's used automatically.
Andy Greenb55451c2013-03-16 12:32:27 +0800331
Andy Green50097dd2013-02-15 22:36:30 +0800332User api changes
333----------------
334
335 - the external poll callbacks now get the socket descriptor coming from the
336 "in" parameter. The user parameter provides the user_space for the
337 wsi as it normally does on the other callbacks.
Edwin van den Oetelaar8c8a8e12013-02-20 20:56:59 +0800338 LWS_CALLBACK_FILTER_NETWORK_CONNECTION also has the socket descriptor
339 delivered by @in now instead of @user.
Andy Green50097dd2013-02-15 22:36:30 +0800340
Andy Greenfc7c5e42013-02-23 10:50:10 +0800341 - libwebsocket_write() now returns -1 for error, or the amount of data
342 actually accepted for send. Under load, the OS may signal it is
343 ready to send new data on the socket, but have only a restricted
344 amount of memory to buffer the packet compared to usual.
345
Andy Green50097dd2013-02-15 22:36:30 +0800346
Andy Greendc914cf2013-02-18 16:54:26 +0800347User api removal
348----------------
349
350 - libwebsocket_ensure_user_space() is removed from the public api, if you
351 were using it to get user_space, you need to adapt your code to only
352 use user_space inside the user callback.
353
Andy Green2672fb22013-02-22 09:54:35 +0800354 - CIPHERS_LIST_STRING is removed
355
Andy Green0097a992013-03-09 13:06:37 +0800356 - autotools build has been removed. See README.build for info on how to
357 use CMake for your platform
358
Andy Green54cb3462013-02-14 22:23:54 +0800359
Andy Green53a46782013-02-14 11:23:49 +0800360v1.21-chrome26-firefox18
361========================
362
363 - Fixes buffer overflow bug in max frame size handling if you used the
364 default protocol buffer size. If you declared rx_buffer_size in your
365 protocol, which is recommended anyway, your code was unaffected.
366
Andy Green182cb9a2013-02-13 11:54:08 +0800367v1.2-chrome26-firefox18
368=======================
369
370Diffstat
371--------
372
373 .gitignore | 16 +++
374 CMakeLists.txt | 544 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
375 LICENSE | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
376 Makefile.am | 1 +
377 README | 20 +++
378 README.build | 258 ++++++++++++++++++++++++++++++++-----
379 README.coding | 52 ++++++++
380 changelog | 136 ++++++++++++++++++++
381 cmake/FindOpenSSLbins.cmake | 33 +++++
382 config.h.cmake | 173 +++++++++++++++++++++++++
383 configure.ac | 22 +++-
384 lib/Makefile.am | 20 ++-
385 lib/base64-decode.c | 2 +-
386 lib/client-handshake.c | 190 +++++++++++-----------------
387 lib/client-parser.c | 88 +++++++------
388 lib/client.c | 384 ++++++++++++++++++++++++++++++-------------------------
389 lib/daemonize.c | 32 +++--
390 lib/extension-deflate-frame.c | 58 +++++----
391 lib/extension-deflate-stream.c | 19 ++-
392 lib/extension-deflate-stream.h | 4 +-
393 lib/extension.c | 11 +-
394 lib/getifaddrs.c | 315 +++++++++++++++++++++++-----------------------
395 lib/getifaddrs.h | 30 ++---
396 lib/handshake.c | 124 +++++++++++-------
397 lib/libwebsockets.c | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------
398 lib/libwebsockets.h | 237 ++++++++++++++++++++++------------
399 lib/output.c | 192 +++++++++++-----------------
400 lib/parsers.c | 966 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------
401 lib/private-libwebsockets.h | 225 +++++++++++++++++++++------------
402 lib/server-handshake.c | 82 ++++++------
403 lib/server.c | 96 +++++++-------
404 libwebsockets-api-doc.html | 189 ++++++++++++++++++----------
405 libwebsockets.spec | 17 +--
406 test-server/attack.sh | 148 ++++++++++++++++++++++
407 test-server/test-client.c | 125 +++++++++---------
408 test-server/test-echo.c | 31 +++--
409 test-server/test-fraggle.c | 32 ++---
410 test-server/test-ping.c | 52 ++++----
411 test-server/test-server.c | 129 ++++++++++++-------
412 win32port/libwebsocketswin32/libwebsocketswin32.vcxproj | 279 ----------------------------------------
413 win32port/libwebsocketswin32/libwebsocketswin32.vcxproj.filters | 23 +++-
414 41 files changed, 4398 insertions(+), 2219 deletions(-)
415
Andy Green7b405452013-02-01 10:50:15 +0800416
417User api additions
418------------------
419
420 - lws_get_library_version() returns a const char * with a string like
421 "1.1 9e7f737", representing the library version from configure.ac
422 and the git HEAD hash the library was built from
423
Andy Greena47865f2013-02-10 09:39:47 +0800424 - TCP Keepalive can now optionally be applied to all lws sockets, on Linux
425 also with controllable timeout, number of probes and probe interval.
426 (On BSD type OS, you can only use system default settings for the
427 timing and retries, although enabling it is supported by setting
428 ka_time to nonzero, the exact value has no meaning.)
429 This enables detection of idle connections which are logically okay,
430 but are in fact dead, due to network connectivity issues at the server,
Andy Greena690cd02013-02-09 12:25:31 +0800431 client, or any intermediary. By default it's not enabled, but you
432 can enable it by setting a non-zero timeout (in seconds) at the new
433 ka_time member at context creation time.
434
Andy Greena7109e62013-02-11 12:05:54 +0800435 - Two new optional user callbacks added, LWS_CALLBACK_PROTOCOL_DESTROY which
436 is called one-time per protocol as the context is being destroyed, and
437 LWS_CALLBACK_PROTOCOL_INIT which is called when the context is created
438 and the protocols are added, again it's a one-time affair.
439 This lets you manage per-protocol allocations properly including
440 cleaning up after yourself when the server goes down.
Andy Green7b405452013-02-01 10:50:15 +0800441
Andy Greened334462013-02-07 21:14:33 +0800442User api changes
443----------------
444
Andy Green1b265272013-02-09 14:01:09 +0800445 - libwebsocket_create_context() has changed from taking a ton of parameters
446 to just taking a pointer to a struct containing the parameters. The
447 struct lws_context_creation_info is in libwebsockets.h, the members
448 are in the same order as when they were parameters to the call
449 previously. The test apps are all updated accordingly so you can
450 see example code there.
451
Andy Greened334462013-02-07 21:14:33 +0800452 - Header tokens are now deleted after the websocket connection is
Andy Green54495112013-02-06 21:10:16 +0900453 established. Not just the header data is saved, but the pointer and
454 length array is also removed from (union) scope saving several hundred
455 bytes per connection once it is established
456
457 - struct libwebsocket_protocols has a new member rx_buffer_size, this
458 controls rx buffer size per connection of that protocol now. Sources
459 for apps built against older versions of the library won't declare
460 this in their protocols, defaulting it to 0. Zero buffer is legal,
461 it causes a default buffer to be allocated (currently 4096)
462
463 If you want to receive only atomic frames in your user callback, you
464 should set this to greater than your largest frame size. If a frame
465 comes that exceeds that, no error occurs but the callback happens as
466 soon as the buffer limit is reached, and again if it is reached again
467 or the frame completes. You can detect that has happened by seeing
468 there is still frame content pending using
469 libwebsockets_remaining_packet_payload()
470
471 By correctly setting this, you can save a lot of memory when your
472 protocol has small frames (see the test server and client sources).
473
Andy Green16ab3182013-02-10 18:02:31 +0800474 - LWS_MAX_HEADER_LEN now defaults to 1024 and is the total amount of known
475 header payload lws can cope with, that includes the GET URL, origin
476 etc. Headers not understood by lws are ignored and their payload
477 not included in this.
478
Andy Green54495112013-02-06 21:10:16 +0900479
480User api removals
481-----------------
482
Andy Green16ab3182013-02-10 18:02:31 +0800483 - The configuration-time option MAX_USER_RX_BUFFER has been replaced by a
484 buffer size chosen per-protocol. For compatibility, there's a default
485 of 4096 rx buffer, but user code should set the appropriate size for
486 the protocol frames.
487
488 - LWS_INITIAL_HDR_ALLOC and LWS_ADDITIONAL_HDR_ALLOC are no longer needed
489 and have been removed. There's a new header management scheme that
490 handles them in a much more compact way.
Andy Greened334462013-02-07 21:14:33 +0800491
Andy Green70edd6f2013-02-12 10:15:25 +0800492 - libwebsockets_hangup_on_client() is removed. If you want to close the
493 connection you must do so from the user callback and by returning
494 -1 from there.
495
Andy Green508946c2013-02-12 10:19:08 +0800496 - libwebsocket_close_and_free_session() is now private to the library code
497 only and not exposed for user code. If you want to close the
498 connection, you must do so from the user callback by returning -1
499 from there.
500
Andy Greened334462013-02-07 21:14:33 +0800501
Andy Greendf60b0c2013-02-06 19:57:12 +0900502New features
503------------
504
Andy Green9b09dc02013-02-08 12:48:36 +0800505 - Cmake project file added, aimed initially at Windows support: this replaces
Andy Green16ab3182013-02-10 18:02:31 +0800506 the visual studio project files that were in the tree until now.
Andy Greendf60b0c2013-02-06 19:57:12 +0900507
Andy Greenc3ef0d62013-02-12 10:50:49 +0800508 - CyaSSL now supported in place of OpenSSL (--use-cyassl on configure)
509
Andy Green9b09dc02013-02-08 12:48:36 +0800510 - PATH_MAX or MAX_PATH no longer needed
Andy Greendf60b0c2013-02-06 19:57:12 +0900511
Andy Green54495112013-02-06 21:10:16 +0900512 - cutomizable frame rx buffer size by protocol
513
Andy Greenc3ef0d62013-02-12 10:50:49 +0800514 - optional TCP keepalive so dead peers can be detected, can be enabled at
515 context-creation time
516
517 - valgrind-clean: no SSL or CyaSSL: completely clean. With OpenSSL, 88 bytes
518 lost at OpenSSL library init and symptomless reports of uninitialized
519 memory usage... seems to be a known and ignored problem at OpenSSL
520
Andy Greena3957ef2013-02-11 09:31:43 +0800521 - By default debug is enabled and the library is built for -O0 -g to faclitate
522 that. Use --disable-debug configure option to build instead with -O4
523 and no -g (debug info), obviously providing best performance and
524 reduced binary size.
Andy Green7b405452013-02-01 10:50:15 +0800525
Andy Green895d56d2013-02-11 09:32:53 +0800526 - 1.0 introduced some code to try to not deflate small frames, however this
527 seems to break when confronted with a mixture of frames above and
528 below the threshold, so it's removed. Veto the compression extension
529 in your user callback if you will typically have very small frames.
530
Andy Green16ab3182013-02-10 18:02:31 +0800531 - There are many memory usage improvements, both a reduction in malloc/
532 realloc and architectural changes. A websocket connection now
533 consumes only 296 bytes with SSL or 272 bytes without on x86_64,
534 during header processing an additional 1262 bytes is allocated in a
535 single malloc, but is freed when the websocket connection starts.
536 The RX frame buffer defined by the protocol in user
537 code is also allocated per connection, this represents the largest
538 frame you can receive atomically in that protocol.
539
Andy Greenc3ef0d62013-02-12 10:50:49 +0800540 - On ARM9 build, just http+ws server no extensions or ssl, <12Kbytes .text
541 and 112 bytes per connection (+1328 only during header processing)
542
Andy Green895d56d2013-02-11 09:32:53 +0800543
Andy Greenbd1132f2013-01-31 19:53:05 +0800544v1.1-chrome26-firefox18
Andy Greena35c86f2013-01-31 10:16:44 +0800545=======================
546
547Diffstat
548--------
549
550 Makefile.am | 4 +
551 README-test-server | 291 ---
552 README.build | 239 ++
553 README.coding | 138 ++
554 README.rst | 72 -
555 README.test-apps | 272 +++
556 configure.ac | 116 +-
557 lib/Makefile.am | 55 +-
558 lib/base64-decode.c | 5 +-
559 lib/client-handshake.c | 121 +-
560 lib/client-parser.c | 394 ++++
561 lib/client.c | 807 +++++++
562 lib/daemonize.c | 212 ++
563 lib/extension-deflate-frame.c | 132 +-
564 lib/extension-deflate-stream.c | 12 +-
565 lib/extension-x-google-mux.c | 1223 ----------
566 lib/extension-x-google-mux.h | 96 -
567 lib/extension.c | 8 -
568 lib/getifaddrs.c | 271 +++
569 lib/getifaddrs.h | 76 +
570 lib/handshake.c | 582 +----
571 lib/libwebsockets.c | 2493 ++++++---------------
572 lib/libwebsockets.h | 115 +-
573 lib/md5.c | 217 --
574 lib/minilex.c | 440 ++++
575 lib/output.c | 628 ++++++
576 lib/parsers.c | 2016 +++++------------
577 lib/private-libwebsockets.h | 284 +--
578 lib/server-handshake.c | 275 +++
579 lib/server.c | 377 ++++
580 libwebsockets-api-doc.html | 300 +--
581 m4/ignore-me | 2 +
582 test-server/Makefile.am | 111 +-
583 test-server/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes
584 test-server/test-client.c | 45 +-
585 test-server/test-echo.c | 330 +++
586 test-server/test-fraggle.c | 20 +-
587 test-server/test-ping.c | 22 +-
588 test-server/test-server-extpoll.c | 554 -----
589 test-server/test-server.c | 349 ++-
590 test-server/test.html | 3 +-
591 win32port/zlib/ZLib.vcxproj | 749 ++++---
592 win32port/zlib/ZLib.vcxproj.filters | 188 +-
593 win32port/zlib/adler32.c | 348 ++-
594 win32port/zlib/compress.c | 160 +-
595 win32port/zlib/crc32.c | 867 ++++----
596 win32port/zlib/crc32.h | 882 ++++----
597 win32port/zlib/deflate.c | 3799 +++++++++++++++-----------------
598 win32port/zlib/deflate.h | 688 +++---
599 win32port/zlib/gzclose.c | 50 +-
600 win32port/zlib/gzguts.h | 325 ++-
601 win32port/zlib/gzlib.c | 1157 +++++-----
602 win32port/zlib/gzread.c | 1242 ++++++-----
603 win32port/zlib/gzwrite.c | 1096 +++++----
604 win32port/zlib/infback.c | 1272 ++++++-----
605 win32port/zlib/inffast.c | 680 +++---
606 win32port/zlib/inffast.h | 22 +-
607 win32port/zlib/inffixed.h | 188 +-
608 win32port/zlib/inflate.c | 2976 +++++++++++++------------
609 win32port/zlib/inflate.h | 244 +-
610 win32port/zlib/inftrees.c | 636 +++---
611 win32port/zlib/inftrees.h | 124 +-
612 win32port/zlib/trees.c | 2468 +++++++++++----------
613 win32port/zlib/trees.h | 256 +--
614 win32port/zlib/uncompr.c | 118 +-
615 win32port/zlib/zconf.h | 934 ++++----
616 win32port/zlib/zlib.h | 3357 ++++++++++++++--------------
617 win32port/zlib/zutil.c | 642 +++---
618 win32port/zlib/zutil.h | 526 ++---
619 69 files changed, 19556 insertions(+), 20145 deletions(-)
620
621user api changes
622----------------
623
624 - libwebsockets_serve_http_file() now takes a context as first argument
625
626 - libwebsockets_get_peer_addresses() now takes a context and wsi as first
627 two arguments
628
629
630user api additions
631------------------
632
633 - lwsl_...() logging apis, default to stderr but retargetable by user code;
634 may be used also by user code
635
636 - lws_set_log_level() set which logging apis are able to emit (defaults to
637 notice, warn, err severities), optionally set the emit callback
638
639 - lwsl_emit_syslog() helper callback emits to syslog
640
641 - lws_daemonize() helper code that forks the app into a headless daemon
642 properly, maintains a lock file with pid in suitable for sysvinit etc to
643 control lifecycle
644
645 - LWS_CALLBACK_HTTP_FILE_COMPLETION callback added since http file
646 transfer is now asynchronous (see test server code)
647
648 - lws_frame_is_binary() from a wsi pointer, let you know if the received
649 data was sent in BINARY mode
650
651
652user api removals
653-----------------
654
655 - libwebsockets_fork_service_loop() - no longer supported (had intractable problems)
656 arrange your code to act from the user callback instead from same
657 process context as the service loop
658
659 - libwebsockets_broadcast() - use libwebsocket_callback_on_writable[_all_protocol]()
660 instead from same process context as the service loop. See the test apps
661 for examples.
662
663 - x-google-mux() removed until someone wants it
664
665 - pre -v13 (ancient) protocol support removed
666
667
668New features
669------------
670
671 - echo test server and client compatible with echo.websocket.org added
672
673 - many new configure options (see README.build) to reduce footprint of the
674 library to what you actually need, eg, --without-client and
675 --without-server
676
677 - http + websocket server can build to as little as 12K .text for ARM
678
679 - no more MAX_CLIENTS limitation; adapts to support the max number of fds
680 allowed to the process by ulimit, defaults to 1024 on Fedora and
681 Ubuntu. Use ulimit to control this without needing to configure
682 the library. Code here is smaller and faster.
683
684 - adaptive ratio of listen socket to connection socket service allows
685 good behaviour under Apache ab test load. Tested with thousands
686 of simultaneous connections
687
688 - reduction in per-connection memory footprint by moving to a union to hold
689 mutually-exclusive state for the connection
690
691 - robustness: Out of Memory taken care of for all allocation code now
692
693 - internal getifaddrs option if your toolchain lacks it (some uclibc)
694
695 - configurable memory limit for deflate operations
696
697 - improvements in SSL code nonblocking operation, possible hang solved,
698 some SSL operations broken down into pollable states so there is
699 no library blocking, timeout coverage for SSL_connect
700
701 - extpoll test server merged into single test server source
702
703 - robustness: library should deal with all recoverable socket conditions
704
705 - rx flowcontrol for backpressure notification fixed and implmeneted
706 correctly in the test server
707
708 - optimal lexical parser added for header processing; all headers in a
709 single 276-byte state table
710
711 - latency tracking api added (configure --with-latency)
712
713 - Improved in-tree documentation, REAME.build, README.coding,
714 README.test-apps, changelog
715
716 - Many small fixes
717
718
719v1.0-chrome25-firefox17 (6cd1ea9b005933f)