File: changelog.txt

package info (click to toggle)
libnginx-mod-nchan 1%3A1.3.7%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 2,476 kB
  • sloc: ansic: 40,534; ruby: 1,197; makefile: 245; sh: 53
file content (595 lines) | stat: -rw-r--r-- 34,833 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
1.3.7 (Sep. 19 2024)
 fix: repeated DELETE requests can leave unresponsive subscribers connected to a channel
 fix: channel info subscriber count incorrect when using Redis following unclean worker exit
      (Thanks, Steven Green)
 feature: manually set Redis server roles to master or slave
 fix: Redis server blacklist was only applied in cluster mode
      (Thanks, piotr-lwks)
 fix: Nchan may fail to connect to non-cluster Redis if more than 1 server is specified
      (Thanks, Mike Baroukh)
 fix: Some invalid message IDs may result in a worker crash
 fix: Nchan may fail to reconnect ro a Redis cluster when using many workers due to a race condition
      (Thanks, Fabio Urquiza)
 fix: subscriber info may be incorrect for Redis version >=7
 fix: Redis cluster may fail to reconnect to a cluster without consensus
      (Thanks, Fabio Urquiza)
1.3.6 (Jan. 6 2023)
 fix: reloading Nginx with nchan_stub_status enabled may result in a crash (introduced in v1.3.1) 
 fix: nchan_redis_upstream_stats_enabled incorrectly documented as having "yes/no" values instead of "on/off"
 fix: compilation erros for Nginx 1.23.2
1.3.5 (Oct. 27 2022)
 feature: track Redis upstreams statistics with nchan_redis_upstream_stats
 fix: possible invalid memory access after Redis cluster node discovery
 fix: GET publisher location request may return incorrect subscriber count when using Redis
 fix: possible to log invalid string for rare error
1.3.4 (Sep. 1 2022)
 fix: Redis cluster slave failover may result in crash
1.3.3 (Aug. 29 2022)
 fix: incorrect timeout handling for new nchan_redis_accurate_subscriber_count resulted in inaccurate subscriber counts
1.3.2 (Aug. 23 2022)
 feature: stub status now shows the total number of commands sent to Redis
 fix: Redis cluster checks may not time out
 fix: Redis cluster may not be marked unhealthy if a required node is marked in the node list as 'fail'
 fix: simultaneous creating many Redis-backed channels may result in CPU usage spikes on Redis server
1.3.1 (Aug. 1 2022)
 fix: Nchan may become unresponsive after a worker is uncleanly terminated
 change: nchan_redis_optimize_setting is now obsolete
 feature: nchan_redis_accurate_subscriber_count that doesn't corrupt Redis
          subscriber counts when nginx workers are killed
 feature: added "redis unhealthy upstreams" to nchan_stub_status
 fix: incorrect nchan_stub_status variables after a worker is uncleanly terminated
 fix: build errors with Nginx >= 1.20.1
 feature: Redis >=7.0.1 SMESSAGE support
 fix: Redis cluster slot assignments may not be reconfigured correctly
 fix: discovery of Redis slave nodes in cluster may be incomplete
1.3.0 (May 26 2022)
 feature: configurable Redis command timeouts with nchan_redis_command_timeout
 feature: configurable Redis command retries with nchan_redis_retry_commands and nchan_redis_retry_commands_max_wait
 fix: Redis cluster status checks can now discover new slaves
 fix: Redis 7 cluster keyslot errors not recognized on Redis 7
 feature: Redis 7 sharded pubsub support
 feature: configurable Redis cluster recovery time, backoff, and jitter
 feature: Redis cluster failure recovery without disconnection
 feature: configurable Redis reconnection time, backoff, and jitter
 fix: Redis scripts are now loaded only when missing
1.2.15 (Dec. 27 2021)
 fix: publishing to >255 string-delimitered channels could result in a crash
 fix: Redis connection failures (since 1 2.14)
1.2.14 [WITHDRAWN] (Dec. 20 2021)
 fix: compiler warnings from the use of the 'typeof' macro
 fix: Nchan can't be built without the Nginx SSL module (bug introduced in 1.2.13)
 update: hiredis updated to 1.0.2
 fix: some Redis connection failures could result in a crash (bug introduced in 1.2.13)
 fix: upstream subrequests crashed with Nginx >= 1.19.9
