blob: 0c1a7e46f73e6aff6aa6e8bbf679d39ce17754b0 [file] [log] [blame]
Andy Greena35c86f2013-01-31 10:16:44 +08001Changelog
2---------
3
Andy Green4e442b72015-12-10 07:58:58 +08004User api additions
5------------------
6
Andy Green3f628702015-12-14 07:16:32 +080071) lws now exposes his internal platform file abstraction in a way that can be
Andy Green4e442b72015-12-10 07:58:58 +08008both used by user code to make it platform-agnostic, and be overridden or
9subclassed by user code. This allows things like handling the URI "directory
10space" as a virtual filesystem that may or may not be backed by a regular
11filesystem. One example use is serving files from inside large compressed
12archive storage without having to unpack anything except the file being
13requested.
14
15The test server shows how to use it, basically the platform-specific part of
16lws prepares a file operations structure that lives in the lws context.
17
Andy Green3f599962015-12-14 07:21:42 +080018Helpers are provided to also leverage these platform-independent file handling
19apis
Andy Green4e442b72015-12-10 07:58:58 +080020
21static inline lws_filefd_type
Andy Green3f599962015-12-14 07:21:42 +080022lws_plat_file_open(struct lws *wsi, const char *filename,
Andy Green4e442b72015-12-10 07:58:58 +080023 unsigned long *filelen, int flags)
Andy Green4e442b72015-12-10 07:58:58 +080024static inline int
Andy Green3f599962015-12-14 07:21:42 +080025lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
Andy Green4e442b72015-12-10 07:58:58 +080026
27static inline unsigned long
Andy Green3f599962015-12-14 07:21:42 +080028lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
Andy Green4e442b72015-12-10 07:58:58 +080029
30static inline int
Andy Green3f599962015-12-14 07:21:42 +080031lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
32 unsigned char *buf, unsigned long len)
Andy Green4e442b72015-12-10 07:58:58 +080033
34static inline int
Andy Green3f599962015-12-14 07:21:42 +080035lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
36 unsigned char *buf, unsigned long len)
Andy Green4e442b72015-12-10 07:58:58 +080037
38The user code can also override or subclass the file operations, to either
39wrap or replace them. An example is shown in test server.
40
Andy Green3f599962015-12-14 07:21:42 +080041A wsi can be associated with the file activity, allowing per-connection
42authentication and state to be used when interpreting the file request.
43
Andy Green3f628702015-12-14 07:16:32 +0800442) A new API void * lws_wsi_user(struct lws *wsi) lets you get the pointer to
45the user data associated with the wsi, just from the wsi.
46
Andy Green4e442b72015-12-10 07:58:58 +080047
Andy Green6d417202015-12-04 10:39:23 +080048User api changes
49----------------
50
Andy Green1a366bf2015-12-14 07:02:51 +0800511) Three APIS
52
53 - lws_callback_on_writable_all_protocol(const struct lws_protocols *protocol)
54 - lws_callback_all_protocol(const struct lws_protocols *protocol)
55 - lws_rx_flow_allow_all_protocol(lws_rx_flow_allow_all_protocol)
56
57Now take an additional pointer to the lws_context in their first argument.
58
59The reason for this change is struct lws_protocols has been changed to remove
60members that lws used for private storage: so the protocols struct in now
61truly const and may be reused serially or simultaneously by different contexts.
62
Andy Green11c05bf2015-12-16 18:19:08 +0800632) Eleven APIs
64
65LWS_VISIBLE LWS_EXTERN int
66lws_add_http_header_by_name(struct lws_context *context,
67 struct lws *wsi,
68 const unsigned char *name,
69 const unsigned char *value,
70 int length,
71 unsigned char **p,
72 unsigned char *end);
73LWS_VISIBLE LWS_EXTERN int
74lws_finalize_http_header(struct lws_context *context,
75 struct lws *wsi,
76 unsigned char **p,
77 unsigned char *end);
78LWS_VISIBLE LWS_EXTERN int
79lws_add_http_header_by_token(struct lws_context *context,
80 struct lws *wsi,
81 enum lws_token_indexes token,
82 const unsigned char *value,
83 int length,
84 unsigned char **p,
85 unsigned char *end);
86LWS_VISIBLE LWS_EXTERN int
87lws_add_http_header_content_length(struct lws_context *context,
88 struct lws *wsi,
89 unsigned long content_length,
90 unsigned char **p,
91 unsigned char *end);
92LWS_VISIBLE LWS_EXTERN int
93lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
94 unsigned int code, unsigned char **p,
95 unsigned char *end);
96
97LWS_VISIBLE LWS_EXTERN int
98lws_serve_http_file(struct lws_context *context, struct lws *wsi,
99 const char *file, const char *content_type,
100 const char *other_headers, int other_headers_len);
101LWS_VISIBLE LWS_EXTERN int
102lws_serve_http_file_fragment(struct lws_context *context, struct lws *wsi);
103
104LWS_VISIBLE LWS_EXTERN int
105lws_return_http_status(struct lws_context *context, struct lws *wsi,
106 unsigned int code, const char *html_body);
107
108LWS_VISIBLE LWS_EXTERN int
109lws_callback_on_writable(const struct lws_context *context, struct lws *wsi);
110
111LWS_VISIBLE LWS_EXTERN void
112lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
113 lws_sockfd_type fd, char *name, int name_len,
114 char *rip, int rip_len);
115
116LWS_VISIBLE LWS_EXTERN int
117lws_read(struct lws_context *context, struct lws *wsi,
118 unsigned char *buf, size_t len);
119
120no longer require their initial struct lws_context * parameter.
121
1223) Several older apis start with libwebsocket_ or libwebsockets_ while newer ones
Andy Green6d417202015-12-04 10:39:23 +0800123all begin lws_. These apis have been changed to all begin with lws_.
124
Andy Green11c05bf2015-12-16 18:19:08 +0800125To convert, search-replace
Andy Green6d417202015-12-04 10:39:23 +0800126
Andy Green11c05bf2015-12-16 18:19:08 +0800127 - libwebsockets_/lws_
128 - libwebsocket_/lws_
129 - struct\ libwebsocket/struct\ lws
Andy Green6d417202015-12-04 10:39:23 +0800130
131
Andy Greenab620ff2015-10-28 08:39:09 +0800132v1.5-chrome47-firefox41
133=======================
MGadkari020c53c2015-08-21 16:15:36 +0530134
135User api changes
136----------------
137
138LWS_CALLBACK_CLIENT_CONNECTION_ERROR may provide an error string if in is
139non-NULL. If so, the string has length len.
140
Andy Green6d59f592015-10-15 09:12:58 +0800141LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED is available to relax the requirement
142for peer certs if you are using the option to require client certs.
143
Andy Green4c79ee72015-10-15 11:20:40 +0800144LWS_WITHOUT_BUILTIN_SHA1 cmake option forces lws to use SHA1() defined
145externally, eg, byOpenSSL, and disables build of libwebsockets_SHA1()
146
147
Andy Green16fb0132015-03-28 11:35:40 +0800148v1.4-chrome43-firefox36
149=======================
Olehfaeac3c2014-07-29 23:18:41 +0800150
151User api additions
152------------------
153
154There's a new member in the info struct used to control context creation,
155ssl_private_key_password, which allows passing into lws the passphrase on
156an SSL cetificate
157
Andy Greeneabed8d2014-08-11 12:11:36 +0800158There's a new member in struct protocols, id, which is ignored by lws but can
159be used by the user code to mark the selected protocol by user-defined version
160or capabliity flag information, for the case multiple versions of a protocol are
161supported.
162
Andy Greenb128ccc2014-08-16 09:54:27 +0800163int lws_is_ssl(wsi) added to allow user code to know if the connection was made
164over ssl or not. If LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT is used, both
165ssl and non-ssl connections are possible and may need to be treated differently
166in the user code.
167
Andy Green14425ea2014-08-18 22:49:39 +0800168int lws_partial_buffered(wsi) added... should be checked after any
169libwebsocket_write that will be followed by another libwebsocket_write inside
170the same writeable callback. If set, you can't do any more writes until the
171writeable callback is called again. If you only do one write per writeable callback,
172you can ignore this.
173
Andy Green917f43a2014-10-12 14:31:47 +0800174HTTP2-related: HTTP2 changes how headers are handled, lws now has new version-
175agnositic header creation APIs. These do the right thing depending on each
176connection's HTTP version without the user code having to know or care, except
177to make sure to use the new APIs for headers (test-server is updated to use
178them already, so look there for examples)
179
180The APIs "render" the headers into a user-provided buffer and bump *p as it
181is used. If *p reaches end, then the APIs return nonzero for error.
182
183LWS_VISIBLE LWS_EXTERN int
184lws_add_http_header_status(struct libwebsocket_context *context,
185 struct libwebsocket *wsi,
186 unsigned int code,
187 unsigned char **p,
188 unsigned char *end);
189
190Start a response header reporting status like 200, 500, etc
191
192LWS_VISIBLE LWS_EXTERN int
193lws_add_http_header_by_name(struct libwebsocket_context *context,
194 struct libwebsocket *wsi,
195 const unsigned char *name,
196 const unsigned char *value,
197 int length,
198 unsigned char **p,
199 unsigned char *end);
200
201Add a header like name: value in HTTP1.x
202
203LWS_VISIBLE LWS_EXTERN int
204lws_finalize_http_header(struct libwebsocket_context *context,
205 struct libwebsocket *wsi,
206 unsigned char **p,
207 unsigned char *end);
208
209Finish off the headers, like add the extra \r\n in HTTP1.x
210
211LWS_VISIBLE LWS_EXTERN int
212lws_add_http_header_by_token(struct libwebsocket_context *context,
213 struct libwebsocket *wsi,
214 enum lws_token_indexes token,
215 const unsigned char *value,
216 int length,
217 unsigned char **p,
218 unsigned char *end);
219
220Add a header by using a lws token as the name part. In HTTP2, this can be
221compressed to one or two bytes.
222
Olehfaeac3c2014-07-29 23:18:41 +0800223
Andy Green822241c2014-08-18 22:21:51 +0800224User api removal
225----------------
226
227protocols struct member no_buffer_all_partial_tx is removed. Under some
Peter Pentchevbb085da2015-12-03 15:55:11 +0200228conditions like rewriting extension such as compression in use, the built-in
Andy Green822241c2014-08-18 22:21:51 +0800229partial send buffering is the only way to deal with the problem, so turning
230it off is deprecated.
231
232
Andy Green917f43a2014-10-12 14:31:47 +0800233User api changes
234----------------
235
236HTTP2-related: API libwebsockets_serve_http_file() takes an extra parameter at
237the end now
238
239int other_headers_len)
240
241If you are providing other headers, they must be generated using the new
242HTTP-version-agnostic APIs, and you must provide the length of them using this
243additional parameter.
244
joseph.urciuoli4d9c8fc2014-10-16 08:53:19 +0800245struct lws_context_creation_info now has an additional member
246SSL_CTX *provided_client_ssl_ctx you may set to an externally-initialized
247SSL_CTX managed outside lws. Defaulting to zero keeps the existing behaviour of
248lws managing the context, if you memset the struct to 0 or have as a filescope
249initialized struct in bss, no need to change anything.
250
Andy Green822241c2014-08-18 22:21:51 +0800251
Andy Greenc1fdd102014-07-06 09:56:11 +0800252v1.3-chrome37-firefox30
253=======================
254
255 .gitignore | 1 -
256 CMakeLists.txt | 447 +++--
257 README.build | 35 +-
258 README.coding | 14 +
259 changelog | 66 +
260 cmake/LibwebsocketsConfig.cmake.in | 17 +
261 cmake/LibwebsocketsConfigVersion.cmake.in | 11 +
262 config.h.cmake | 18 +
263 cross-ming.cmake | 31 +
264 cross-openwrt-makefile | 91 +
265 lib/client-handshake.c | 205 ++-
266 lib/client-parser.c | 58 +-
267 lib/client.c | 158 +-
268 lib/context.c | 341 ++++
269 lib/extension-deflate-frame.c | 2 +-
270 lib/extension.c | 178 ++
271 lib/handshake.c | 287 +---
272 lib/lextable.h | 338 ++++
273 lib/libev.c | 175 ++
274 lib/libwebsockets.c | 2089 +++--------------------
275 lib/libwebsockets.h | 253 ++-
276 lib/lws-plat-unix.c | 404 +++++
277 lib/lws-plat-win.c | 358 ++++
278 lib/minilex.c | 530 +++---
279 lib/output.c | 445 ++---
280 lib/parsers.c | 682 ++++----
281 lib/pollfd.c | 239 +++
282 lib/private-libwebsockets.h | 501 +++++-
283 lib/server-handshake.c | 274 +--
284 lib/server.c | 858 ++++++++--
285 lib/service.c | 517 ++++++
286 lib/sha-1.c | 38 +-
287 lib/ssl-http2.c | 78 +
288 lib/ssl.c | 571 +++++++
289 test-server/attack.sh | 101 +-
290 test-server/test-client.c | 9 +-
291 test-server/test-echo.c | 17 +-
292 test-server/test-fraggle.c | 7 -
293 test-server/test-ping.c | 12 +-
294 test-server/test-server.c | 330 ++--
295 test-server/test.html | 4 +-
296 win32port/client/client.vcxproj | 259 ---
297 win32port/client/client.vcxproj.filters | 39 -
298 .../libwebsocketswin32.vcxproj.filters | 93 -
299 win32port/server/server.vcxproj | 276 ---
300 win32port/server/server.vcxproj.filters | 51 -
301 win32port/win32helpers/gettimeofday.h | 59 +-
302 win32port/win32helpers/netdb.h | 1 -
303 win32port/win32helpers/strings.h | 0
304 win32port/win32helpers/sys/time.h | 1 -
305 win32port/win32helpers/unistd.h | 0
306 win32port/win32helpers/websock-w32.c | 104 --
307 win32port/win32helpers/websock-w32.h | 62 -
308 win32port/win32port.sln | 100 --
309 win32port/zlib/gzio.c | 3 +-
310 55 files changed, 6779 insertions(+), 5059 deletions(-)
311
Andy Green79002562013-11-09 11:04:35 +0800312
kapejodce64fb02013-11-19 13:38:16 +0100313User api additions
314------------------
315
316POST method is supported
317
318The protocol 0 / HTTP callback can now get two new kinds of callback,
319LWS_CALLBACK_HTTP_BODY (in and len are a chunk of the body of the HTTP request)
320and LWS_CALLBACK_HTTP_BODY_COMPLETION (the expected amount of body has arrived
321and been passed to the user code already). These callbacks are used with the
322post method (see the test server for details).
323
324The period between the HTTP header completion and the completion of the body
325processing is protected by a 5s timeout.
326
327The chunks are stored in a malloc'd buffer of size protocols[0].rx_buffer_size.
328
329
James Devine5b34c972013-12-14 11:41:29 +0800330New server option you can enable from user code
331LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT allows non-SSL connections to
332also be accepted on an SSL listening port. It's disabled unless you enable
333it explicitly.
334
335
Andy Green7a132792013-12-18 09:48:26 +0800336Two new callbacks are added in protocols[0] that are optional for allowing
337limited thread access to libwebsockets, LWS_CALLBACK_LOCK_POLL and
338LWS_CALLBACK_UNLOCK_POLL.
339
340If you use them, they protect internal and external poll list changes, but if
341you want to use external thread access to libwebsocket_callback_on_writable()
342you have to implement your locking here even if you don't use external
343poll support.
344
345If you will use another thread for this, take a lot of care about managing
346your list of live wsi by doing it from ESTABLISHED and CLOSED callbacks
347(with your own locking).
348
Andrew Canaday9769f4f2014-03-23 13:25:07 +0800349If you configure cmake with -DLWS_WITH_LIBEV=1 then the code allowing the libev
350eventloop instead of the default poll() one will also be compiled in. But to
351use it, you must also set the LWS_SERVER_OPTION_LIBEV flag on the context
352creation info struct options member.
Andy Green7a132792013-12-18 09:48:26 +0800353
Andy Greenc1fdd102014-07-06 09:56:11 +0800354IPV6 is supported and enabled by default except for Windows, you can disable
355the support at build-time by giving -DLWS_IPV6=, and disable use of it even if
James Devine3f13ea22014-03-24 16:09:25 +0800356compiled in by making sure the flag LWS_SERVER_OPTION_DISABLE_IPV6 is set on
357the context creation info struct options member.
358
Andy Greenc1fdd102014-07-06 09:56:11 +0800359You can give LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS option flag to
360guarantee the OS CAs will not be used, even if that support was selected at
361build-time.
362
363Optional "token limits" may be enforced by setting the member "token_limits"
364in struct lws_context_creation_info to point to a struct lws_token_limits.
365NULL means no token limits used for compatibility.
366
Andy Green7a132792013-12-18 09:48:26 +0800367
Andy Green79002562013-11-09 11:04:35 +0800368User api changes
369----------------
370
371Extra optional argument to libwebsockets_serve_http_file() allows injecion
372of HTTP headers into the canned response. Eg, cookies may be added like
373that without getting involved in having to send the header by hand.
374
Patrick Gansterer148b9452014-02-28 02:31:23 +0100375A new info member http_proxy_address may be used at context creation time to
376set the http proxy. If non-NULL, it overrides http_proxy environment var.
Andy Green79002562013-11-09 11:04:35 +0800377
Andy Greend2ec7ad2014-03-15 10:39:29 +0800378Cmake supports LWS_SSL_CLIENT_USE_OS_CA_CERTS defaulting to on, which gets
379the client to use the OS CA Roots. If you're worried somebody with the
380ability to forge for force creation of a client cert from the root CA in
381your OS, you should disable this since your selfsigned $0 cert is a lot safer
382then...
383
Andy Green79002562013-11-09 11:04:35 +0800384
Andy Green81877e62013-10-26 20:36:08 +0800385v1.23-chrome32-firefox24
386========================
387
388 Android.mk | 29 +
389 CMakeLists.txt | 573 ++++++++----
390 COPYING | 503 -----------
391 INSTALL | 365 --------
392 Makefile.am | 13 -
393 README.build | 371 ++------
394 README.coding | 63 ++
395 autogen.sh | 1578 ---------------------------------
396 changelog | 69 ++
397 cmake/FindGit.cmake | 163 ++++
398 cmake/FindOpenSSLbins.cmake | 15 +-
399 cmake/UseRPMTools.cmake | 176 ++++
400 config.h.cmake | 25 +-
401 configure.ac | 226 -----
402 cross-arm-linux-gnueabihf.cmake | 28 +
403 lib/Makefile.am | 89 --
404 lib/base64-decode.c | 98 +-
405 lib/client-handshake.c | 123 ++-
406 lib/client-parser.c | 19 +-
407 lib/client.c | 145 ++-
408 lib/daemonize.c | 4 +-
409 lib/extension.c | 2 +-
410 lib/getifaddrs.h | 4 +-
411 lib/handshake.c | 76 +-
412 lib/libwebsockets.c | 491 ++++++----
413 lib/libwebsockets.h | 164 ++--
414 lib/output.c | 214 ++++-
415 lib/parsers.c | 102 +--
416 lib/private-libwebsockets.h | 66 +-
417 lib/server-handshake.c | 5 +-
418 lib/server.c | 29 +-
419 lib/sha-1.c | 2 +-
420 libwebsockets-api-doc.html | 249 +++---
421 libwebsockets.pc.in | 11 -
422 libwebsockets.spec | 14 +-
423 m4/ignore-me | 2 -
424 scripts/FindLibWebSockets.cmake | 33 +
425 scripts/kernel-doc | 1 +
426 test-server/Makefile.am | 131 ---
427 test-server/leaf.jpg | Bin 0 -> 2477518 bytes
428 test-server/test-client.c | 78 +-
429 test-server/test-echo.c | 33 +-
430 test-server/test-fraggle.c | 26 +-
431 test-server/test-ping.c | 15 +-
432 test-server/test-server.c | 197 +++-
433 test-server/test.html | 5 +-
434 win32port/win32helpers/gettimeofday.c | 74 +-
435 win32port/win32helpers/websock-w32.h | 6 +-
436 48 files changed, 2493 insertions(+), 4212 deletions(-)
437
Andy Green54cb3462013-02-14 22:23:54 +0800438
439User api additions
440------------------
441
442 - You can now call libwebsocket_callback_on_writable() on http connectons,
443 and get a LWS_CALLBACK_HTTP_WRITEABLE callback, the same way you can
444 regulate writes with a websocket protocol connection.
445
Andy Green2672fb22013-02-22 09:54:35 +0800446 - A new member in the context creation parameter struct "ssl_cipher_list" is
447 added, replacing CIPHERS_LIST_STRING. NULL means use the ssl library
448 default list of ciphers.
449
Andy Green58f214e2013-03-09 13:03:53 +0800450 - Not really an api addition, but libwebsocket_service_fd() will now zero
451 the revents field of the pollfd it was called with if it handled the
452 descriptor. So you can tell if it is a non-lws fd by checking revents
453 after the service call... if it's still nonzero, the descriptor
454 belongs to you and you need to take care of it.
455
Andy Greenb55451c2013-03-16 12:32:27 +0800456 - libwebsocket_rx_flow_allow_all_protocol(protocol) will unthrottle all
457 connections with the established protocol. It's designed to be
458 called from user server code when it sees it can accept more input
459 and may have throttled connections using the server rx flow apis
460 while it was unable to accept any other input The user server code
461 then does not have to try to track while connections it choked, this
462 will free up all of them in one call.
463
Andy Green0c9563b2013-06-10 22:54:40 +0800464 - there's a new, optional callback LWS_CALLBACK_CLOSED_HTTP which gets
465 called when an HTTP protocol socket closes
466
Andy Green96d48fd2013-09-18 08:32:55 +0800467 - for LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION callback, the user_space alloc
468 has already been done before the callback happens. That means we can
469 use the user parameter to the callback to contain the user pointer, and
470 move the protocol name to the "in" parameter. The docs for this
471 callback are also updated to reflect how to check headers in there.
472
Andy Green5dc62ea2013-09-20 20:26:12 +0800473 - libwebsocket_client_connect() is now properly nonblocking and async. See
474 README.coding and test-client.c for information on the callbacks you
475 can rely on controlling the async connection period with.
476
Andy Green81877e62013-10-26 20:36:08 +0800477 - if your OS does not support the http_proxy environment variable convention
478 (eg, reportedly OSX), you can use a new api libwebsocket_set_proxy()
Peter Pentchevbb085da2015-12-03 15:55:11 +0200479 to set the proxy details in between context creation and the connection
Andy Green81877e62013-10-26 20:36:08 +0800480 action. For OSes that support http_proxy, that's used automatically.
Andy Greenb55451c2013-03-16 12:32:27 +0800481
Andy Green50097dd2013-02-15 22:36:30 +0800482User api changes
483----------------
484
485 - the external poll callbacks now get the socket descriptor coming from the
486 "in" parameter. The user parameter provides the user_space for the
487 wsi as it normally does on the other callbacks.
Edwin van den Oetelaar8c8a8e12013-02-20 20:56:59 +0800488 LWS_CALLBACK_FILTER_NETWORK_CONNECTION also has the socket descriptor
489 delivered by @in now instead of @user.
Andy Green50097dd2013-02-15 22:36:30 +0800490
Andy Greenfc7c5e42013-02-23 10:50:10 +0800491 - libwebsocket_write() now returns -1 for error, or the amount of data
492 actually accepted for send. Under load, the OS may signal it is
493 ready to send new data on the socket, but have only a restricted
494 amount of memory to buffer the packet compared to usual.
495
Andy Green50097dd2013-02-15 22:36:30 +0800496
Andy Greendc914cf2013-02-18 16:54:26 +0800497User api removal
498----------------
499
500 - libwebsocket_ensure_user_space() is removed from the public api, if you
501 were using it to get user_space, you need to adapt your code to only
502 use user_space inside the user callback.
503
Andy Green2672fb22013-02-22 09:54:35 +0800504 - CIPHERS_LIST_STRING is removed
505
Andy Green0097a992013-03-09 13:06:37 +0800506 - autotools build has been removed. See README.build for info on how to
507 use CMake for your platform
508
Andy Green54cb3462013-02-14 22:23:54 +0800509
Andy Green53a46782013-02-14 11:23:49 +0800510v1.21-chrome26-firefox18
511========================
512
513 - Fixes buffer overflow bug in max frame size handling if you used the
514 default protocol buffer size. If you declared rx_buffer_size in your
515 protocol, which is recommended anyway, your code was unaffected.
516
Andy Green182cb9a2013-02-13 11:54:08 +0800517v1.2-chrome26-firefox18
518=======================
519
520Diffstat
521--------
522
523 .gitignore | 16 +++
524 CMakeLists.txt | 544 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
525 LICENSE | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
526 Makefile.am | 1 +
527 README | 20 +++
528 README.build | 258 ++++++++++++++++++++++++++++++++-----
529 README.coding | 52 ++++++++
530 changelog | 136 ++++++++++++++++++++
531 cmake/FindOpenSSLbins.cmake | 33 +++++
532 config.h.cmake | 173 +++++++++++++++++++++++++
533 configure.ac | 22 +++-
534 lib/Makefile.am | 20 ++-
535 lib/base64-decode.c | 2 +-
536 lib/client-handshake.c | 190 +++++++++++-----------------
537 lib/client-parser.c | 88 +++++++------
538 lib/client.c | 384 ++++++++++++++++++++++++++++++-------------------------
539 lib/daemonize.c | 32 +++--
540 lib/extension-deflate-frame.c | 58 +++++----
541 lib/extension-deflate-stream.c | 19 ++-
542 lib/extension-deflate-stream.h | 4 +-
543 lib/extension.c | 11 +-
544 lib/getifaddrs.c | 315 +++++++++++++++++++++++-----------------------
545 lib/getifaddrs.h | 30 ++---
546 lib/handshake.c | 124 +++++++++++-------
547 lib/libwebsockets.c | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------
548 lib/libwebsockets.h | 237 ++++++++++++++++++++++------------
549 lib/output.c | 192 +++++++++++-----------------
550 lib/parsers.c | 966 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------
551 lib/private-libwebsockets.h | 225 +++++++++++++++++++++------------
552 lib/server-handshake.c | 82 ++++++------
553 lib/server.c | 96 +++++++-------
554 libwebsockets-api-doc.html | 189 ++++++++++++++++++----------
555 libwebsockets.spec | 17 +--
556 test-server/attack.sh | 148 ++++++++++++++++++++++
557 test-server/test-client.c | 125 +++++++++---------
558 test-server/test-echo.c | 31 +++--
559 test-server/test-fraggle.c | 32 ++---
560 test-server/test-ping.c | 52 ++++----
561 test-server/test-server.c | 129 ++++++++++++-------
562 win32port/libwebsocketswin32/libwebsocketswin32.vcxproj | 279 ----------------------------------------
563 win32port/libwebsocketswin32/libwebsocketswin32.vcxproj.filters | 23 +++-
564 41 files changed, 4398 insertions(+), 2219 deletions(-)
565
Andy Green7b405452013-02-01 10:50:15 +0800566
567User api additions
568------------------
569
570 - lws_get_library_version() returns a const char * with a string like
571 "1.1 9e7f737", representing the library version from configure.ac
572 and the git HEAD hash the library was built from
573
Andy Greena47865f2013-02-10 09:39:47 +0800574 - TCP Keepalive can now optionally be applied to all lws sockets, on Linux
575 also with controllable timeout, number of probes and probe interval.
576 (On BSD type OS, you can only use system default settings for the
577 timing and retries, although enabling it is supported by setting
578 ka_time to nonzero, the exact value has no meaning.)
579 This enables detection of idle connections which are logically okay,
580 but are in fact dead, due to network connectivity issues at the server,
Andy Greena690cd02013-02-09 12:25:31 +0800581 client, or any intermediary. By default it's not enabled, but you
582 can enable it by setting a non-zero timeout (in seconds) at the new
583 ka_time member at context creation time.
584
Andy Greena7109e62013-02-11 12:05:54 +0800585 - Two new optional user callbacks added, LWS_CALLBACK_PROTOCOL_DESTROY which
586 is called one-time per protocol as the context is being destroyed, and
587 LWS_CALLBACK_PROTOCOL_INIT which is called when the context is created
588 and the protocols are added, again it's a one-time affair.
589 This lets you manage per-protocol allocations properly including
590 cleaning up after yourself when the server goes down.
Andy Green7b405452013-02-01 10:50:15 +0800591
Andy Greened334462013-02-07 21:14:33 +0800592User api changes
593----------------
594
Andy Green1b265272013-02-09 14:01:09 +0800595 - libwebsocket_create_context() has changed from taking a ton of parameters
596 to just taking a pointer to a struct containing the parameters. The
597 struct lws_context_creation_info is in libwebsockets.h, the members
598 are in the same order as when they were parameters to the call
599 previously. The test apps are all updated accordingly so you can
600 see example code there.
601
Andy Greened334462013-02-07 21:14:33 +0800602 - Header tokens are now deleted after the websocket connection is
Andy Green54495112013-02-06 21:10:16 +0900603 established. Not just the header data is saved, but the pointer and
604 length array is also removed from (union) scope saving several hundred
605 bytes per connection once it is established
606
607 - struct libwebsocket_protocols has a new member rx_buffer_size, this
608 controls rx buffer size per connection of that protocol now. Sources
609 for apps built against older versions of the library won't declare
610 this in their protocols, defaulting it to 0. Zero buffer is legal,
611 it causes a default buffer to be allocated (currently 4096)
612
613 If you want to receive only atomic frames in your user callback, you
614 should set this to greater than your largest frame size. If a frame
615 comes that exceeds that, no error occurs but the callback happens as
616 soon as the buffer limit is reached, and again if it is reached again
617 or the frame completes. You can detect that has happened by seeing
618 there is still frame content pending using
619 libwebsockets_remaining_packet_payload()
620
621 By correctly setting this, you can save a lot of memory when your
622 protocol has small frames (see the test server and client sources).
623
Andy Green16ab3182013-02-10 18:02:31 +0800624 - LWS_MAX_HEADER_LEN now defaults to 1024 and is the total amount of known
625 header payload lws can cope with, that includes the GET URL, origin
626 etc. Headers not understood by lws are ignored and their payload
627 not included in this.
628
Andy Green54495112013-02-06 21:10:16 +0900629
630User api removals
631-----------------
632
Andy Green16ab3182013-02-10 18:02:31 +0800633 - The configuration-time option MAX_USER_RX_BUFFER has been replaced by a
634 buffer size chosen per-protocol. For compatibility, there's a default
635 of 4096 rx buffer, but user code should set the appropriate size for
636 the protocol frames.
637
638 - LWS_INITIAL_HDR_ALLOC and LWS_ADDITIONAL_HDR_ALLOC are no longer needed
639 and have been removed. There's a new header management scheme that
640 handles them in a much more compact way.
Andy Greened334462013-02-07 21:14:33 +0800641
Andy Green70edd6f2013-02-12 10:15:25 +0800642 - libwebsockets_hangup_on_client() is removed. If you want to close the
643 connection you must do so from the user callback and by returning
644 -1 from there.
645
Andy Green508946c2013-02-12 10:19:08 +0800646 - libwebsocket_close_and_free_session() is now private to the library code
647 only and not exposed for user code. If you want to close the
648 connection, you must do so from the user callback by returning -1
649 from there.
650
Andy Greened334462013-02-07 21:14:33 +0800651
Andy Greendf60b0c2013-02-06 19:57:12 +0900652New features
653------------
654
Andy Green9b09dc02013-02-08 12:48:36 +0800655 - Cmake project file added, aimed initially at Windows support: this replaces
Andy Green16ab3182013-02-10 18:02:31 +0800656 the visual studio project files that were in the tree until now.
Andy Greendf60b0c2013-02-06 19:57:12 +0900657
Andy Greenc3ef0d62013-02-12 10:50:49 +0800658 - CyaSSL now supported in place of OpenSSL (--use-cyassl on configure)
659
Andy Green9b09dc02013-02-08 12:48:36 +0800660 - PATH_MAX or MAX_PATH no longer needed
Andy Greendf60b0c2013-02-06 19:57:12 +0900661
Andy Green54495112013-02-06 21:10:16 +0900662 - cutomizable frame rx buffer size by protocol
663
Andy Greenc3ef0d62013-02-12 10:50:49 +0800664 - optional TCP keepalive so dead peers can be detected, can be enabled at
665 context-creation time
666
667 - valgrind-clean: no SSL or CyaSSL: completely clean. With OpenSSL, 88 bytes
668 lost at OpenSSL library init and symptomless reports of uninitialized
669 memory usage... seems to be a known and ignored problem at OpenSSL
670
Andy Greena3957ef2013-02-11 09:31:43 +0800671 - By default debug is enabled and the library is built for -O0 -g to faclitate
672 that. Use --disable-debug configure option to build instead with -O4
673 and no -g (debug info), obviously providing best performance and
674 reduced binary size.
Andy Green7b405452013-02-01 10:50:15 +0800675
Andy Green895d56d2013-02-11 09:32:53 +0800676 - 1.0 introduced some code to try to not deflate small frames, however this
677 seems to break when confronted with a mixture of frames above and
678 below the threshold, so it's removed. Veto the compression extension
679 in your user callback if you will typically have very small frames.
680
Andy Green16ab3182013-02-10 18:02:31 +0800681 - There are many memory usage improvements, both a reduction in malloc/
682 realloc and architectural changes. A websocket connection now
683 consumes only 296 bytes with SSL or 272 bytes without on x86_64,
684 during header processing an additional 1262 bytes is allocated in a
685 single malloc, but is freed when the websocket connection starts.
686 The RX frame buffer defined by the protocol in user
687 code is also allocated per connection, this represents the largest
688 frame you can receive atomically in that protocol.
689
Andy Greenc3ef0d62013-02-12 10:50:49 +0800690 - On ARM9 build, just http+ws server no extensions or ssl, <12Kbytes .text
691 and 112 bytes per connection (+1328 only during header processing)
692
Andy Green895d56d2013-02-11 09:32:53 +0800693
Andy Greenbd1132f2013-01-31 19:53:05 +0800694v1.1-chrome26-firefox18
Andy Greena35c86f2013-01-31 10:16:44 +0800695=======================
696
697Diffstat
698--------
699
700 Makefile.am | 4 +
701 README-test-server | 291 ---
702 README.build | 239 ++
703 README.coding | 138 ++
704 README.rst | 72 -
705 README.test-apps | 272 +++
706 configure.ac | 116 +-
707 lib/Makefile.am | 55 +-
708 lib/base64-decode.c | 5 +-
709 lib/client-handshake.c | 121 +-
710 lib/client-parser.c | 394 ++++
711 lib/client.c | 807 +++++++
712 lib/daemonize.c | 212 ++
713 lib/extension-deflate-frame.c | 132 +-
714 lib/extension-deflate-stream.c | 12 +-
715 lib/extension-x-google-mux.c | 1223 ----------
716 lib/extension-x-google-mux.h | 96 -
717 lib/extension.c | 8 -
718 lib/getifaddrs.c | 271 +++
719 lib/getifaddrs.h | 76 +
720 lib/handshake.c | 582 +----
721 lib/libwebsockets.c | 2493 ++++++---------------
722 lib/libwebsockets.h | 115 +-
723 lib/md5.c | 217 --
724 lib/minilex.c | 440 ++++
725 lib/output.c | 628 ++++++
726 lib/parsers.c | 2016 +++++------------
727 lib/private-libwebsockets.h | 284 +--
728 lib/server-handshake.c | 275 +++
729 lib/server.c | 377 ++++
730 libwebsockets-api-doc.html | 300 +--
731 m4/ignore-me | 2 +
732 test-server/Makefile.am | 111 +-
733 test-server/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes
734 test-server/test-client.c | 45 +-
735 test-server/test-echo.c | 330 +++
736 test-server/test-fraggle.c | 20 +-
737 test-server/test-ping.c | 22 +-
738 test-server/test-server-extpoll.c | 554 -----
739 test-server/test-server.c | 349 ++-
740 test-server/test.html | 3 +-
741 win32port/zlib/ZLib.vcxproj | 749 ++++---
742 win32port/zlib/ZLib.vcxproj.filters | 188 +-
743 win32port/zlib/adler32.c | 348 ++-
744 win32port/zlib/compress.c | 160 +-
745 win32port/zlib/crc32.c | 867 ++++----
746 win32port/zlib/crc32.h | 882 ++++----
747 win32port/zlib/deflate.c | 3799 +++++++++++++++-----------------
748 win32port/zlib/deflate.h | 688 +++---
749 win32port/zlib/gzclose.c | 50 +-
750 win32port/zlib/gzguts.h | 325 ++-
751 win32port/zlib/gzlib.c | 1157 +++++-----
752 win32port/zlib/gzread.c | 1242 ++++++-----
753 win32port/zlib/gzwrite.c | 1096 +++++----
754 win32port/zlib/infback.c | 1272 ++++++-----
755 win32port/zlib/inffast.c | 680 +++---
756 win32port/zlib/inffast.h | 22 +-
757 win32port/zlib/inffixed.h | 188 +-
758 win32port/zlib/inflate.c | 2976 +++++++++++++------------
759 win32port/zlib/inflate.h | 244 +-
760 win32port/zlib/inftrees.c | 636 +++---
761 win32port/zlib/inftrees.h | 124 +-
762 win32port/zlib/trees.c | 2468 +++++++++++----------
763 win32port/zlib/trees.h | 256 +--
764 win32port/zlib/uncompr.c | 118 +-
765 win32port/zlib/zconf.h | 934 ++++----
766 win32port/zlib/zlib.h | 3357 ++++++++++++++--------------
767 win32port/zlib/zutil.c | 642 +++---
768 win32port/zlib/zutil.h | 526 ++---
769 69 files changed, 19556 insertions(+), 20145 deletions(-)
770
771user api changes
772----------------
773
774 - libwebsockets_serve_http_file() now takes a context as first argument
775
776 - libwebsockets_get_peer_addresses() now takes a context and wsi as first
777 two arguments
778
779
780user api additions
781------------------
782
783 - lwsl_...() logging apis, default to stderr but retargetable by user code;
784 may be used also by user code
785
786 - lws_set_log_level() set which logging apis are able to emit (defaults to
787 notice, warn, err severities), optionally set the emit callback
788
789 - lwsl_emit_syslog() helper callback emits to syslog
790
791 - lws_daemonize() helper code that forks the app into a headless daemon
792 properly, maintains a lock file with pid in suitable for sysvinit etc to
793 control lifecycle
794
795 - LWS_CALLBACK_HTTP_FILE_COMPLETION callback added since http file
796 transfer is now asynchronous (see test server code)
797
798 - lws_frame_is_binary() from a wsi pointer, let you know if the received
799 data was sent in BINARY mode
800
801
802user api removals
803-----------------
804
805 - libwebsockets_fork_service_loop() - no longer supported (had intractable problems)
806 arrange your code to act from the user callback instead from same
807 process context as the service loop
808
809 - libwebsockets_broadcast() - use libwebsocket_callback_on_writable[_all_protocol]()
810 instead from same process context as the service loop. See the test apps
811 for examples.
812
813 - x-google-mux() removed until someone wants it
814
815 - pre -v13 (ancient) protocol support removed
816
817
818New features
819------------
820
821 - echo test server and client compatible with echo.websocket.org added
822
823 - many new configure options (see README.build) to reduce footprint of the
824 library to what you actually need, eg, --without-client and
825 --without-server
826
827 - http + websocket server can build to as little as 12K .text for ARM
828
829 - no more MAX_CLIENTS limitation; adapts to support the max number of fds
830 allowed to the process by ulimit, defaults to 1024 on Fedora and
831 Ubuntu. Use ulimit to control this without needing to configure
832 the library. Code here is smaller and faster.
833
834 - adaptive ratio of listen socket to connection socket service allows
835 good behaviour under Apache ab test load. Tested with thousands
836 of simultaneous connections
837
838 - reduction in per-connection memory footprint by moving to a union to hold
839 mutually-exclusive state for the connection
840
841 - robustness: Out of Memory taken care of for all allocation code now
842
843 - internal getifaddrs option if your toolchain lacks it (some uclibc)
844
845 - configurable memory limit for deflate operations
846
847 - improvements in SSL code nonblocking operation, possible hang solved,
848 some SSL operations broken down into pollable states so there is
849 no library blocking, timeout coverage for SSL_connect
850
851 - extpoll test server merged into single test server source
852
853 - robustness: library should deal with all recoverable socket conditions
854
855 - rx flowcontrol for backpressure notification fixed and implmeneted
856 correctly in the test server
857
858 - optimal lexical parser added for header processing; all headers in a
859 single 276-byte state table
860
861 - latency tracking api added (configure --with-latency)
862
863 - Improved in-tree documentation, REAME.build, README.coding,
864 README.test-apps, changelog
865
866 - Many small fixes
867
868
869v1.0-chrome25-firefox17 (6cd1ea9b005933f)