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