1.2.13 [WITHDRAWN] (Dec. 13 2021)
 feature: Redis ACL support with username and passwword
 feature: Redis TLS support
1.2.12 (Sep. 22 2021)
 fix: better Redis cluster connection logging
 fix: redundant method to discover Redis slave nodes in cluster mode could result in receiving unreachable IPs
1.2.11 (Sep. 17 2021)
 feature: nchan_redis_discovered_ip_range_blacklist for ignoring autotiscoreved nodes
 feature: nchan_redis_storage_mode is now configurable in location contexts 
1.2.10 (Aug. 25 2021)
 fix: Nchan could not be built without openssl due to hiredis dependency
      (introduced in v1.2.9)
 feature: allow no separator for http-raw-stream (thanks @sclem)
1.2.9 (Aug. 12 2021)
 feature: Redis cluster reconfiguration check timer,
      nchan_redis_cluster_check_interval setting
 fix: detect Redis cluster reconfiguration when publishing messages in "nostore" mode
 update: hiredis updated to v1.0.0 
 fix: segfault on out-of-shared-memory condition for multiplexed publishers
1.2.8 (Apr. 12 2021)
 feature: nchan_subscriber_info locations for receiving customizable info from 
      subscribers of a given channel.
 fix: incorrect lgging of disconnected subscribers with 400 error instead of 499
      (bug introduced in v1.2.7)
 feature: add $nchan_channel_subscriber_last_seen, $nchan_channel_subscriber_count 
      and $nchan_channel_message_count variables
 fix: GCC 10 compatibility
1.2.7 (Mar. 17 2020)
 fix: unidirectional subscribers have their connection terminated if they send any data to the server
      after the initial request handshake. This applies to all subscribers except Websocket
 feature: periodic pings for EventSource subscribers
 fix: Redis pending commands count may be incorrect in nchan's stub status page
 fix: channel deletion fails to propagate to Redis slaves
 fix: possible stack overflow when using websocket subscribers
1.2.6 (Jun. 18 2019)
 fix: when using Redis, a channel can stop receiving new messages if 
      they are published faster than they can be sent to subscribers and the 
      message buffer is sufficiently small
 fix: websocket PONG response did not contain PING frame data
 fix: multiplexed channels may stop receiving messages
 fix (security): specially crafted websocket publisher requests when using Redis
      may result in use-after-free memory access
 fix: Nginx config reload may result in crash when using Redis cluster
1.2.5 (Mar. 20 2019)
 fix: using multiplexed channels with Redis in backup mode may result in worker crash
 fix: nchan_publisher_channel_id could not be set exclusively in a publisher location
 fix: Google pagespeed module compatibility
 fix: nchan prevents nginx from starting if no http {} block is configured
1.2.4 (Feb. 25 2019)
 fix: Redis cluster info with zero-length hostname may result in worker crash
 fix: build problems with included hiredis lib in FreeBSD
 feature: nchan_redis_namespace and nchan_redis_ping_interval now work in upstream blocks
 fix: websocket publisher did not publishing channel events
 fix: Redis namespace was limited to 8 bytes
1.2.3 (Oct. 15 2018)
 fix: possible invalid memory access when the initial connection to a Redis cluster node times out
1.2.2 (Oct. 9 2018)
 fix (security): using an unresponsive, overloaded Redis server may result in invalid memory access
 fix: incorrect logging of discovered Redis cluster nodes
 fix: better handling of connection loss when Redis server is unresponsive
 fix: presence of Redis cluster nodes with no known address ("noaddr") nodes could result in worker crash
 fix (security): subscriber may erroneously receive a 400 Bad Request or crash a worker 
      based on data from a previous subscriber
 feature: built-in backend benchmark
 feature: add optimized fastpublish option to Redis nostore mode for maximum
      message publishing thoroughput via Redis
 feature: add no-store Redis mode that uses Redis for broadcasting messages, not storage
 fix: connecting to load-balancing Redis proxy resulted in crash
 fix: using longpoll-multipart in "raw" mode cound result in worker crash
 fix: channel events used with Redis resulted in segfault
1.2.1 (Aug. 2 2018)
 fix: channel last_requested was set to 0 instead of -1 on channel creation
 fix: authentication failure body not forwarded for Nginx > 1.13.10
 fix: possible invalid memory access for websocket unsubscribe requests
 fix: building Nchan could interfere with building other modules
