v2.0.0
[platform/upstream/libwebsockets.git] / changelog
1 Changelog
2 ---------
3
4 v2.0.0
5 ======
6
7 Summary
8 -------
9
10  - There are only api additions, the api is compatible with v1.7.x.  But
11    there is necessarily an soname bump to 8.
12  
13  - If you are using lws client, you mainly need to be aware the option
14    LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT is needed at context-creation time
15    if you will use SSL.
16    
17  - If you are using lws for serving, the above is also true but there are
18    many new features to simplify your code (and life).  There is a
19    summany online here
20    
21      https://libwebsockets.org/lws-2.0-new-features.html
22      
23    but basically the keywords are vhosts, mounts and plugins.  You can now
24    do the web serving part from lws without any user callback code at all.
25    See ./test-server/test-server-v2.0.c for an example, it has no user
26    code for ws either since it uses the protocol plugins... that one C file
27    is all that is needed to do the whole test server function.
28    
29    You now have the option to use a small generic ws-capable webserver
30    "lwsws" and write your ws part as a plugin.  That eliminates even
31    cut-and-pasting the test server code and offers more configurable
32    features like control over http cacheability in JSON.
33
34
35 Fixes
36 -----
37
38 These are already in 1.7.x series
39
40 1) MAJOR (Windows-only) fix assert firing
41
42 2) MAJOR http:/1.1 connections handled by  lws_return_http_status() did not
43 get sent a content-length resulting in the link hanging until the peer closed
44 it.  attack.sh updated to add a test for this.
45
46 3) MINOR An error about hdr struct in _lws_ws_related is corrected, it's not
47 known to affect anything until after it was fixed
48
49 4) MINOR During the close shutdown wait state introduced at v1.7, if something
50 requests callback on writeable for the socket it will busywait until the
51 socket closes
52
53 5) MAJOR Although the test server has done it for a few versions already, it
54 is now required for the user code to explicitly call
55
56         if (lws_http_transaction_completed(wsi))
57                 return -1;
58
59 when it finishes replying to a transaction in http.  Previously the library
60 did it for you, but that disallowed large, long transfers with multiple
61 trips around the event loop (and cgi...).
62
63 6) MAJOR connections on ah waiting list that closed did not get removed from
64 the waiting list...
65
66 7) MAJOR since we added the ability to hold an ah across http keepalive
67 transactions where more headers had already arrived, we broke the ability
68 to tell if more headers had arrived.  Result was if the browser didn't
69 close the keepalive, we retained ah for the lifetime of the keepalive,
70 using up the pool.
71
72 8) MAJOR windows-only-POLLHUP was not coming
73
74 9) Client should not send ext hdr if no exts
75
76 Changes
77 -------
78
79 1) MINOR test-server gained some new switches
80
81    -C <file>  use external SSL cert file
82    -K <file>  use external SSL key file
83    -A <file>  use external SSL CA cert file
84    
85    -u <uid>  set effective uid
86    -g <gid>  set effective gid
87
88 together you can use them like this to have the test-server work with the
89 usual purchased SSL certs from an official CA.
90
91    --ssl -C your.crt -K your.key -A your.cer -u 99 -g 99
92
93 2) MINOR the OpenSSL magic to setup ECDH cipher usage is implemented in the
94 library, and the ciphers restricted to use ECDH only.
95 Using this, the lws test server can score an A at SSLLABS test
96
97 3) MINOR STS (SSL always) header is added to the test server if you use --ssl.  With
98 that, we score A+ at SSLLABS test
99
100 4) MINOR daemonize function (disabled at cmake by default) is updated to work
101 with systemd
102
103 5) MINOR example systemd .service file now provided for test server
104 (not installed by default)
105
106 6) test server html is updated with tabs and a new live server monitoring
107 feature.  Input sanitization added to the js.
108
109 7) client connections attempted when no ah is free no longer fail, they are
110 just deferred until an ah becomes available.
111
112 8) The test client pays attention to if you give it an http:/ or https://
113 protocol string to its argument in URL format.  If so, it stays in http[s]
114 client mode and doesn't upgrade to ws[s], allowing you to do generic http client
115 operations.  Receiving transfer-encoding: chunked is supported.
116
117 9) If you enable -DLWS_WITH_HTTP_PROXY=1 at cmake, the test server has a
118 new URI path http://localhost:7681/proxytest If you visit here, a client
119 connection to http://example.com:80 is spawned, and the results piped on
120 to your original connection.
121
122 10) Also with LWS_WITH_HTTP_PROXY enabled at cmake, lws wants to link to an
123 additional library, "libhubbub".  This allows lws to do html rewriting on the
124 fly, adjusting proxied urls in a lightweight and fast way.
125
126 11) There's a new context creation flag LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT,
127 this is included automatically if you give any other SSL-related option flag.
128 If you give no SSL-related option flag, nor this one directly, then even
129 though SSL support may be compiled in, it is never initialized nor used for the
130 whole lifetime of the lws context.
131
132 Conversely in order to prepare the context to use SSL, even though, eg, you
133 are not listening on SSL but will use SSL client connections later, you must
134 give this flag explicitly to make sure SSL is initialized.
135
136
137 User API additions
138 ------------------
139
140 1) MINOR APIBREAK There's a new member in struct lws_context_creation_info, ecdh_curve,
141 which lets you set the name of the ECDH curve OpenSSL should use.  By
142 default (if you leave ecdh_curve NULL) it will use "prime256v1"
143
144 2) MINOR NEWAPI It was already possible to adopt a foreign socket that had not
145 been read from using lws_adopt_socket() since v1.7.  Now you can adopt a
146 partially-used socket if you don't need SSL, by passing it what you read
147 so it can drain that before reading from the socket.
148
149 LWS_VISIBLE LWS_EXTERN struct lws *
150 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
151                 const char *readbuf, size_t len);
152
153 3) MINOR NEWAPI CGI type "network io" subprocess execution is now possible from
154 a simple api.
155
156 LWS_VISIBLE LWS_EXTERN int
157 lws_cgi(struct lws *wsi, char * const *exec_array,  int script_uri_path_len,
158         int timeout_secs);
159
160 LWS_VISIBLE LWS_EXTERN int
161 lws_cgi_kill(struct lws *wsi);
162
163 To use it, you must first set the cmake option
164
165 $ cmake .. -DLWS_WITH_CGI=1
166
167 See test-server-http.c and  test server path
168
169 http://localhost:7681/cgitest
170
171 stdin gets http body, you can test it with wget
172
173 $ echo hello > hello.txt
174 $ wget http://localhost:7681/cgitest --post-file=hello.txt -O- --quiet
175 lwstest script
176 read="hello"
177
178 The test script returns text/html table showing /proc/meminfo.  But the cgi
179 support is complete enough to run cgit cgi.
180
181 4) There is a helper api for forming logging timestamps
182
183 LWS_VISIBLE int
184 lwsl_timestamp(int level, char *p, int len)
185
186 this generates this kind of timestamp for use as logging preamble
187
188 lwsts[13116]: [2016/01/25 14:52:52:8386] NOTICE: Initial logging level 7
189
190 5) struct lws_client_connect_info has a new member
191
192  const char *method
193  
194 If it's NULL, then everything happens as before, lws_client_connect_via_info()
195 makes a ws or wss connection to the address given.
196
197 If you set method to a valid http method like "GET", though, then this method
198 is used and the connection remains in http[s], it's not upgraded to ws[s].
199
200 So with this, you can perform http[s] client operations as well as ws[s] ones.
201
202 There are 4 new related callbacks
203
204         LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP                    = 44,
205         LWS_CALLBACK_CLOSED_CLIENT_HTTP                         = 45,
206         LWS_CALLBACK_RECEIVE_CLIENT_HTTP                        = 46,
207         LWS_CALLBACK_COMPLETED_CLIENT_HTTP                      = 47,
208
209 6) struct lws_client_connect_info has a new member
210
211  const char *parent_wsi
212  
213 if non-NULL, the client wsi is set to be a child of parent_wsi.  This ensures
214 if parent_wsi closes, then the client child is closed just before.
215
216 7) If you're using SSL, there's a new context creation-time option flag
217 LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS.  If you give this, non-ssl
218 connections to the server listen port are accepted and receive a 301
219 redirect to / on the same host and port using https://
220
221 8) User code may set per-connection extension options now, using a new api
222 "lws_set_extension_option()".
223
224 This should be called from the ESTABLISHED callback like this
225
226  lws_set_extension_option(wsi, "permessage-deflate",
227                           "rx_buf_size", "12"); /* 1 << 12 */
228
229 If the extension is not active (missing or not negotiated for the
230 connection, or extensions are disabled on the library) the call is
231 just returns -1.  Otherwise the connection's extension has its
232 named option changed.
233
234 The extension may decide to alter or disallow the change, in the
235 example above permessage-deflate restricts the size of his rx
236 output buffer also considering the protocol's rx_buf_size member.
237
238
239 New application lwsws
240 ---------------------
241
242 A libwebsockets-based general webserver is built by default now, lwsws.
243
244 It's configured by JSON, by default in
245
246   /etc/lwsws/conf
247
248 which contains global lws context settings like this
249
250 {
251   "global": {
252    "uid": "99",
253    "gid": "99",
254    "interface": "eth0",
255    "count-threads": "1"
256  }
257 }
258
259   /etc/lwsws/conf.d/*
260
261 which contains zero or more files describing vhosts, like this
262
263 {
264  "vhosts": [
265   { "name": "warmcat.com",
266     "port": "443",
267     "host-ssl-key": "/etc/pki/tls/private/warmcat.com.key",
268     "host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt",
269     "host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer",
270     "mounts": [
271       { "/": [
272        { "home": "file:///var/www/warmcat.com" },
273        { "default": "index.html" }
274       ]
275      }
276     ]
277    }
278  ]
279 }
280
281
282
283 v1.7.0
284 ======
285
286 Extension Changes
287 -----------------
288
289 1) There is now a "permessage-deflate" / RFC7692 implementation.  It's very
290 similar to "deflate-frame" we have offered for a long while; deflate-frame is
291 now provided as an alias of permessage-deflate.
292
293 The main differences are that the new permessage-deflate implementation:
294
295  - properly performs streaming respecting input and output buffer limits.  The
296    old deflate-frame implementation could only work on complete deflate input
297    and produce complete inflate output for each frame.  The new implementation
298    only mallocs buffers at initialization.
299
300  - goes around the event loop after each input package is processed allowing
301    interleaved output processing.  The RX flow control api can be used to
302    force compressed input processing to match the rate of compressed output
303    processing (test--echo shows an example of how to do this).
304
305  - when being "deflate-frame" for compatibility he uses the same default zlib
306    settings as the old "deflate-frame", but instead of exponentially increasing
307    malloc allocations until the whole output will fit, he observes the default
308    input and output chunking buffer sizes of "permessage-deflate", that's
309    1024 in and 1024 out at a time.
310
311 2) deflate-stream has been disabled for many versions (for over a year) and is
312 now removed.  Browsers are now standardizing on "permessage-deflate" / RFC7692
313
314 3) struct lws_extension is simplified, and lws extensions now have a public
315 api (their callback) for use in user code to compose extensions and options
316 the user code wants.  lws_get_internal_exts() is deprecated but kept around
317 as a NOP.  The changes allow one extension implementation to go by different
318 names and allows the user client code to control option offers per-ext.
319
320 The test client and server are updated to use the new way.  If you use
321 the old way it should still work, but extensions will be disabled until you
322 update your code.
323
324 Extensions are now responsible for allocating and per-instance private struct
325 at instance construction time and freeing it when the instance is destroyed.
326 Not needing to know the size means the extension's struct can be opaque
327 to user code.
328
329
330 User api additions
331 ------------------
332
333 1) The info struct gained three new members
334
335  - max_http_header_data: 0 for default (1024) or set the maximum amount of known
336     http header payload that lws can deal with.  Payload in unknown http
337     headers is dropped silently.  If for some reason you need to send huge
338     cookies or other HTTP-level headers, you can now increase this at context-
339     creation time.
340
341  - max_http_header_pool: 0 for default (16) or set the maximum amount of http
342      headers that can be tracked by lws in this context.  For the server, if
343      the header pool is completely in use then accepts on the listen socket
344      are disabled until one becomes free.  For the client, if you simultaneously
345      have pending connects for more than this number of client connections,
346      additional connects will fail until some of the pending connections timeout
347      or complete.
348
349  - timeout_secs: 0 for default (currently 20s), or set the library's
350      network activity timeout to the given number of seconds
351
352 HTTP header processing in lws only exists until just after the first main
353 callback after the HTTP handshake... for ws connections that is ESTABLISHED and
354 for HTTP connections the HTTP callback.
355
356 So these settings are not related to the maximum number of simultaneous
357 connections, but the number of HTTP handshakes that may be expected or ongoing,
358 or have just completed, at one time.  The reason it's useful is it changes the
359 memory allocation for header processing to be one-time at context creation
360 instead of every time there is a new connection, and gives you control over
361 the peak allocation.
362
363 Setting max_http_header_pool to 1 is fine it will just queue incoming
364 connections before the accept as necessary, you can still have as many
365 simultaneous post-header connections as you like.  Since the http header
366 processing is completed and the allocation released after ESTABLISHED or the
367 HTTP callback, even with a pool of 1 many connections can be handled rapidly.
368
369 2) There is a new callback that allows the user code to get acccess to the
370 optional close code + aux data that may have been sent by the peer.
371
372 LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
373              The peer has sent an unsolicited Close WS packet.  @in and
374              @len are the optional close code (first 2 bytes, network
375              order) and the optional additional information which is not
376              defined in the standard, and may be a string or non-human-
377              readble data.
378              If you return 0 lws will echo the close and then close the
379              connection.  If you return nonzero lws will just close the
380              connection.
381
382 As usual not handling it does the right thing, if you're not interested in it
383 just ignore it.
384
385 The test server has "open and close" testing buttons at the bottom, if you
386 open and close that connection, on close it will send a close code 3000 decimal
387 and the string "Bye!" as the aux data.
388
389 The test server dumb-increment callback handles this callback reason and prints
390
391 lwsts[15714]: LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: len 6
392 lwsts[15714]:  0: 0x0B
393 lwsts[15714]:  1: 0xB8
394 lwsts[15714]:  2: 0x42
395 lwsts[15714]:  3: 0x79
396 lwsts[15714]:  4: 0x65
397 lwsts[15714]:  5: 0x21
398
399 3) There is a new API to allow the user code to control the content of the
400 close frame sent when about to return nonzero from the user callback to
401 indicate the connection should close.
402
403 /**
404  * lws_close_reason - Set reason and aux data to send with Close packet
405  *              If you are going to return nonzero from the callback
406  *              requesting the connection to close, you can optionally
407  *              call this to set the reason the peer will be told if
408  *              possible.
409  *
410  * @wsi:        The websocket connection to set the close reason on
411  * @status:     A valid close status from websocket standard
412  * @buf:        NULL or buffer containing up to 124 bytes of auxiliary data
413  * @len:        Length of data in @buf to send
414  */
415 LWS_VISIBLE LWS_EXTERN void
416 lws_close_reason(struct lws *wsi, enum lws_close_status status,
417                  unsigned char *buf, size_t len);
418
419 An extra button is added to the "open and close" test server page that requests
420 that the test server close the connection from his end.
421
422 The test server code will do so by
423
424                         lws_close_reason(wsi, LWS_CLOSE_STATUS_GOINGAWAY,
425                                          (unsigned char *)"seeya", 5);
426                         return -1;
427
428 The browser shows the close code and reason he received
429
430 websocket connection CLOSED, code: 1001, reason: seeya
431
432 4) There's a new context creation time option flag
433
434 LWS_SERVER_OPTION_VALIDATE_UTF8
435
436 if you set it in info->options, then TEXT and CLOSE frames will get checked to
437 confirm that they contain valid UTF-8.  If they don't, the connection will get
438 closed by lws.
439
440 5) ECDH Certs are now supported.  Enable the CMake option
441
442 cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1 
443
444 **and** the info->options flag
445
446 LWS_SERVER_OPTION_SSL_ECDH
447
448 to build in support and select it at runtime.
449
450 6) There's a new api lws_parse_uri() that simplifies chopping up
451 https://xxx:yyy/zzz uris into parts nicely.  The test client now uses this
452 to allow proper uris as well as the old address style.
453
454 7) SMP support is integrated into LWS without any internal threading.  It's
455 very simple to use, libwebsockets-test-server-pthread shows how to do it,
456 use -j <n> argument there to control the number of service threads up to 32.
457
458 Two new members are added to the info struct
459
460         unsigned int count_threads;
461         unsigned int fd_limit_per_thread;
462         
463 leave them at the default 0 to get the normal singlethreaded service loop.
464
465 Set count_threads to n to tell lws you will have n simultaneous service threads
466 operating on the context.
467
468 There is still a single listen socket on one port, no matter how many
469 service threads.
470
471 When a connection is made, it is accepted by the service thread with the least
472 connections active to perform load balancing.
473
474 The user code is responsible for spawning n threads running the service loop
475 associated to a specific tsi (Thread Service Index, 0 .. n - 1).  See
476 the libwebsockets-test-server-pthread for how to do.
477
478 If you leave fd_limit_per_thread at 0, then the process limit of fds is shared
479 between the service threads; if you process was allowed 1024 fds overall then
480 each thread is limited to 1024 / n.
481
482 You can set fd_limit_per_thread to a nonzero number to control this manually, eg
483 the overall supported fd limit is less than the process allowance.
484
485 You can control the context basic data allocation for multithreading from Cmake
486 using -DLWS_MAX_SMP=, if not given it's set to 32.  The serv_buf allocation
487 for the threads (currently 4096) is made at runtime only for active threads.
488
489 Because lws will limit the requested number of actual threads supported
490 according to LWS_MAX_SMP, there is an api lws_get_count_threads(context) to
491 discover how many threads were actually allowed when the context was created.
492
493 It's required to implement locking in the user code in the same way that
494 libwebsockets-test-server-pthread does it, for the FD locking callbacks.
495
496 If LWS_MAX_SMP=1, then there is no code related to pthreads compiled in the
497 library.  If more than 1, a small amount of pthread mutex code is built into
498 the library.
499
500 8) New API
501
502 LWS_VISIBLE struct lws *
503 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
504
505 allows foreign sockets accepted by non-lws code to be adopted by lws as if they
506 had just been accepted by lws' own listen socket.
507
508 9) X-Real-IP: header has been added as WSI_TOKEN_HTTP_X_REAL_IP
509
510 10) Libuv support is added, there are new related user apis
511
512 typedef void (lws_uv_signal_cb_t)(uv_loop_t *l, uv_signal_t *w, int revents);
513
514 LWS_VISIBLE LWS_EXTERN int
515 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
516                   lws_uv_signal_cb_t *cb);
517
518 LWS_VISIBLE LWS_EXTERN int
519 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
520
521 LWS_VISIBLE void
522 lws_uv_sigint_cb(uv_loop_t *loop, uv_signal_t *watcher, int revents);
523
524 and CMAKE option
525
526 LWS_WITH_LIBUV
527
528
529 User api changes
530 ----------------
531
532 1) LWS_SEND_BUFFER_POST_PADDING is now 0 and deprecated.  You can remove it; if
533 you still use it, obviously it does nothing.  Old binary code with nonzero
534 LWS_SEND_BUFFER_POST_PADDING is perfectly compatible, the old code just
535 allocated a buffer bigger than the library is going to use.
536
537 The example apps no longer use LWS_SEND_BUFFER_POST_PADDING.
538
539 The only path who made use of it was sending with LWS_WRITE_CLOSE --->
540
541 2) Because of lws_close_reason() formalizing handling close frames,
542 LWS_WRITE_CLOSE is removed from libwebsockets.h.  It was only of use to send
543 close frames...close frame content should be managed using lws_close_reason()
544 now.
545
546 3) We check for invalid CLOSE codes and complain about protocol violation in
547 our close code.  But it changes little since we were in the middle of closing
548 anyway.
549
550 4) zero-length RX frames and zero length TX frames are now allowed.
551
552 5) Pings and close used to be limited to 124 bytes, the correct limit is 125
553 so that is now also allowed.
554
555 6) LWS_PRE is provided as a synonym for LWS_SEND_BUFFER_PRE_PADDING, either is
556 valid to use now.
557
558 7) There's generic support for RFC7462 style extension options built into the
559 library now.  As a consequence, a field "options" is added to lws_extension.
560 It can be NULL if there are no options on the extension.  Extension internal
561 info is part of the public abi because extensions may be implemented outside
562 the library.
563
564 8) WSI_TOKEN_PROXY enum was accidentally defined to collide with another token
565 of value 73.  That's now corrected and WSI_TOKEN_PROXY moved to his own place at
566 77.
567
568 9) With the addition of libuv support, libev is not the only event loop
569 library in town and his api names must be elaborated with _ev_
570
571   Callback typedef: lws_signal_cb ---> lws_ev_signal_cb_t
572   lws_sigint_cfg --> lws_ev_sigint_cfg
573   lws_initloop --> lws_ev_initloop
574   lws_sigint_cb --> lws_ev_sigint_cb
575
576 10) Libev support is made compatible with multithreaded service,
577 lws_ev_initloop (was lws_initloop) gets an extra argument for the
578 thread service index (use 0 if you will just have 1 service thread).
579
580 LWS_VISIBLE LWS_EXTERN int
581 lws_ev_initloop(struct lws_context *context, ev_loop_t *loop, int tsi);
582
583
584 v1.6.0-chrome48-firefox42
585 =======================
586
587 Major API improvements
588 ----------------------
589
590 v1.6.0 has many cleanups and improvements in the API.  Although at first it
591 looks pretty drastic, user code will only need four actions to update it.
592
593  - Do the three search/replaces in your user code, /libwebsocket_/lws_/,
594    /libwebsockets_/lws_/, and /struct\ libwebsocket/struct\ lws/
595
596  - Remove the context parameter from your user callbacks
597
598  - Remove context as the first parameter from the "Eleven APIS" listed in the
599    User Api Changes section
600
601  - Add lws_get_context(wsi) as the first parameter on the "Three APIS" listed
602    in the User Api Changes section, and anywhere else you still need context
603
604 That's it... generally only a handful of the 14 affected APIs are actually in
605 use in your user code and you can find them quickest by compiling and visiting
606 the errors each in turn.  And the end results are much cleaner, more
607 predictable and maintainable.
608
609
610 User api additions
611 ------------------
612
613 1) lws now exposes his internal platform file abstraction in a way that can be
614 both used by user code to make it platform-agnostic, and be overridden or
615 subclassed by user code.  This allows things like handling the URI "directory
616 space" as a virtual filesystem that may or may not be backed by a regular
617 filesystem.  One example use is serving files from inside large compressed
618 archive storage without having to unpack anything except the file being
619 requested.
620
621 The test server shows how to use it, basically the platform-specific part of
622 lws prepares a file operations structure that lives in the lws context.
623
624 Helpers are provided to also leverage these platform-independent file handling
625 apis
626
627 static inline lws_filefd_type
628 lws_plat_file_open(struct lws *wsi, const char *filename,
629                    unsigned long *filelen, int flags)
630 static inline int
631 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
632
633 static inline unsigned long
634 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
635
636 static inline int
637 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
638                    unsigned char *buf, unsigned long len)
639
640 static inline int
641 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
642                     unsigned char *buf, unsigned long len)
643                     
644 The user code can also override or subclass the file operations, to either
645 wrap or replace them.  An example is shown in test server.
646
647 A wsi can be associated with the file activity, allowing per-connection
648 authentication and state to be used when interpreting the file request.
649
650 2) A new API void * lws_wsi_user(struct lws *wsi) lets you get the pointer to
651 the user data associated with the wsi, just from the wsi.
652
653 3) URI argument handling.  Libwebsockets parses and protects URI arguments
654 like test.html?arg1=1&arg2=2, it decodes %xx uriencoding format and reduces
655 path attacks like ../.../../etc/passwd so they cannot go behind the web
656 server's /.  There is a list of confirmed attacks we're proof against in
657 ./test-server/attack.sh.
658
659 There is a new API lws_hdr_copy_fragment that should be used now to access
660 the URI arguments (it returns the fragments length)
661
662                while (lws_hdr_copy_fragment(wsi, buf, sizeof(buf),
663                                             WSI_TOKEN_HTTP_URI_ARGS, n) > 0) {
664                        lwsl_info("URI Arg %d: %s\n", ++n, buf);
665                }
666
667 For the example above, calling with n=0 will return "arg1=1" and n=1 "arg2=2".
668 All legal uriencodings will have been reduced in those strings.
669
670 lws_hdr_copy_fragment() returns the length of the x=y fragment, so it's also
671 possible to deal with arguments containing %00.  If you don't care about that,
672 the returned string has '\0' appended to simplify processing.
673
674
675 User api changes
676 ----------------
677
678 1) Three APIS
679
680  - lws_callback_on_writable_all_protocol(const struct lws_protocols *protocol)
681  - lws_callback_all_protocol(const struct lws_protocols *protocol)
682  - lws_rx_flow_allow_all_protocol(lws_rx_flow_allow_all_protocol)
683
684 Now take an additional pointer to the lws_context in their first argument.
685
686 The reason for this change is struct lws_protocols has been changed to remove
687 members that lws used for private storage: so the protocols struct in now
688 truly const and may be reused serially or simultaneously by different contexts.
689
690 2) Eleven APIs
691
692 LWS_VISIBLE LWS_EXTERN int
693 lws_add_http_header_by_name(struct lws_context *context,
694                 struct lws *wsi,
695                 const unsigned char *name,
696                 const unsigned char *value,
697                 int length,
698                 unsigned char **p,
699                 unsigned char *end);
700 LWS_VISIBLE LWS_EXTERN int
701 lws_finalize_http_header(struct lws_context *context,
702              struct lws *wsi,
703              unsigned char **p,
704              unsigned char *end);
705 LWS_VISIBLE LWS_EXTERN int
706 lws_add_http_header_by_token(struct lws_context *context,
707                  struct lws *wsi,
708                  enum lws_token_indexes token,
709                  const unsigned char *value,
710                  int length,
711                  unsigned char **p,
712                  unsigned char *end);
713 LWS_VISIBLE LWS_EXTERN int
714 lws_add_http_header_content_length(struct lws_context *context,
715                    struct lws *wsi,
716                    unsigned long content_length,
717                    unsigned char **p,
718                    unsigned char *end);
719 LWS_VISIBLE LWS_EXTERN int
720 lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
721                unsigned int code, unsigned char **p,
722                unsigned char *end);
723
724 LWS_VISIBLE LWS_EXTERN int
725 lws_serve_http_file(struct lws_context *context, struct lws *wsi,
726             const char *file, const char *content_type,
727             const char *other_headers, int other_headers_len);
728 LWS_VISIBLE LWS_EXTERN int
729 lws_serve_http_file_fragment(struct lws_context *context, struct lws *wsi);
730
731 LWS_VISIBLE LWS_EXTERN int
732 lws_return_http_status(struct lws_context *context, struct lws *wsi,
733                unsigned int code, const char *html_body);
734
735 LWS_VISIBLE LWS_EXTERN int
736 lws_callback_on_writable(const struct lws_context *context, struct lws *wsi);
737
738 LWS_VISIBLE LWS_EXTERN void
739 lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
740                lws_sockfd_type fd, char *name, int name_len,
741                char *rip, int rip_len);
742
743 LWS_VISIBLE LWS_EXTERN int
744 lws_read(struct lws_context *context, struct lws *wsi,
745      unsigned char *buf, size_t len); 
746
747 no longer require their initial struct lws_context * parameter.
748
749 3) Several older apis start with libwebsocket_ or libwebsockets_ while newer ones
750 all begin lws_.  These apis have been changed to all begin with lws_.
751
752 To convert, search-replace
753
754  - libwebsockets_/lws_
755  - libwebsocket_/lws_
756  - struct\ libwebsocket/struct\ lws
757  
758 4) context parameter removed from user callback.
759
760 Since almost all apis no longer need the context as a parameter, it's no longer
761 provided at the user callback directly.
762
763 However if you need it, for ALL callbacks wsi is valid and has a valid context
764 pointer you can recover using lws_get_context(wsi).
765
766
767 v1.5-chrome47-firefox41
768 =======================
769
770 User api changes
771 ----------------
772
773 LWS_CALLBACK_CLIENT_CONNECTION_ERROR may provide an error string if in is
774 non-NULL.  If so, the string has length len.
775
776 LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED is available to relax the requirement
777 for peer certs if you are using the option to require client certs.
778
779 LWS_WITHOUT_BUILTIN_SHA1 cmake option forces lws to use SHA1() defined
780 externally, eg, byOpenSSL, and disables build of libwebsockets_SHA1()
781
782
783 v1.4-chrome43-firefox36
784 =======================
785
786 User api additions
787 ------------------
788
789 There's a new member in the info struct used to control context creation,
790 ssl_private_key_password, which allows passing into lws the passphrase on
791 an SSL cetificate
792
793 There's a new member in struct protocols, id, which is ignored by lws but can
794 be used by the user code to mark the selected protocol by user-defined version
795 or capabliity flag information, for the case multiple versions of a protocol are
796 supported.
797
798 int lws_is_ssl(wsi) added to allow user code to know if the connection was made
799 over ssl or not.  If LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT is used, both
800 ssl and non-ssl connections are possible and may need to be treated differently
801 in the user code.
802
803 int lws_partial_buffered(wsi) added... should be checked after any
804 libwebsocket_write that will be followed by another libwebsocket_write inside
805 the same writeable callback.  If set, you can't do any more writes until the
806 writeable callback is called again.  If you only do one write per writeable callback,
807 you can ignore this.
808
809 HTTP2-related: HTTP2 changes how headers are handled, lws now has new version-
810 agnositic header creation APIs.  These do the right thing depending on each
811 connection's HTTP version without the user code having to know or care, except
812 to make sure to use the new APIs for headers (test-server is updated to use
813 them already, so look there for examples)
814
815 The APIs "render" the headers into a user-provided buffer and bump *p as it
816 is used.  If *p reaches end, then the APIs return nonzero for error.
817
818 LWS_VISIBLE LWS_EXTERN int
819 lws_add_http_header_status(struct libwebsocket_context *context,
820                             struct libwebsocket *wsi,
821                             unsigned int code,
822                             unsigned char **p,
823                             unsigned char *end);
824
825 Start a response header reporting status like 200, 500, etc
826
827 LWS_VISIBLE LWS_EXTERN int
828 lws_add_http_header_by_name(struct libwebsocket_context *context,
829                             struct libwebsocket *wsi,
830                             const unsigned char *name,
831                             const unsigned char *value,
832                             int length,
833                             unsigned char **p,
834                             unsigned char *end);
835
836 Add a header like name: value in HTTP1.x
837
838 LWS_VISIBLE LWS_EXTERN int 
839 lws_finalize_http_header(struct libwebsocket_context *context,
840                             struct libwebsocket *wsi,
841                             unsigned char **p,
842                             unsigned char *end);
843
844 Finish off the headers, like add the extra \r\n in HTTP1.x
845
846 LWS_VISIBLE LWS_EXTERN int
847 lws_add_http_header_by_token(struct libwebsocket_context *context,
848                             struct libwebsocket *wsi,
849                             enum lws_token_indexes token,
850                             const unsigned char *value,
851                             int length,
852                             unsigned char **p,
853                             unsigned char *end);
854
855 Add a header by using a lws token as the name part.  In HTTP2, this can be
856 compressed to one or two bytes.
857
858
859 User api removal
860 ----------------
861
862 protocols struct member no_buffer_all_partial_tx is removed.  Under some
863 conditions like rewriting extension such as compression in use, the built-in
864 partial send buffering is the only way to deal with the problem, so turning
865 it off is deprecated.
866
867
868 User api changes
869 ----------------
870
871 HTTP2-related: API libwebsockets_serve_http_file() takes an extra parameter at
872 the end now
873
874 int other_headers_len)
875
876 If you are providing other headers, they must be generated using the new
877 HTTP-version-agnostic APIs, and you must provide the length of them using this
878 additional parameter.
879
880 struct lws_context_creation_info now has an additional member
881 SSL_CTX *provided_client_ssl_ctx you may set to an externally-initialized
882 SSL_CTX managed outside lws.  Defaulting to zero keeps the existing behaviour of
883 lws managing the context, if you memset the struct to 0 or have as a filescope
884 initialized struct in bss, no need to change anything.
885
886
887 v1.3-chrome37-firefox30
888 =======================
889
890  .gitignore                                               |    1 -
891  CMakeLists.txt                                           |  447 +++--
892  README.build                                             |   35 +-
893  README.coding                                            |   14 +
894  changelog                                                |   66 +
895  cmake/LibwebsocketsConfig.cmake.in                       |   17 +
896  cmake/LibwebsocketsConfigVersion.cmake.in                |   11 +
897  config.h.cmake                                           |   18 +
898  cross-ming.cmake                                         |   31 +
899  cross-openwrt-makefile                                   |   91 +
900  lib/client-handshake.c                                   |  205 ++-
901  lib/client-parser.c                                      |   58 +-
902  lib/client.c                                             |  158 +-
903  lib/context.c                                            |  341 ++++
904  lib/extension-deflate-frame.c                            |    2 +-
905  lib/extension.c                                          |  178 ++
906  lib/handshake.c                                          |  287 +---
907  lib/lextable.h                                           |  338 ++++
908  lib/libev.c                                              |  175 ++
909  lib/libwebsockets.c                                      | 2089 +++--------------------
910  lib/libwebsockets.h                                      |  253 ++-
911  lib/lws-plat-unix.c                                      |  404 +++++
912  lib/lws-plat-win.c                                       |  358 ++++
913  lib/minilex.c                                            |  530 +++---
914  lib/output.c                                             |  445 ++---
915  lib/parsers.c                                            |  682 ++++----
916  lib/pollfd.c                                             |  239 +++
917  lib/private-libwebsockets.h                              |  501 +++++-
918  lib/server-handshake.c                                   |  274 +--
919  lib/server.c                                             |  858 ++++++++--
920  lib/service.c                                            |  517 ++++++
921  lib/sha-1.c                                              |   38 +-
922  lib/ssl-http2.c                                          |   78 +
923  lib/ssl.c                                                |  571 +++++++
924  test-server/attack.sh                                    |  101 +-
925  test-server/test-client.c                                |    9 +-
926  test-server/test-echo.c                                  |   17 +-
927  test-server/test-fraggle.c                               |    7 -
928  test-server/test-ping.c                                  |   12 +-
929  test-server/test-server.c                                |  330 ++--
930  test-server/test.html                                    |    4 +-
931  win32port/client/client.vcxproj                          |  259 ---
932  win32port/client/client.vcxproj.filters                  |   39 -
933  .../libwebsocketswin32.vcxproj.filters                   |   93 -
934  win32port/server/server.vcxproj                          |  276 ---
935  win32port/server/server.vcxproj.filters                  |   51 -
936  win32port/win32helpers/gettimeofday.h                    |   59 +-
937  win32port/win32helpers/netdb.h                           |    1 -
938  win32port/win32helpers/strings.h                         |    0
939  win32port/win32helpers/sys/time.h                        |    1 -
940  win32port/win32helpers/unistd.h                          |    0
941  win32port/win32helpers/websock-w32.c                     |  104 --
942  win32port/win32helpers/websock-w32.h                     |   62 -
943  win32port/win32port.sln                                  |  100 --
944  win32port/zlib/gzio.c                                    |    3 +-
945  55 files changed, 6779 insertions(+), 5059 deletions(-)
946
947
948 User api additions
949 ------------------
950
951 POST method is supported
952
953 The protocol 0 / HTTP callback can now get two new kinds of callback,
954 LWS_CALLBACK_HTTP_BODY (in and len are a chunk of the body of the HTTP request)
955 and LWS_CALLBACK_HTTP_BODY_COMPLETION (the expected amount of body has arrived
956 and been passed to the user code already).  These callbacks are used with the
957 post method (see the test server for details).
958
959 The period between the HTTP header completion and the completion of the body
960 processing is protected by a 5s timeout.
961
962 The chunks are stored in a malloc'd buffer of size protocols[0].rx_buffer_size.
963
964
965 New server option you can enable from user code
966 LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT allows non-SSL connections to
967 also be accepted on an SSL listening port.  It's disabled unless you enable
968 it explicitly.
969
970
971 Two new callbacks are added in protocols[0] that are optional for allowing
972 limited thread access to libwebsockets, LWS_CALLBACK_LOCK_POLL and
973 LWS_CALLBACK_UNLOCK_POLL.
974
975 If you use them, they protect internal and external poll list changes, but if
976 you want to use external thread access to libwebsocket_callback_on_writable()
977 you have to implement your locking here even if you don't use external
978 poll support.
979
980 If you will use another thread for this, take a lot of care about managing
981 your list of live wsi by doing it from ESTABLISHED and CLOSED callbacks
982 (with your own locking).
983
984 If you configure cmake with -DLWS_WITH_LIBEV=1 then the code allowing the libev
985 eventloop instead of the default poll() one will also be compiled in.  But to
986 use it, you must also set the LWS_SERVER_OPTION_LIBEV flag on the context
987 creation info struct options member.
988
989 IPV6 is supported and enabled by default except for Windows, you can disable
990 the support at build-time by giving -DLWS_IPV6=, and disable use of it even if
991 compiled in by making sure the flag LWS_SERVER_OPTION_DISABLE_IPV6 is set on
992 the context creation info struct options member.
993
994 You can give LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS option flag to
995 guarantee the OS CAs will not be used, even if that support was selected at
996 build-time.
997
998 Optional "token limits" may be enforced by setting the member "token_limits"
999 in struct lws_context_creation_info to point to a struct lws_token_limits.
1000 NULL means no token limits used for compatibility.
1001
1002
1003 User api changes
1004 ----------------
1005
1006 Extra optional argument to libwebsockets_serve_http_file() allows injecion
1007 of HTTP headers into the canned response.  Eg, cookies may be added like
1008 that without getting involved in having to send the header by hand.
1009
1010 A new info member http_proxy_address may be used at context creation time to
1011 set the http proxy.  If non-NULL, it overrides http_proxy environment var.
1012
1013 Cmake supports LWS_SSL_CLIENT_USE_OS_CA_CERTS defaulting to on, which gets
1014 the client to use the OS CA Roots.  If you're worried somebody with the
1015 ability to forge for force creation of a client cert from the root CA in
1016 your OS, you should disable this since your selfsigned $0 cert is a lot safer
1017 then...
1018
1019
1020 v1.23-chrome32-firefox24
1021 ========================
1022
1023  Android.mk                            |   29 +
1024  CMakeLists.txt                        |  573 ++++++++----
1025  COPYING                               |  503 -----------
1026  INSTALL                               |  365 --------
1027  Makefile.am                           |   13 -
1028  README.build                          |  371 ++------
1029  README.coding                         |   63 ++
1030  autogen.sh                            | 1578 ---------------------------------
1031  changelog                             |   69 ++
1032  cmake/FindGit.cmake                   |  163 ++++
1033  cmake/FindOpenSSLbins.cmake           |   15 +-
1034  cmake/UseRPMTools.cmake               |  176 ++++
1035  config.h.cmake                        |   25 +-
1036  configure.ac                          |  226 -----
1037  cross-arm-linux-gnueabihf.cmake       |   28 +
1038  lib/Makefile.am                       |   89 --
1039  lib/base64-decode.c                   |   98 +-
1040  lib/client-handshake.c                |  123 ++-
1041  lib/client-parser.c                   |   19 +-
1042  lib/client.c                          |  145 ++-
1043  lib/daemonize.c                       |    4 +-
1044  lib/extension.c                       |    2 +-
1045  lib/getifaddrs.h                      |    4 +-
1046  lib/handshake.c                       |   76 +-
1047  lib/libwebsockets.c                   |  491 ++++++----
1048  lib/libwebsockets.h                   |  164 ++--
1049  lib/output.c                          |  214 ++++-
1050  lib/parsers.c                         |  102 +--
1051  lib/private-libwebsockets.h           |   66 +-
1052  lib/server-handshake.c                |    5 +-
1053  lib/server.c                          |   29 +-
1054  lib/sha-1.c                           |    2 +-
1055  libwebsockets-api-doc.html            |  249 +++---
1056  libwebsockets.pc.in                   |   11 -
1057  libwebsockets.spec                    |   14 +-
1058  m4/ignore-me                          |    2 -
1059  scripts/FindLibWebSockets.cmake       |   33 +
1060  scripts/kernel-doc                    |    1 +
1061  test-server/Makefile.am               |  131 ---
1062  test-server/leaf.jpg                  |  Bin 0 -> 2477518 bytes
1063  test-server/test-client.c             |   78 +-
1064  test-server/test-echo.c               |   33 +-
1065  test-server/test-fraggle.c            |   26 +-
1066  test-server/test-ping.c               |   15 +-
1067  test-server/test-server.c             |  197 +++-
1068  test-server/test.html                 |    5 +-
1069  win32port/win32helpers/gettimeofday.c |   74 +-
1070  win32port/win32helpers/websock-w32.h  |    6 +-
1071  48 files changed, 2493 insertions(+), 4212 deletions(-)
1072
1073
1074 User api additions
1075 ------------------
1076
1077  - You can now call libwebsocket_callback_on_writable() on http connectons,
1078         and get a LWS_CALLBACK_HTTP_WRITEABLE callback, the same way you can
1079         regulate writes with a websocket protocol connection.
1080
1081  - A new member in the context creation parameter struct "ssl_cipher_list" is
1082         added, replacing CIPHERS_LIST_STRING.  NULL means use the ssl library
1083         default list of ciphers.
1084
1085  - Not really an api addition, but libwebsocket_service_fd() will now zero
1086         the revents field of the pollfd it was called with if it handled the
1087         descriptor.  So you can tell if it is a non-lws fd by checking revents
1088         after the service call... if it's still nonzero, the descriptor
1089         belongs to you and you need to take care of it.
1090
1091  - libwebsocket_rx_flow_allow_all_protocol(protocol) will unthrottle all
1092         connections with the established protocol.  It's designed to be
1093         called from user server code when it sees it can accept more input
1094         and may have throttled connections using the server rx flow apis
1095         while it was unable to accept any other input  The user server code
1096         then does not have to try to track while connections it choked, this
1097         will free up all of them in one call.
1098
1099  - there's a new, optional callback LWS_CALLBACK_CLOSED_HTTP which gets
1100         called when an HTTP protocol socket closes
1101
1102  - for LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION callback, the user_space alloc
1103         has already been done before the callback happens.  That means we can
1104         use the user parameter to the callback to contain the user pointer, and
1105         move the protocol name to the "in" parameter.  The docs for this
1106         callback are also updated to reflect how to check headers in there.
1107
1108  - libwebsocket_client_connect() is now properly nonblocking and async.  See
1109         README.coding and test-client.c for information on the callbacks you
1110         can rely on controlling the async connection period with.
1111
1112  - if your OS does not support the http_proxy environment variable convention
1113         (eg, reportedly OSX), you can use a new api libwebsocket_set_proxy()
1114         to set the proxy details in between context creation and the connection
1115         action.  For OSes that support http_proxy, that's used automatically.
1116
1117 User api changes
1118 ----------------
1119
1120  - the external poll callbacks now get the socket descriptor coming from the
1121         "in" parameter.  The user parameter provides the user_space for the
1122         wsi as it normally does on the other callbacks.
1123         LWS_CALLBACK_FILTER_NETWORK_CONNECTION also has the socket descriptor
1124         delivered by @in now instead of @user.
1125
1126  - libwebsocket_write() now returns -1 for error, or the amount of data
1127         actually accepted for send.  Under load, the OS may signal it is
1128         ready to send new data on the socket, but have only a restricted
1129         amount of memory to buffer the packet compared to usual.
1130
1131
1132 User api removal
1133 ----------------
1134
1135  - libwebsocket_ensure_user_space() is removed from the public api, if you
1136         were using it to get user_space, you need to adapt your code to only
1137         use user_space inside the user callback.
1138
1139  - CIPHERS_LIST_STRING is removed
1140
1141  - autotools build has been removed.  See README.build for info on how to
1142         use CMake for your platform
1143
1144
1145 v1.21-chrome26-firefox18
1146 ========================
1147
1148  - Fixes buffer overflow bug in max frame size handling if you used the
1149         default protocol buffer size.  If you declared rx_buffer_size in your
1150         protocol, which is recommended anyway, your code was unaffected.
1151
1152 v1.2-chrome26-firefox18
1153 =======================
1154
1155 Diffstat
1156 --------
1157
1158  .gitignore                                                      |  16 +++
1159  CMakeLists.txt                                                  | 544 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1160  LICENSE                                                         | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1161  Makefile.am                                                     |   1 +
1162  README                                                          |  20 +++
1163  README.build                                                    | 258 ++++++++++++++++++++++++++++++++-----
1164  README.coding                                                   |  52 ++++++++
1165  changelog                                                       | 136 ++++++++++++++++++++
1166  cmake/FindOpenSSLbins.cmake                                     |  33 +++++
1167  config.h.cmake                                                  | 173 +++++++++++++++++++++++++
1168  configure.ac                                                    |  22 +++-
1169  lib/Makefile.am                                                 |  20 ++-
1170  lib/base64-decode.c                                             |   2 +-
1171  lib/client-handshake.c                                          | 190 +++++++++++-----------------
1172  lib/client-parser.c                                             |  88 +++++++------
1173  lib/client.c                                                    | 384 ++++++++++++++++++++++++++++++-------------------------
1174  lib/daemonize.c                                                 |  32 +++--
1175  lib/extension-deflate-frame.c                                   |  58 +++++----
1176  lib/extension-deflate-stream.c                                  |  19 ++-
1177  lib/extension-deflate-stream.h                                  |   4 +-
1178  lib/extension.c                                                 |  11 +-
1179  lib/getifaddrs.c                                                | 315 +++++++++++++++++++++++-----------------------
1180  lib/getifaddrs.h                                                |  30 ++---
1181  lib/handshake.c                                                 | 124 +++++++++++-------
1182  lib/libwebsockets.c                                             | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------
1183  lib/libwebsockets.h                                             | 237 ++++++++++++++++++++++------------
1184  lib/output.c                                                    | 192 +++++++++++-----------------
1185  lib/parsers.c                                                   | 966 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------
1186  lib/private-libwebsockets.h                                     | 225 +++++++++++++++++++++------------
1187  lib/server-handshake.c                                          |  82 ++++++------
1188  lib/server.c                                                    |  96 +++++++-------
1189  libwebsockets-api-doc.html                                      | 189 ++++++++++++++++++----------
1190  libwebsockets.spec                                              |  17 +--
1191  test-server/attack.sh                                           | 148 ++++++++++++++++++++++
1192  test-server/test-client.c                                       | 125 +++++++++---------
1193  test-server/test-echo.c                                         |  31 +++--
1194  test-server/test-fraggle.c                                      |  32 ++---
1195  test-server/test-ping.c                                         |  52 ++++----
1196  test-server/test-server.c                                       | 129 ++++++++++++-------
1197  win32port/libwebsocketswin32/libwebsocketswin32.vcxproj         | 279 ----------------------------------------
1198  win32port/libwebsocketswin32/libwebsocketswin32.vcxproj.filters |  23 +++-
1199  41 files changed, 4398 insertions(+), 2219 deletions(-)
1200
1201
1202 User api additions
1203 ------------------
1204
1205  - lws_get_library_version() returns a const char * with a string like
1206          "1.1 9e7f737", representing the library version from configure.ac
1207          and the git HEAD hash the library was built from
1208
1209  - TCP Keepalive can now optionally be applied to all lws sockets, on Linux
1210         also with controllable timeout, number of probes and probe interval.
1211         (On BSD type OS, you can only use system default settings for the
1212         timing and retries, although enabling it is supported by setting
1213         ka_time to nonzero, the exact value has no meaning.)
1214         This enables detection of idle connections which are logically okay,
1215         but are in fact dead, due to network connectivity issues at the server,
1216         client, or any intermediary.  By default it's not enabled, but you
1217         can enable it by setting a non-zero timeout (in seconds) at the new
1218         ka_time member at context creation time.
1219
1220  - Two new optional user callbacks added, LWS_CALLBACK_PROTOCOL_DESTROY which
1221         is called one-time per protocol as the context is being destroyed, and
1222         LWS_CALLBACK_PROTOCOL_INIT which is called when the context is created
1223         and the protocols are added, again it's a one-time affair.
1224         This lets you manage per-protocol allocations properly including
1225         cleaning up after yourself when the server goes down.
1226
1227 User api changes
1228 ----------------
1229
1230  - libwebsocket_create_context() has changed from taking a ton of parameters
1231         to just taking a pointer to a struct containing the parameters.  The
1232         struct lws_context_creation_info is in libwebsockets.h, the members
1233         are in the same order as when they were parameters to the call
1234         previously.  The test apps are all updated accordingly so you can
1235         see example code there.
1236
1237  - Header tokens are now deleted after the websocket connection is
1238         established.  Not just the header data is saved, but the pointer and
1239         length array is also removed from (union) scope saving several hundred
1240         bytes per connection once it is established
1241
1242  - struct libwebsocket_protocols has a new member rx_buffer_size, this
1243         controls rx buffer size per connection of that protocol now.  Sources
1244         for apps built against older versions of the library won't declare
1245         this in their protocols, defaulting it to 0.  Zero buffer is legal,
1246         it causes a default buffer to be allocated (currently 4096)
1247
1248         If you want to receive only atomic frames in your user callback, you
1249         should set this to greater than your largest frame size.  If a frame
1250         comes that exceeds that, no error occurs but the callback happens as
1251         soon as the buffer limit is reached, and again if it is reached again
1252         or the frame completes.  You can detect that has happened by seeing
1253         there is still frame content pending using
1254         libwebsockets_remaining_packet_payload()
1255
1256         By correctly setting this, you can save a lot of memory when your
1257         protocol has small frames (see the test server and client sources).
1258
1259  - LWS_MAX_HEADER_LEN now defaults to 1024 and is the total amount of known
1260         header payload lws can cope with, that includes the GET URL, origin
1261         etc.  Headers not understood by lws are ignored and their payload
1262         not included in this.
1263
1264
1265 User api removals
1266 -----------------
1267
1268  - The configuration-time option MAX_USER_RX_BUFFER has been replaced by a
1269         buffer size chosen per-protocol.  For compatibility, there's a default
1270         of 4096 rx buffer, but user code should set the appropriate size for
1271         the protocol frames.
1272
1273  - LWS_INITIAL_HDR_ALLOC and LWS_ADDITIONAL_HDR_ALLOC are no longer needed
1274         and have been removed.  There's a new header management scheme that
1275         handles them in a much more compact way.
1276
1277  - libwebsockets_hangup_on_client() is removed.  If you want to close the
1278         connection you must do so from the user callback and by returning
1279         -1 from there.
1280
1281  - libwebsocket_close_and_free_session() is now private to the library code
1282         only and not exposed for user code.  If you want to close the
1283         connection, you must do so from the user callback by returning -1
1284         from there.
1285
1286
1287 New features
1288 ------------
1289
1290  - Cmake project file added, aimed initially at Windows support: this replaces
1291         the visual studio project files that were in the tree until now.
1292
1293  - CyaSSL now supported in place of OpenSSL (--use-cyassl on configure)
1294
1295  - PATH_MAX or MAX_PATH no longer needed
1296
1297  - cutomizable frame rx buffer size by protocol
1298
1299  - optional TCP keepalive so dead peers can be detected, can be enabled at
1300         context-creation time
1301
1302  - valgrind-clean: no SSL or CyaSSL: completely clean.  With OpenSSL, 88 bytes
1303         lost at OpenSSL library init and symptomless reports of uninitialized
1304         memory usage... seems to be a known and ignored problem at OpenSSL
1305
1306  - By default debug is enabled and the library is built for -O0 -g to faclitate
1307         that.  Use --disable-debug configure option to build instead with -O4
1308         and no -g (debug info), obviously providing best performance and
1309         reduced binary size.
1310
1311  - 1.0 introduced some code to try to not deflate small frames, however this
1312         seems to break when confronted with a mixture of frames above and
1313         below the threshold, so it's removed.  Veto the compression extension
1314         in your user callback if you will typically have very small frames.
1315
1316  - There are many memory usage improvements, both a reduction in malloc/
1317         realloc and architectural changes.  A websocket connection now
1318         consumes only 296 bytes with SSL or 272 bytes without on x86_64,
1319         during header processing an additional 1262 bytes is allocated in a
1320         single malloc, but is freed when the websocket connection starts.
1321         The RX frame buffer defined by the protocol in user
1322         code is also allocated per connection, this represents the largest
1323         frame you can receive atomically in that protocol.
1324
1325  - On ARM9 build, just http+ws server no extensions or ssl, <12Kbytes .text
1326         and 112 bytes per connection (+1328 only during header processing)
1327
1328
1329 v1.1-chrome26-firefox18
1330 =======================
1331
1332 Diffstat
1333 --------
1334
1335  Makefile.am                            |    4 +
1336  README-test-server                     |  291 ---
1337  README.build                           |  239 ++
1338  README.coding                          |  138 ++
1339  README.rst                             |   72 -
1340  README.test-apps                       |  272 +++
1341  configure.ac                           |  116 +-
1342  lib/Makefile.am                        |   55 +-
1343  lib/base64-decode.c                    |    5 +-
1344  lib/client-handshake.c                 |  121 +-
1345  lib/client-parser.c                    |  394 ++++
1346  lib/client.c                           |  807 +++++++
1347  lib/daemonize.c                        |  212 ++
1348  lib/extension-deflate-frame.c          |  132 +-
1349  lib/extension-deflate-stream.c         |   12 +-
1350  lib/extension-x-google-mux.c           | 1223 ----------
1351  lib/extension-x-google-mux.h           |   96 -
1352  lib/extension.c                        |    8 -
1353  lib/getifaddrs.c                       |  271 +++
1354  lib/getifaddrs.h                       |   76 +
1355  lib/handshake.c                        |  582 +----
1356  lib/libwebsockets.c                    | 2493 ++++++---------------
1357  lib/libwebsockets.h                    |  115 +-
1358  lib/md5.c                              |  217 --
1359  lib/minilex.c                          |  440 ++++
1360  lib/output.c                           |  628 ++++++
1361  lib/parsers.c                          | 2016 +++++------------
1362  lib/private-libwebsockets.h            |  284 +--
1363  lib/server-handshake.c                 |  275 +++
1364  lib/server.c                           |  377 ++++
1365  libwebsockets-api-doc.html             |  300 +--
1366  m4/ignore-me                           |    2 +
1367  test-server/Makefile.am                |  111 +-
1368  test-server/libwebsockets.org-logo.png |  Bin 0 -> 7029 bytes
1369  test-server/test-client.c              |   45 +-
1370  test-server/test-echo.c                |  330 +++
1371  test-server/test-fraggle.c             |   20 +-
1372  test-server/test-ping.c                |   22 +-
1373  test-server/test-server-extpoll.c      |  554 -----
1374  test-server/test-server.c              |  349 ++-
1375  test-server/test.html                  |    3 +-
1376  win32port/zlib/ZLib.vcxproj            |  749 ++++---
1377  win32port/zlib/ZLib.vcxproj.filters    |  188 +-
1378  win32port/zlib/adler32.c               |  348 ++-
1379  win32port/zlib/compress.c              |  160 +-
1380  win32port/zlib/crc32.c                 |  867 ++++----
1381  win32port/zlib/crc32.h                 |  882 ++++----
1382  win32port/zlib/deflate.c               | 3799 +++++++++++++++-----------------
1383  win32port/zlib/deflate.h               |  688 +++---
1384  win32port/zlib/gzclose.c               |   50 +-
1385  win32port/zlib/gzguts.h                |  325 ++-
1386  win32port/zlib/gzlib.c                 | 1157 +++++-----
1387  win32port/zlib/gzread.c                | 1242 ++++++-----
1388  win32port/zlib/gzwrite.c               | 1096 +++++----
1389  win32port/zlib/infback.c               | 1272 ++++++-----
1390  win32port/zlib/inffast.c               |  680 +++---
1391  win32port/zlib/inffast.h               |   22 +-
1392  win32port/zlib/inffixed.h              |  188 +-
1393  win32port/zlib/inflate.c               | 2976 +++++++++++++------------
1394  win32port/zlib/inflate.h               |  244 +-
1395  win32port/zlib/inftrees.c              |  636 +++---
1396  win32port/zlib/inftrees.h              |  124 +-
1397  win32port/zlib/trees.c                 | 2468 +++++++++++----------
1398  win32port/zlib/trees.h                 |  256 +--
1399  win32port/zlib/uncompr.c               |  118 +-
1400  win32port/zlib/zconf.h                 |  934 ++++----
1401  win32port/zlib/zlib.h                  | 3357 ++++++++++++++--------------
1402  win32port/zlib/zutil.c                 |  642 +++---
1403  win32port/zlib/zutil.h                 |  526 ++---
1404  69 files changed, 19556 insertions(+), 20145 deletions(-)
1405
1406 user api changes
1407 ----------------
1408
1409  - libwebsockets_serve_http_file() now takes a context as first argument
1410
1411  - libwebsockets_get_peer_addresses() now takes a context and wsi as first
1412         two arguments
1413
1414
1415 user api additions
1416 ------------------
1417
1418  - lwsl_...() logging apis, default to stderr but retargetable by user code;
1419         may be used also by user code
1420
1421  - lws_set_log_level() set which logging apis are able to emit (defaults to
1422         notice, warn, err severities), optionally set the emit callback
1423
1424  - lwsl_emit_syslog() helper callback emits to syslog
1425
1426  - lws_daemonize() helper code that forks the app into a headless daemon
1427         properly, maintains a lock file with pid in suitable for sysvinit etc to
1428         control lifecycle
1429
1430  - LWS_CALLBACK_HTTP_FILE_COMPLETION callback added since http file
1431         transfer is now asynchronous (see test server code)
1432
1433  - lws_frame_is_binary() from a wsi pointer, let you know if the received
1434         data was sent in BINARY mode
1435
1436
1437 user api removals
1438 -----------------
1439
1440  - libwebsockets_fork_service_loop() - no longer supported (had intractable problems)
1441         arrange your code to act from the user callback instead from same
1442         process context as the service loop
1443
1444  - libwebsockets_broadcast() - use libwebsocket_callback_on_writable[_all_protocol]()
1445         instead from same process context as the service loop.  See the test apps
1446         for examples.
1447
1448  - x-google-mux() removed until someone wants it
1449
1450  - pre -v13 (ancient) protocol support removed
1451
1452
1453 New features
1454 ------------
1455
1456  - echo test server and client compatible with echo.websocket.org added
1457
1458  - many new configure options (see README.build) to reduce footprint of the
1459         library to what you actually need, eg, --without-client and
1460         --without-server
1461
1462  - http + websocket server can build to as little as 12K .text for ARM
1463
1464  - no more MAX_CLIENTS limitation; adapts to support the max number of fds
1465         allowed to the process by ulimit, defaults to 1024 on Fedora and
1466         Ubuntu.  Use ulimit to control this without needing to configure
1467         the library.  Code here is smaller and faster.
1468
1469  - adaptive ratio of listen socket to connection socket service allows
1470         good behaviour under Apache ab test load.  Tested with thousands
1471         of simultaneous connections
1472
1473  - reduction in per-connection memory footprint by moving to a union to hold
1474         mutually-exclusive state for the connection
1475
1476  - robustness: Out of Memory taken care of for all allocation code now
1477
1478  - internal getifaddrs option if your toolchain lacks it (some uclibc)
1479
1480  - configurable memory limit for deflate operations
1481
1482  - improvements in SSL code nonblocking operation, possible hang solved,
1483         some SSL operations broken down into pollable states so there is
1484         no library blocking, timeout coverage for SSL_connect
1485
1486  - extpoll test server merged into single test server source
1487
1488  - robustness: library should deal with all recoverable socket conditions
1489
1490  - rx flowcontrol for backpressure notification fixed and implmeneted
1491         correctly in the test server
1492
1493  - optimal lexical parser added for header processing; all headers in a
1494         single 276-byte state table
1495
1496  - latency tracking api added (configure --with-latency)
1497
1498  - Improved in-tree documentation, REAME.build, README.coding,
1499         README.test-apps, changelog
1500
1501  - Many small fixes
1502
1503
1504 v1.0-chrome25-firefox17 (6cd1ea9b005933f)