1.2.0 (Jul. 23 2018)
 feature: configurable support for CORS Access-Control-Allow-Credentials header
 fix: better compliance with RFC7692  Websocket permessage-deflate parameter negotiation
 fix (security): possible busy-loop denial-of-service for specially crafted 
      handshakes from Websocket subscribers using permessage-deflate
      (Thanks, Benjamin Michéle)
 fix: nchan_permessage_deflate_compression_memlevel was not applied when set
 refactor: all publisher and subscriber upstream requests are now more memory-efficient
 fix: Using websocket publisher upstream requests may result in invalid memory access
 fix: publishing Redis-backed messages with 1-second expiration may fail after
      cluster restart
 change: nchan_redis_wait_after_connecting directive is now obsolete, and is ignored
 feature: nchan_redis_optimize_target for "cpu" or "bandwidth". Trades off CPU
      load on Redis slaves for syncronization bandwidth.
 feature: configurable Redis master/slave channel subscribe weights with
      nchan_redis_subscribe_weights
 fix: Compilation issues on OS X and systems lacking non-POSIX memrchr()
 fix: nchan_pubsub CORS Allowed headers did not include headers used by subscribers
 fix: Redis-backed channel buffer length could exceed nchan_message_buffer_length
 fix: Publisher upstream compatibility for Nginx > 1.13.10
 feature: nchan_redis_connect_timeout to configure maximum connection time 
      to Redis servers
 feature: Offload Redis SUBSCRIBE traffic to slaves 
      (one SUBSCRIBE per channel per worker)
 fix: Redis cluster and master/slave failover and reconnection issues
 refactor: Redis connection handling rewritten from scratch
 fix: subscribers may not receive new messages after reconnecting to Redis
 fix: publishing to an unavailable Redis-backed channel may result in a 
      following 400 Bad Request
 change: Old Redis-backed channel messages are now delivered after the message
      buffer is fully loaded into memory. Previously they were delivered
      incrementally while the buffer loaded.
 fix: multiplexed Redis-backed channels may not deliver messages if one or
      more channels' messages all expire
 fix: possible crash when catching up to reconnected Redis channel with
      subscribers waiting for consecutive messages
 fix: possible crash from rapidly creating and deleting channels
1.1.15 (Apr. 27 2018)
 fix: A disconnect from a Redis cluster node can result in a segfault
 fix: Using Redis-backed multiplexed channels can result in a segfault
1.1.14 (Jan. 10 2018)
 feature: added nchan_redis_wait_after_connecting setting
 fix: compatibility with Redis >= 4.0 cluster
1.1.13 (Dec. 4 2017)
 fix: added Redis backwards compatibility with Nchan 1.1.7 and below
      for online upgrades with mixed-version Nchan cluster
1.1.12 (Dec. 1 2017)
 fix: possible "Unexpected spool == nuspool" worker crash
 fix: subscriber messages delivered during active nchan_subscribe subrequest
      may be garbled
1.1.11 (Nov. 29 2017)
 fix: Redis backup-mode not working (since 1.1.9)
 fix: incorrect handling of Redis permessage-deflated messages results in
      missing first char of eventsource event type
 fix: worker crash when unable to create temp file for large websocket
      permessage-deflate message
 fix: CPU-bound overloaded Nginx may result in worker crashes
      (may occur with large Openresty Lua load)
 change: default nchan_shared_memory_size is now 128M
 fix: some channel info from publisher GET requests may be incorrect with Redis
 fix: file descriptor leak when reconnecting to Redis
1.1.10 (Nov. 13 2017)
 feature: nchan_authorize_request failure response forwarded back to subscriber
      Sponsored by Symless (https://symless.com/)
 fix: allow nchan_access_control_allow_origin in if blocks
 fix: longpoll-multipart may read uninitialized memory when receiving 
      zero-length message
 fix (security): invalid memory access for aborted websocket subscriber 
      after channel existence check via Redis
 fix: websocket handhshake failure handled incorrectly when messages 
      are available
 fix (security): websocket subscriber disconnecting before handshake may
      result in invalid memory access
 fix (security): possible invalid memory access for disappearing longpoll sub
 feature: add "shared memory limit" to nchan_stub_status output
1.1.9 (Oct. 30 2017)
 fix: more proper websocket extension negotiation with more 
      informative failure messages
 fix: websocket handshake failure response included superfluous CLOSE frame
 feature: websocket deflate-frame and x-webkit-deflate-frame support
1.1.8 (Oct. 26 2017)
 feature: websocket permessage-deflate support
      Sponsored by HYFN (https://hyfn.com/)
 fix (security): websocket publisher may crash worker when publishing with
      channel group accounting on to a new group
 fix: messages published to Nchan via websocket binary frames 
      should have content-type set to "application/octet-stream"
 fix: accept websocket publisher binary frames (thanks @rponczkowski)
 fix: multiplexing over exactly 255 channels results in worker crash
 fix (security): Specially crafted invalid subscriber msgid may crash worker
 fix: nchan_subscriber_first_message <= 0 (newest) with existing Redis data
      incorrectly treated as "oldest" for initial subscribers
 fix: 0-length channel name may crash worker
 fix: subscribe/unsubscribe callback requests do not work when used with
      authorization callback request
 fix (security): Messages published with Redis through websocket publisher 
      may result in worker crash (bug introduced in 1.1.5)
 fix: nchan_pubsub setting may not be parsed correctly
1.1.7 (Jul. 3 2017)
 fix: possible read-after-free after redis disconnect
 fix: publishing to redis cluster before it is connected results in worker crash
 fix: possible use-after-free for suddenly disconnected longpoll-multipart subscriber
 fix: possible use-after-free when using nchan_authorize_request for slow subscribers and slow upstream
 fix: nchan_stub_status "stored messages" value could be incorrect when using Redis
1.1.6 (May 9 2017)
 fix: messages published through Redis may crash worker (introduced in 1.1.5)
 fix (security): urlencoded message id in url parsed incorrectly can result in worker crash
1.1.5 (May 3 2017)
 feature: get current Nchan version through $nchan_version variable 
      and nchan_stub_status
 fix (security): invalid memory access for multiplexed channel subscribers 
      with buffered output (Thanks Casey Forbes (@caseyf) for debugging.)
 fix: "redis pending commands" nchan_stub_status stat could be wrong after 
      deleting channels
 fix: invalid memory access when using Redis under high load
 fix: possible "message from the past" errors under high publishing load
 fix: graceful publisher/subscriber notifications when out of shared memory
      (via HTTP 507 Insufficient Storage status code)
 fix: compatibility with limit_except directive
1.1.4 (Apr. 25 2017)
 fix (security): possible memory corruption using multiplexed channels 
      at high load (Thanks Giovanni Caporaletti (@TrustNoOne) for debugging.)
 fix: possible crash when reconnecting to Redis cluster (introduced in 1.1.3)
1.1.3 (Mar. 25 2017)
 fix (security): incorrect handling of WS optimization could trigger SIGABRT
 fix: Redis cluster reconnect readiness verification
1.1.2 (Mar. 1 2017)
 change: "interprocess alert X delayed by Y sec" log messages downgraded 
      from ERROR to NOTICE
 fix: "group info string too short" error
 fix: Incorrect handling of connections to Redis cluster nodes with round-robin
      DNS hostnames (Thanks to ring.com for sponsoring this fix!)
1.1.1 (Feb. 8 2017)
 fix: incorrect stats for nchan_stub_status after reload.
      (Stats are no longer reset after reload)
 fix: websocket subscriber may receive two CLOSE frames
 fix: websocket with ws+meta.nchan subprotocol did not receive empty messages
 feature: websocket client heartbeats with nchan_websocket_client_heartbeat
 fix: websocket now echoes code and reason when connection close initiated from client
1.1.0 (Jan. 4 2017)
 feature: websocket subscribers now receive "application/octet-stream" messages
      in binary frame rather than text
 fix: publisher request variables not always passed to nchan_publisher_upstream_request
 feature: Redis storage 'backup' mode strictly for data persistence
 fix: possible lingering subscriber if connection is closed just before subscribing
 fix: possible memory leak when using multiplexed channels
 security fix: subscribing with If-Modified-Since and without If-None-Match headers
      crashed the Nginx worker (thanks @supertong)
 security fix: sending an empty message to multipart/mixed subscriber crashed Nginx worker
 fix: publisher & subscriber response codes were logged incorrectly
 fix: websocket subscriber memory leak on upstream authentication failure
 fix: possible crash after reloading when using several instances of Nchan with Redis
 feature: nchan_access_control_allow_origin can accept nginx variables
 feature: Redis key namespaces
 feature: all size configurations can now parse decimal values
 fix: off-by-one subscriber count when using multiplexed channels
 feature: accounting and dynamic limits for channel groups
1.0.8 (Nov. 28 2016)
 fix: possible crash under severely heavy load, introduced in 1.0.7 with stack-overflow fix
1.0.7 (Nov. 27 2016)
 fix: memory leak after websocket publisher uncleanly aborts connection
 fix: misbehaving websocket publisher with nchan_publisher_upstream_request
 fix: potential stack overflow with very large message buffers
 fix: invalid memory access with empty nchan_publisher_upstream_request for websocket publisher
 fix: incorrect handling of chunked response from nchan_publisher_upstream_request
 fix: publishing through websocket too fast may result in buffered messages that never arrive
 fix: DELETE to multiplexed channel should delete all listed channels
 fix: abort if publishing to multiple channels while using redis
1.0.6 (Nov. 15 2016)
 fix: large messages were sometimes incorrectly cleaned up, leaving behind temp files
 fix: file descriptor leak when listening on a unix socket and suddenly 
      aborting client connections
 fix: invalid memory access after reloading twice with redis enabled
 fix: crash after shutting down nginx when 'master_process' set to 'off'
 change: nchan_max_channel_subscribers now always refers to subscribers on this instance of
      Nchan, even when using Redis.
 feature: subscribe/unsubscribe callbacks with nchan_subscribe_request and nchan_unsubscribe_request
1.0.4 (Oct. 28 2016)
 security: fix crash when receiving large messages over websocket with ws+nchan subprotocol
1.0.3 (Sept. 3 2016)
 feature: nchan_message_timeout and nchan_message_buffer_length 
      can now use nginx variables for dynamic values
 fix: unsolicited websocket PONGs disconnected the subscriber in violation of RFC6455
 fix: possible script error when getting channel from Redis
 fix: possible incorrect message IDs when using Redis (thanks @supertong)
 security: possible invalid memory access on publisher GET, POST, or DELETE when
      using Redis and the publisher connection is terminated before receiving
      a response
 fix: correct publisher response code when nchan_authorize_request is unavailable
      (502 instead of 500)
 security: crash if publisher POSTs request with no Content-Length header when 
      using nchan_authorize_request
1.0.2 (Aug. 29 2016)
 fix: more informative missed-message warnings
 fix: invalid memory access when Redis enabled without setting server URL
 fix: incomplete redis channel deletion
 fix: Redis command responses may not be processed after large message
      until next command
 feature: catch up with missed messages after reconnecting to Redis cluster
 fix: possible invalid memory access after disconnecting from Redis cluster
 fix: Redis-stored unbuffered messages may not be delivered
 fix: possible invalid memory access when using previously idling channels
 fix: invalid memory access if publisher POST request's connection terminates
      before receiving response
 fix: messages published rapidly to Redis via different Ncnan servers may
      be received out of order
 fix: possible stack overflow when receiving messages through Redis
      for multiplexed channels
 fix: channels with 'nchan_store_messages off' published 1 message per second
 fix: issue warning when out-of-order published message is detected
 fix: Redis cluster compatibility with channel ids containing '}' character
 fix: Redis-stored channel deleted too quickly when publishing short-lived messages
1.0.1 (Aug. 22 2016)
 feature: nchan_stub_status shared memory accounting
 fix: various compiler warnings
1.0.0 (Aug. 20 2016)
 fix: incorrectly repeated subscriber_enqueue channel events
 fix: badly handled Redis messages with TTL < 1 (again)
 fix: websocket didn't close connection on PING fail
 feature: nchan_stub_status stats location
 fix: bad memory access for Redis channels when unsubscribing and very busy
 optimize: SSE2 & AVX2 optimizations for websocket frame unmasking
 feature: Redis Cluster support
 (WARNING:) data in Redis from previous versions will be inaccessible
 feature: different locations can use different Redis servers
 feature: nchan_subscriber_first_message can take a number (positive or negative) 
      for nth message (from first or last)
 feature: expire Redis-stored idle channels with nchan_redis_idle_channel_cache_timeout
 fix: some multiplexed channels never garbage-collected when inactive
 fix: unbuffered message garbage collector was too lazy
 fix: update nchan_message_buffer_length correctly when using Redis (thanks @supertong)
 fix: incorrect handling of missing/expired messages in multiplexed channels
 fix: memory leak when publishing via Websocket on a pubsub location
 fix: multiplexed channel DELETE when using Redis handled incorrectly
 fix: rare Redis script error when publishing message
 fix: Redis connection ping infinite loop when reloading
 fix: crash if Redis message TTL less than 1 sec
 fix: message delivery occasionally stopped when using Redis 
      and rapidly publishing messages
 fix: logpoll-multipart sometimes failed to respond when using Redis 
      and rapidly publishing messages
 fix: don't crash if Redis server is busy loading data
0.99.16 (Jun 10 2016)
 fix: invalid memory access when upstream subscriber authorize request failed
 fix: longpoll-multipart subscriber was managed incorrectly on channel deletion
 fix: subscribers may not receive messages after Redis reconnection
0.99.15 (May 31 2016)
 feature: Redis client keepalive configurable with nchan_redis_ping_interval
 feature: try to reconnect to Redis after lost connection to Redis
 fix: invalid memory access after lost connection to Redis
 fix: use-after-free error if subscriber disconnects before response 
      from upstream authorize server (thanks Filip Jenicek)
 fix: corrupt longpoll-multipart boundary data with long messages
 feature: 'raw' mode for longpoll-multipart
 feature: http-raw-stream client, like Push Stream Module's 'stream' mode
 fix: incomplete longpoll-multipart response when using Redis
 fix: "subrequests cycle" error for websocket publisher for nginx > 1.9.4
 fix: nchan_channel_id_split_delimiter inheritance
 fix: subscriber memory leak from 0.99.8
 fix: reload crash from 0.99.14
0.99.14 (May 4 2016)
 fix: trailing NULL character in Publisher response content-type for json, xml, and yaml
 fix: don't crash when out of shared memory
 fix: invalid memory access when using nchan_publisher_upstream_request with websocket 
 fix: incorrect stored messages count when using Redis store
 fix: incorrect last_message_id on publisher GETs (memstore and Redis)
 fix: incorrect behavior when subscribing right after startup before all workers are ready
 fix: some internal event loop timers were not being canceled, leading to slow shutdown
 fix: resuming some subscribers with valid message ids didn't work when using Redis store
 fix: possible invalid memory access when restarting Nginx after using multiplexed channels
 fix: accept url-encoded message ids
 feature: add ws+meta.nchan websocket subprotocol that include message metadata
 fix: all requests after X-Accel-Redirect from upstream were treated as GETs
0.99.13 (Apr. 20 2016)
 fix: invalid content-length for nchan_authorize_request publisher requests
 fix: "subrequests cycle" error after 200 websocket publish requests
 fix: zero-size buf warning when publishing empty messages via websocket
 fix: nchan_max_channel_subscribers was ignored
 fix: use a blocking Redis connection for commands during shutdown to ensure commands are sent
 fix: better TTL handling for Redis keys
0.99.12 (Apr. 10 2016)
 fix: SPDY compatibility with EventSource and multipart/mixed subscribers
 fix: warnings when shutting down Redis storage
 feature: use system's hiredis library if present
 fix: incorrect handling of missing messages when publishing to Redis
0.99.11 (Apr. 3 2016)
 feature: nchan can be built as a dynamic module (for nginx >= 1.9.11)
0.99.10 (Apr. 2 2016)
 fix: messages not freed until expired after being deleted from channel
 fix: buffering and output issues for large messages
 update: hiredis updated to v0.13.3
 fix: Redis publishing and subscribing memory leaks
 optimize: per-channel Redis subscriber counts batched into 100-ms intervals
    to prevent Redis roundtrip floods
 fix: Redis subscriber memory leak
 refactor: extracted shared subscriber and message store logic
 fix: use-after-free error for Redis channels without subscribers
 fix: channel readying logic sometimes got confused and tripped up assert()s
 fix: even more proper handling of websocket close frames
 change: 408 Request Timeout instead of 304 No Content status code for timed out subscribers
0.99.8 (Mar. 13 2016)
 fix: multipart/mixed subscriber output issues
 fix: memory leak for multiplexed > 4 channels
 fix: invalid memory access for aborted subscriber connection with Redis
      and nchan_subscribe_existing_channels_only
 fix: accept websocket binary data frames
 fix: proper handling of websocket close frames
 fix: incorrect expire calculation for cached Redis-stored messages
 fix: double free for multiplexed >4 websocket subs
0.99.7 (Mar. 10 2016)
 fix: websocket infinite ping loop after reload
 feature: nchan_subscriber_message_id_custom_etag_header for misbehaving proxies that eat etags
 fix: 100% cpu after lost Redis connection
 fix: refined CORS cross-origin access control headers and logic
 fix: longpoll subscriber in multipart mode didn't output all messages
 fix: longpoll subscriber in multipart mode could access invalid memory
 fix: compatibility with supported Redis versions < 2.8.14
 fix: nchan_message_timeout 0 should not expire messages
0.99.6 (Feb. 22 2016)
 fix: SIGHUP reloading under load
0.99.5 (Feb 15 2016)
 fix: publishing with client_body_in_file_only enabled
0.99.4 (Feb 12 2016)
 fix: invalid memory access in channel DELETE response
 fix: race condition in IPC during channel creation (thanks vtslothy)
0.99.3 (Feb 10 2016)
 fix: SIGHUP reloading
 fix: startup with insufficient file descriptors shouldn't crash
 fix: longpoll-multipart failure to immediately respond
 fix: longpoll-multipart abort handling
 fix: Redis-store cached message timeouts
 fix: Redis connection-lost handling
 fix: startup with 'master_process off' (single-process mode)
 feature: EventSource 'event:' line support with custom header or config
0.98 (Jan 21 2016)
 feature: publish to multiple channels with one request
 feature: nchan_longpoll_multipart_response config setting
 fix: large message (in-file) handling for multipart/mixed and chunked subscribers
 fix: 400 Bad Request error on 32-bit systems
 fix: memory allocation error for >8 multi-channel subscribers
0.97 (Jan 5 2016) 
 fix: build issues with debian
 fix: compatibility with nginx versions down to 1.0.15
 fix: publishing bug introduced in 0.96
0.961 (Jan 4 2016)
 fix: compiler warning
0.96 (Jan 1. 2016)
 feature: websocket ping with nchan_websocket_ping_interval
 fix: unsafe memory access for Redis publisher
 feature: nchan_publisher_upstream_request
 fix: http/2 compatibility for EventSource and multipart/mixed
 fix: nchan_authorize_request for publisher location endpoints
 fix: publishing long (stored in file) messages to Redis-store
0.95 (Dec. 24 2015)
 feature: configurable nchan_access_control_origin_header, default to *
 fix: recognize non-preflighted CORS requests
 fix: Redis invalid memory access after timeout
0.94 (Dec. 22 2015)
 feature: last mesage id in channel info response
 feature: subscribe up to 255 channel ids using nchan_channel_id_split_delimiter
 fix: tried connecting to Redis when not needed
 change: "last requested" no longer has a -1 value for 'never requested'.
 fix: "last requested" in channel info sometimes not updated
 fix: deleting empty channels
 change: more compact message ids
0.931 (Dec. 14 2015)
 optimize: inter-process internal subscriber fetched too many messages
0.93 (Dec. 12 2015)
 feature: optionally only use Etag for subscriber message id
 feature: optionally get requested message id from variable config
0.92 (Dec. 11 2015)
 feature: HTTP multipart/mixed subscriber
 fix: EventSource bad memory access on disconnect
 feature: HTTP chunked encoding subscriber
 fix: resolved some strict compiler warnings
 fix: more stringent out-of-memory detection during response output. thanks @woodyhymns
 fix: less-than-optimal cache filename handling. thanks @ZhouBox
 fix: incorrect EventSource charset in header. thanks @eschultz
 fix: segfault when websocket publishes message and immediately disconnects
 fix: Duplicate "Connection: Upgrade" header for websocket handshake. thanks @eschultz 
0.904 (Dec. 7 2015)
 fix: more flexible Websocket handshake for "Connection" header. thanks @eschultz
 fix: out-of-memory safety check. thanks @woodyhymns
0.903 (Dec 3 2015)
 fix: better Redis engine connection initializer
 change: simpler message buffer settings
 fix: more backwards-compatibility for pushmodule config settings
0.9 (Dec. 2 2015) - first beta pre-release tag after rebranding as Nchan
 feature: meta channel events: track when subscribers connect and disconnect, and when messages are
          published, with configurable event strings
 feature: request authorization: send upstream request before publishing or subscribing.
          works just like the auth_request module.
 feature: channel multiplexing. up to 4 channels can be subscribed to from a single location
 fix: channel ids were not set within if statements in the nginx config
 feature: hybrid memstore + Redis storage. local caching + distributed message publishing, the best
          of both worlds. (still slower than pure memstore though)
 feature: pubsub locations, optional separate publisher and subscriber channel ids per location
 feature: websocket publisher support
 name change: we're nchan now. code renamed, and cleaned up. config options are backwards-compatible.
 feature: websocket subscriber support
 huge refactor: completely new in-memory storage engine. No more global lock.
    Actually, no more locks at all!
 feature: Redis storage engine. 
0.73 (Sep. 2 2014)
 fix: turning on gzip cleared Etag subscriber response header
 fix: channels incorrectly deleted when overwhelmed with connections
 feature: CORS support via OPTIONS request method response
 fix: file descriptor leak when restarting nginx via SIGHUP
 improve: concurrency for interprocess notifications
 refactor: completely encapsulated message store
 fix: slow memory leak introduced in 0.7
 fix: memory leak when not using message buffer
0.712 (Mar. 21 2014)
 fix: intermittently dropped long-polling connections on internal redirects
 fix: unable to proxy long-polling subscribers. (thanks wandenberg and sanmai)
0.711 (Mar. 13 2014)
 fix: incompatibility with cache manager (proxy_cache and fastcgi_cache directives)
0.71 (Mar. 1 2014)
 fix: removed unused variables and functions to quiet down GCC
0.7: (Feb. 20 2014)
 fix: last-in concurrency setting wasn't working reliably
 refactor: partially separated message storage. add a test harness.
 fix: segfault from concurrency bug while garbage-collecting channels
 fix: some large messages got lost
0.692 (Feb. 3 2010)
 fix: error log reported failed close() for some publisher requests with large messages
 fix: occasional memory leak during message deletion
 fix: worker messages intended for dead worker processes were not deleted
0.691 (Feb. 2 2010)
 fix: server reload (via SIGHUP signal) was failing
 fix: segfault on messages longer than client_body_buffer_size (thanks wfelipe)
 change: removed push_min_message_recipients, added push_delete_oldest_received_message
0.69 (Nov. 17 2009)
 fix: publisher got a 201 Created response even if the channel had no subscribers at the time (should be 202 Accepted)
 fix: small memory leak after each message broadcast to a channel
 feature: optional push_max_channel_subscribers setting added
 fix: first-in concurrency setting wasn't responding to subscribers with a correct status code on conflict
 fix: reused subscriber connections sometimes failed to receive messages
 unfeature: no more nginx 0.6 support. not worth the hassle.
0.683 (Nov. 10 2009)
 change: default max. reserved memory size changed form 16MB to 32 MB
 change: unused node garbage collection made a little more aggressive (max. 3 unused channels per channel search instead of 1)
 fix: unused nodes were deleted only on channel id hash collision (very rare)
 fix: segmentation fault from allocating insufficient memory for interprocess messaging
0.681 (Nov. 6 2009)
 feature: added push_message_buffer_length setting, which sets push_message_max_buffer_length and push_message_min_buffer_length at once.
 fix: publisher channel info text/json response now uses double quotes instead of single.
 fix: interprocess messages were not removed from shared memory correctly, causing weird errors
0.68 (Nov. 5 2009)
 change: default push_subscriber_concurrency value is now "broadcast"
 fix: incorrect error messages for invalid push_pubscriber and push_subscriber_concurrency settings
 change: removed deprecated push_buffer_size and push_queue_messages settings
 feature: rudimentary content-type negotiation for publisher channel info response.
   support text/plain, text/json, text/yaml and application/xml (and mimetype equivalents)
 fix: publisher GET response has HTTP status 0
0.67beta (Nov. 4 2009) and older
 see git repository