LIGHTSTREAMER CHANGELOG
Server: Adapters: Clients:
Lightstreamer Server
6.1.0 build 1817
Compatible with the deployment structure of the previous version.
May not be compatible with configuration files for the previous version; see the compatibility notes below.
Compatible with the database of the MPN Module for the previous version.
Released on 23 Jan 2017

Introduced the support for a new client protocol, named TLCP, with various improvements, that can be leveraged by client SDKs and by custom clients. See the SDK for Generic Clients for details.

Introduced the <response_http_headers> configuration block, which allows for basic control over the HTTP headers used in Server responses. This may be required by some intermediate nodes.
Also included a suggested configuration setting which may help to enable streaming support when proxies of several types are involved.

Fixed a bug related with the content-length configuration. When a value higher than 2^31 was configured for <content_length> or specified on the client side, it would be read wrongly and an internally determined lower bound of 10000 would be used instead.
The same bug affected the <max_streaming_millis> setting; in that case, high values were interpreted as not limiting at all.

Fixed the documentation for the "name" attribute of the <http_server> and <https_server> blocks, where the allowed character range was missing. The use of non ASCII or ASCII control characters could, in particular cases, have caused errors in the communication with the clients.
Added a check on the configured names which now refuses disallowed characters. COMPATIBILITY NOTE: If disallowed characters have been used, the configuration may have to be modified.

Fixed the documentation and the management of the <control_link_address> and <control_link_machine_name> configuration elements, where the use of non standard characters could, in particular cases, have caused errors in the communication with the clients.
Unicode names are currently supported by the Web, Node.js, Java, and Android (Unified API) Client SDKs and by the Generic Client SDK. More will come.

Introduced a limited support for JVM property expansion in the interpretation of the adapters.xml files. It has to be enabled through a new configuration flag, <enable_expansion_for_adapters_config> in the main configuration file. The new factory configuration enables the feature. COMPATIBILITY NOTE: In existing installations the interpretation will not change, as the feature is disabled by default.

Improved the factory settings of the log configuration file, with regard to the display of the logger name by the preconfigured "LSDailyRolling" appender. The new "%-19.19c{19}" setting is recommended, because it causes Logback to shorten the "LightstreamerLogger" part of the names to "L", allowing for a reduced field, while preserving the other parts of the names. The previous setting was "%-33.33c"

Added the "private" property to the <client_identification> configuration element, to prevent sending the determined client address to the client, which is done by some of the Unified Client SDKs.

Clarified the description of the <cross_domain_policy> configuration block, for what concerns the origin checks on WebSockets.
Clarified the description of the <max_buffer_size> configuration element, to cite the case of the snapshot for DISTINCT items.

Revised the error messages sent to the client. Improved the messages upon request syntax errors, for the benefit of tests with the Generic Client SDK. Used less specific messages on subscription errors, to avoid specifying item names.

Slightly modified the behavior upon unexpected request URLs. The configured error page will no longer be sent upon URLs related to features that are currently not supported or not enabled, but a HTTP 400 error will be issued instead.
Modified the behavior upon syntactically wrong requests. A HTTP 400 error instead of a HTTP 500 error will now be issued.
Revised the low-level WebSocket close code used, so as to report a non-successful close only when really needed.

Added a suggested configuration setting in the <response_http_headers> block, which may help to enable streaming support when proxies of several types are involved.

Revised internal optimizations on field value processing to focus on the most recent client libraries.

Improved logging by LightstreamerLogger.requests.messages by adding message forwarding details at DEBUG level.
Improved logging by LightstreamerLogger.subscriptions at DEBUG level, by handling the case of byte array values.

Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade of the license file is needed.

6.0.4 build 1807
May not be compatible with the deployment structure of the previous version; see the compatibility notes below.
Compatible with configuration files for the previous version.
Compatible with the database of the MPN Module for the previous version.

MPN Module: fixed handling of cases where a device tries to subscribe multiple times in a short period of time, possibly causing device duplication.
Note: duplication is still possible if multiple subscriptions are sent on different client sessions connected to different Server instances at the same time. In this scenario the MPN Module tries to detect the spurious devices and deletes them automatically.

MPN Module: fixed handling of "InvalidPackageName" error code from the GCM (now Firebase Cloud Messaging) service. The device is now suspended, similarly to a "NotRegistered" error code.

Updated the included versions of some third-party libraries used by the MPN Module. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.

Aligned the install scripts to current naming of macOS system.

6.0.3 build 1803
May not be compatible with the deployment structure of the previous version; see the compatibility notes below.
May not be compatible with configuration files for the previous version; see the compatibility notes below.
Compatible with the database of the MPN Module for the previous version.
Released on 5 Sep 2016

Fixed a bug in Mobile Push Notification module that resulted in payloads for APNs being rejected if longer than 256 bytes. Now payloads up to 2048 bytes are accepted, as expected.

Fixed a bug introduced in version 6.0, which could have caused incorrect, hence refused, responses to session requests by very old versions of Web Client SDK Library. However, the malfunctioning was only associated with the use of uncommon transports, usually needed only as fallbacks for old browsers.

Fixed a bug introduced with version 6.0, which caused the "pool queue wait" statistics to be always reported as 0. This affected managers based on JMX Extension SDK (including the JMX Tree) and the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log.

Fixed a bug in the implementation of the JMX Extension SDK, which caused the values for the AvgQueueWaitMillis and CurrQueueWaitMillis properties in the ThreadPool MBean to be switched.

Updated the included versions of some third-party libraries. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.
Updated the included version of the slf4j library from 1.7.8 to 1.7.21. This library can be accessed by custom code from Adapters configured for the "log_enabled" ClassLoader. COMPATIBILITY NOTE: no compatibility issues are expected, but see the slf4j changelog for any details.
Updated the included version of the logback library from 1.1.2 to 1.1.7. This library governs the interpretation of the logging configuration file. COMPATIBILITY NOTE: this library has added some consistency checks and may behave differently with existing log configuration files that are not fully compliant. See the logback changelog for any details.

Performed several improvements to the preinstalled welcome page.

6.0.2 build 1797
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
May not be compatible with configuration files for the previous version; see the compatibility notes below.
Compatible with the database of the MPN Module for the previous version.
Released on 10 May 2016

Fixed a bug in the management of clearSnapshot for items subscribed to in DISTINCT mode. The bug affected the first update after clearSnapshot and could cause some fields to be dispatched with wrong values. Specifically, let [B2,B1,CS,A1] be a sequence of events sent to a client (where CS is the ClearSnapshot): any field in A1 that was identical in B2 but different in B1 would have been reported with the value it had in B1, hence wrongly.

Fixed a syntax error in the installation script for Linux, that was introduced in version 6.0.1 build 1778.

Fixed a bug introduced in version 4.0 and regarding encoding of custom error messages when sending them to clients based on Web and Node.js (Unified API) Client SDKs; such messages can be supplied through the exceptions thrown by notifyUser and notifyNewSession. The bug only affected messages which included double quotes and would cause the onServerError callback not to be invoked at all on the client JavaScript code.

Fixed an inefficiency in the processing of COMMAND mode snapshot introduced in version 6.0 build 1737. The issue was noticeable only with snapshots of many thousands of keys.
Removed the same kind of inefficiency also with regard to real-time updates.

Improved the handling of cross-origin requests (used by the Web (Unified API) Client SDK), by returning the appropriate headers also upon most error responses.

Revised the parsing of the various configuration files (including adapters.xml) to improve diagnostics. Some space characters are now ignored. COMPATIBILITY NOTE: No change is to be expected in the interpretation of correct configuration files.

Slightly revised the page supplied by the internal Web Server upon a 404 error, to also have IE and Edge display it rather than a custom page.

Enforced upload of audit logs by default when LICENSE_SERVER is configured in lightstreamer_version_conf.xml. COMPATIBILITY NOTE: If the upload is undesirable or problematic for any reason, it can be suppressed with the subsequent <automatic_audit_upload> element.

Extended the factory settings for the <remove_cipher_suites> elements, to comply with the current common recommendations.

Clarified in the configuration file that the names chosen for the <http_server> and <https_server> blocks are available to the clients.

Realigned the launch script to suggest the use of java 8.

Put a reminder about JMX RMI connector credential setting in PRODUCTION_SECURITY_NOTES.TXT.

Updated the Client Library included in the Monitoring Dashboard to SDK for Web Clients (Unified API) Version 7.0.2. COMPATIBILITY NOTE: If LICENSE_FILE is configured in lightstreamer_version_conf.xml and the supplied license file doesn't support Web SDK Version 7.0.2, still no upgrade is needed in order to use the Monitoring Dashboard.

6.0.1 build 1780
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Compatible with the database of the MPN Module for the previous version.
Released on 30 Jul 2015

Changed the default for the <handshake_pool_size> setting, from 1 to half the number of available cores, to better cope with intense client reconnection activity.

Updated the "file tag" of the launch scripts. The update was due, but forgotten, in the previous release, to reflect the applied changes.

Put a reminder of the <server_tokens> setting in PRODUCTION_SECURITY_NOTES.TXT.

6.0.1 build 1778
May not be compatible with the deployment structure of the previous version; see the compatibility notes below.
Compatible with configuration files for the previous version.
Compatible with the database of the MPN Module for the previous version.
Released on 16 Jul 2015

Fixed a bug triggered by thread pool settings of a 0 "max_size" (which means unlimited in this case) and a 0 "max_free", for pools which support these settings. The bug would cause a progressive and unlimited growth of the pool.

Fixed a bug introduced with version 6.0, which caused the count of the total number of internal selectors to be always reported as 0. This affected managers based on JMX Extension SDK (including the JMX Tree) and the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log and the Monitoring Dashboard.

Fixed a bug which, in case of a massive disconnection of clients, could have caused some harmless error conditions on single connections to be reported and handled as serious errors affecting the whole NIO selector.

Extended the check of the <read_timeout_millis> setting in the case of TLS/SSL handshake operations. Now this delay limit is applied not only to read, as well as write, operations related to the handshake, but also to any queueing of elaboration tasks on the "TLS-SSL AUTHENTICATION" or "TLS-SSL HANDSHAKE" thread pool.
Clarified in the log when a connection is closed due to the <read_timeout_millis> setting.

Updated the included versions of some third-party libraries. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.

Extended the launch scripts to allow for the customization of the path of the main configuration file through an environment variable; before, a custom modification of the script was the only way to achieve that. COMPATIBILITY NOTE: The script now checks a variable named LS_CONFIG; in case the same name were currently used for a custom variable in the launching environment, this would rise a conflict.

Extended the launch script for unix/linux to clarify how to handle the case in which the file descriptor limit has to be manually supplied.

Extended the installation script for Redhat, so that the installed System V init script now supports the "status" option to determine the current status of Lightstreamer server. This enables the "status" command for the "service" utility.

Revised the internal handling of field values to improve the most common usage scenarios. This also extends the cases of early conversions of field values, hence extending the scope of the <force_early_conversions> configuration element.

Applied some performance improvements to cope with a huge number of concurrent requests for new sessions.

Reorganized the initial configuration phase; some log messages related to adapters and jmx initialization may have changed.

Slightly refactored the launch scripts, to simplify custom changes.

Applied some improvements to the Monitoring Dashboard layout. Changed the layout of the "JVM Memory Heap" chart.

Added some clarifications to the General Concepts document.

6.0 build 1741
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Compatible with the database of the MPN Module for the previous version.
Released on 13 Feb 2015

Added an early check of the correctness of any trigger expressions configured, whose failure will prevent startup; before, all related notification deliveries would just fail.

Clarified in the Clustering document how to handle the case in which a Load Balancer discontinues the stickiness during a session and improved the internal handling of this case.
Also clarified how a rebalancing can be enforced. Introduced, to this purpose, the <max_session_duration_minutes> configuration flag, to set a maximum duration for client sessions, after which a client has the opportunity to recover with a new session, and the Balancer has the opportunity to migrate the client to a different Server instance.

Fixed a wrong startup check which caused the startup to fail upon a missing <reaction_on_database_failure< flag also when the MPN Module was not enabled.

Fixed a bug in the computation of statistics on the MPN Module activity, used by the PushNotificationsMBean and the internal monitoring Data Adapter and log. The values that represent averages over an interval were reported delayed, among the data for the subsequent interval.

Revised and improved the Monitoring Dashboard.
Fixed a bug which caused wrong decimal parts to be displayed for the "total bytes" fields when more than 1GB was reported.
Fixed a bug which caused a wrong value to be displayed in the "total heap" donut when more than 1GB was reported.
Fixed the general behavior related to the case in which the Server was not reachable. In particular, when reconnecting after a temporary disconnection, the charts are now cleared to avoid confusion.
Improved the usability in several other small aspects.

Improved the functionality of the preinstalled welcome page in several small aspects and fixed some browser compatibility issues. This also removes some possible harmless warning messages from the Server console.

Fixed a bug introduced in build 1737 which caused loss of compatibility with very old Metadata Adapter binaries (as IllegalArgumentException was thrown upon the invocation of methods with an old signature).

Fixed the determination of the SDK versions used by the clients, which was ignoring the subminor version number. This also affects the values reported by the JMX interface.

Extended the install script for MACOSX (now macOS) with suitable variables to customize the IDs if a new user and/or group has to be created.

Added a default configuration for loggers used by the included third-party "Apache Velocity" library.

Added identification tags at the beginning of various configuration files and launch scripts. By keeping them, future upgrades of these files may be automated.

Removed the main README file, but kept directives on how to upgrade in the new HOW_TO_UPGRADE.TXT file.

6.0 build 1737
Not compatible with the deployment structure of the previous version; see the compatibility notes below.
Not compatible with configuration files for the previous version; see the compatibility notes below.
Released on 21 Jan 2015
Systemwide Changes and Extensions

Introduced a Push Notification Service (or MPN Module), which can be leveraged by the clients to have notifications sent to their devices, through an available third-party Push Notification Service, upon updates for subscribed items. Currently, only sending notifications through Apple's APNS and Google's GCM is supported and requesting subscriptions for such notifications is only supported by the iOS / OS X (now macOS) and the Android Client SDKs, respectively. See the new chapter 5 in the General Concepts document for an introduction to the feature.
Introduced several new thread pools for the MPN Module operations. The module also leans on an external database, which, in case of a cluster of Server instances, can be shared among all instances. See the new optional <mpn> configuration block for configuration details. The new optional <max_mpn_devices> element is also available, to set activity limits for protection.
Introduced a suitable logger, "LightstreamerLogger.mpn", with several subloggers, for the MPN Module log (see the factory logging configuration file for details). When enabled, the MPN Module will also produce its own Audit Logs.
Note that the feature may not be available, depending on the license terms. It is always available in the LICENSE_SERVER and DEMO cases, in the latter case with a limit of 20 devices served. However, the MPN Module is not available with this edition. New libraries have also been added under the "lib" directory for this extension. COMPATIBILITY NOTE: If using a custom launch script, ensure that the new libraries are referred.
Conflicts between the new libraries and existing Adapter code are no longer possible, because of the newly introduced ClassLoader separation.

Extended the provided Monitoring Data Adapter with statistics related with the newly introduced MPN Module. See the last paragraph of the General Concepts document and Look for the PUSH_NOTIFICATIONS.* fields for details.
Extended the Internal Monitor log to include some of the new MPN Module statistics, but only when the module is enabled.
The extension is also leveraged by the new Monitoring Dashboard. However, with the included license, all the new statistics will always hold a 0 value. However, the MPN Module is not available with this edition, hence all the new statistics will always hold a 0 value.

Introduced a Push Notification Service (or MPN Module), which can be leveraged by the clients to have notifications sent to their devices, through an available third-party Push Notification Service, upon updates for subscribed items. However, the MPN Module cannot be enabled in Moderato edition.
Extended the provided Monitoring Data Adapter with statistics related with the MPN Module, as documented in the last paragraph of the General Concepts document. The extension is also leveraged by the new Monitoring Dashboard. However, in Moderato edition, all the new statistics will always hold a 0 value.

Introduced the Monitoring Dashboard, which extends and replaces the Monitor Console. The new page has multiple tabs, which show the information available in the previous Monitor Console with significant visual improvements; moreover, the last tab shows the newly introduced JMX Tree, which exposes the JMX interface in web form.
COMPATIBILITY NOTE: *** IMPORTANT *** The security level previously adopted for the access to the Monitor Console may no longer be adequate for the full Monitoring Dashboard, which enables data view and management, including the Server shutdown operation (note that the JMX Tree is enabled by factory settings). We recommend configuring the credentials and protecting them by making the Monitoring Dashboard only available on https server sockets, and furtherly restrict the JMX Tree to ports not accessible from the Internet, by leveraging the settings in the <dashboard> configuration block. See PRODUCTION_SECURITY_NOTES.TXT for a full check-list. The Monitoring Dashboard can be reached through a different URL path, whose default is /dashboard. The path can be changed through the <dashboard_url_path> element under the <dashboard> block. COMPATIBILITY NOTE: If keeping an existing installation where the Internal Web Server is leveraged, ensure that there are no conflicts with the new reserved path. The extension is associated to several changes with respect to the previous configuration rules:

New libraries have also been added under the "lib" directory for this extension. COMPATIBILITY NOTE: If using a custom launch script, ensure that the new libraries are referred.
Conflicts between the new libraries and existing Adapter code are no longer possible, because of the newly introduced ClassLoader separation.

Removed the proprietary Sun/Oracle HTML adaptor to the JMX interface; now, web access to the JMX interface can be performed through the new Monitoring Dashboard, with the included JMX Tree. As a consequence, web access to JMX can now be performed through the normal listening ports, with no need for a dedicated port. This also allows for access through https, which was not available with the old HTML adaptor. COMPATIBILITY NOTE: If there is a requirement to still rely on a dedicated port, perhaps with restricted firewall rules, for web access to JMX, then it is possible to setup a new server port through <http_server> or <https_server> and restrict the visibility of the JMX Tree to only this server port, through the settings in the <dashboard> block. COMPATIBILITY NOTE: Any credentials set to ensure restricted access to the HTML adaptor can be transferred to the Monitoring Dashboard, through the settings in the <dashboard> block. Note that the involved users will have access to the full Monitoring Dashboard features. Removed the <html_adaptor> configuration section from the <jmx> block. COMPATIBILITY NOTE: If keeping an existing configuration file, the <html_adaptor> block, if present, must be removed; otherwise the Server will refuse to start, in order to avoid confusion.

Introduced separate ClassLoaders for the loading of the external libraries used by the Server internally. This means that all these libraries are no longer visible from Adapter code and this should prevent the rise of any conflicts. COMPATIBILITY NOTE: No issues are expected, but see the SDK for Java In-Process Adapters changelog for the details. Should any problem arise, the previous behavior can also be restored, by changing the classpath setting in the Server launch script (see the inline comment for details). As a consequence, added separate libraries in the "lib" directory, containing the custom helper classes needed for the log configuration and the minimal server startup code. Also moved most external libraries in dedicated subdirectories. The above has also required a thorough modification of the launch scripts. COMPATIBILITY NOTE: It is not possible to reuse a current installation of the previous 5.1.2 version and just overwrite the libraries; a fresh installation is needed and the new launch script has to be used. Any custom launch script should be revised.

Extended the log configuration to handle some of the included third-party libraries (see the factory logging configuration file for details). COMPATIBILITY NOTE: Conflicts with any configuration for the same libraries in existing Adapter code are no longer possible, because of the newly introduced ClassLoader separation. COMPATIBILITY NOTE: If reusing an existing configuration, the new loggers should be added; otherwise, some undesired log may be received from the newly included libraries.

Introduced the management of the Proxy Protocol, which allows a local reverse proxy or load balancer to provide information on the remote endpoint in a direct way. See the new configuration elements in the <client_identification> blocks for details, also about how the existing elements interact with the new ones. A dedicated logger, LightstreamerLogger.connections.proxy, has also been added.

Introduced the <allow_protocol> and <remove_protocols> configuration elements in the <https_server> to make it possible to restrict the protocol versions to be used in the TLS/SSL interactions.
Introduced the same elements also in the <rmi_connector> block, to configure the JMX communication channel.

Changed the factory and recommended settings for TLS/SSL sockets, to remove weak protocols, by leveraging the new <remove_protocols> configuration elements. This may cause some clients to no longer be able to connect; in this case, the added configuration can be modified. COMPATIBILITY NOTE: As the change only involves the factory configuration file, if an existing configuration is kept, it will not be affected by the restriction. However, we recommend manually applying the same restriction to these installations as well.

Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade is needed.

Fixes for Bugs and Defects

Fixed a bug on the management of sendMessage requests for which a sequence is specified; the bug could have caused some messages to be wrongly considered as duplicated, hence discarded, due to a race condition.

Fixed a bug in the internal detection of connection close causes, which could give rise to cause code notifications of 43 (failure) upon some cases of normal close.

Fixed the "stop" scripts, to take the <hostname> specified for the JMX RMI connector or the "java.rmi.server.hostname" property into account, as the Server does.

Fixed a bug which caused the "stop" scripts to fail when the Server was still blocked in the startup phase, typically while waiting for the initialization of some Adapter.

Improved the launch scripts to enforce, by default, a maximum pause setting for the GC. This fixes cases in which the default settings could allow for pauses incompatible with the default timeouts used by the various Client SDKs in socket inactivity checks.

Fixed a memory leak triggered by exceptions thrown by the Metadata Adapter upon notifyNewTables, which also caused the subscription attempt to never be retried until reissued by the client application.

Fixed a bug in the initialization phase, which could have caused the generation of more threads and NIO selectors than configured. These spurious resources wouldn't have been used by the Server, so they would have been just redundant.

Fixed a missing case in which the error page (customizable through the <error_page> configuration element) should have been issued instead of a generic response.

Fixed the install script provided in bin\unix-like\install for the Redhat case, which wouldn't have run correctly if the default installation user had been left.
Changed the install script for the openSUSE case, to also force run-at-startup, as for all other scripts.
Fixed the install script for the MACOSX (now macOS) case, which would have generated a wrong launch script; also revised the way it creates the dedicated user.

Improved the policy for the speculative sizing of the TCP buffers. Fixed cases in which the resizing was inappropriate.
Improved the management of internal buffers; this should reduce the use of short-lived memory for high numbers of sessions, particularly when <reuse_pump_buffers> is set to N.
Fixed missing cases of buffer optimization when <reuse_pump_buffers> is set to N; this significantly improves the scalability in terms of concurrent TLS/SSL connections.

Improved parsing of HTTP requests for the internal Web Server, to limit the cases of unrecognized requests.

Extended the scope of the <server_tokens> configuration element to all aspects of the interaction with the clients. This fixes a few rare cases in which further identification information could be sent also when "MINIMAL" was specified.

Fixed a harmless bug which could have caused redundant logs of lost updates.

Minor Changes and Extensions

Improved the support for request pipelining upon responses in HTTP 1.1, to deal with the case of pipelined requests occurring during streaming or long polling responses.

Improved the management of items requested in COMMAND mode with unfiltered dispatching: unless <preserve_unfiltered_command_ordering> is Y, a round-robin policy is enforced among the keys on updates waiting to be sent. This should prove to be beneficial when no license-related frequency restrictions are in place.

Changed from N to Y the default of the <disable_session_mbeans> configuration flag, so that the related, potentially high, overhead will not affect JMX clients and the Server, unless explicitly requested. COMPATIBILITY NOTE: If keeping an existing configuration file with this element not defined and taking advantage of the JMX interface and the Session MBeans, <disable_session_mbeans> should be explicitly set to N.

Improved the check related with the <server_pool_max_queue> setting. Now, if optional pools are configured in adapters.xml to absorb specific subsets of tasks from the SERVER pool, their task queues are included in the count under check.

Changed the default configuration when installing the Server as a service on Windows: NSSM is now configured not to relaunch the Server in case of failure. If needed, you may configure the service to restart in case of failure by changing the 'Recovery' property of the service. COMPATIBILITY NOTE: Obviously, if the Server is currently installed as a service, it can be updated without being affected by this change; the change will take place only on the next installation. Improved the support for the installation of the Server as a service under Windows; now it is possible to configure the display name, the description and the startup type. See "README.TXT" under "bin/windows" for details.
Improved the LS.bat script by returning, in turn, the exit code returned by Lightstreamer server; the error code is useful if Lightstreamer Server is installed as a service and NSSM is configured not to relaunch the Server, to let Windows correctly manage the service restart.

Removed the log4j jar from the "shared" folder. It was there only for the benefit of the preinstalled demos. COMPATIBILITY NOTE: If there were custom Adapters relying on the predeployed log4j jar, they could be ported in the new structure only by copying the log4j jar too; preferably, the jar should be put in the Adapters own folders.

Updated the included versions of some third-party libraries. COMPATIBILITY NOTE: As the new libraries have different names, ensure that the previous version of the libraries is removed. Moreover, if using a custom launch script, ensure that the new libraries are now referred.
Conflicts between the new libraries and existing Adapter code are no longer possible, because of the newly introduced ClassLoader separation.

Improved the implementation of internal timers; this may reduce memory footprint when strong update merging/filtering is involved.

Modified the default setting of the <selector_max_load> configuration element for the Windows case; previously, it had a dedicated value of 1000 to overcome a known JDK 5 NIO bug; however, the currently supported JDK versions are unaffected. COMPATIBILITY NOTE: If leaning on the default setting, the change should just cause a visible reduction in thread usage. Note that very old versions of JDK 6 for Windows are affected by another NIO bug (2177606) and a higher load on the selectors might, in principle, trigger it.

Added the <snapshot_pool_size> configuration element; now there is full control on the number of threads allocated for all the various internal pools.
Added the <selector_pool_size> configuration element, which allows some control on the overall number of NIO selectors and related threads used by the Server.
Added the <timer_pool_size> configuration element, which allows for parallelization of internal timer activity.

Extended the supplied "MONITOR" Data Adapter by adding a "TIME_MS" field, carrying a UTC timestamp, in all monitor_log_* items.
Extended the supplied "MONITOR" Data Adapter with new statistics on the overall number of item subscriptions performed by the Clients. Look for CLIENT.ITEM_SUBSCR and CLIENT.MAX_ITEM_SUBSCR on the General Concepts document for details.
Extended the Internal Monitor log to include the actual number of item subscriptions. The new statistics is also reported by the new Monitoring Dashboard.

Improved the handling of unexpected empty elements in the "adapters.xml" files.

Moved the activity log of the send_message requests to a suitable sublogger (namely LightstreamerLogger.requests.messages), which allows for easy removal of this log, if overwhelming.

Adjusted the Server's self-identification in answers to clients.
Revised the format of error pages.

Revised the names of some internal thread pools.

Improved logging of closed connection and sessions with details on the connection close cause.

Improved logging of new sessions with information on the type and version of the involved client library, when available.

Introduced the "accept_extra_headers" and "accept_credentials" properties to the <cross_domain_policy> configuration element: if specified they respectively allow the clients to send extra headers and credentials on CORS requests. See description in the configuration file for details.

Optimized memory usage related to item and field names.

Introduced support for the WebPositive web browser.

Documentation and Deployment Level Changes

Clarified in the "SSL Certificates" document how to cope with incomplete certificate chains received.

Revised the Clustering.pdf document, to clarify the conditions for the support of WebSockets by the Load Balancer.
Simplified the document by removing notes pertaining to the support of old browsers; added references into the JavaScript SDK documentation for notes on special cases.

Revised and improved the "General Concepts" document, also with the addition of a thorough introductory section.

Added clarifications on when the <enabled> configuration element within <websocket> can be leveraged to cope with a Load Balancer not handling WebSockets correctly.

Wholly revised the preinstalled welcome page and the related demos. Now, the preinstalled resources are no longer meant as a deployment example that can be used as a starting point for creating your own POC. See the new "demos" site at demos.lightstreamer.com for all the available examples.

5.1.2 build 1623.14
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 22 Jul 2014

Modified the policy for the active session count to be reported in the generated audit logs: sessions will no longer be considered as long as they are in "prestarted" state (see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts document for details). This may give rise to lower averages in the audits, which may actually be seen as a relief of contractual terms. In fact, prestarted sessions may include sessions that have not been completely established because of communication issues, but (perhaps for the same cause) are being kept open for some time.

Improved the internal dispatching of NIO tasks; this may remove bottlenecks in extreme cases.
Improved the internal mechanism of I/O buffer reusal; this may remove bottlenecks in extreme cases.

Introduced the possibility of customizing the page to be returned upon a "404 Not Found" response, through the <notfound_page> configuration element in <web_server>. Note that the 404 response is not used normally, but only when the Internal Web Server is enabled.

Fixed a bug introduced with version 5.0, by which the <delta_delivery> configuration setting was ignored and delta delivery was always applied. Note that applying delta delivery is the normal case.

Introduced the <use_enriched_content_type> configuration element; now it possible to choose between two options, text/plain and text/enriched, the content-type to be specified in the response headers when handling requests issued using the text output protocol.
By default, text/plain is still used, but the factory configuration supplied specifies the text/enriched content-type. This has some consequences on the Generic Client SDK; see the related changelog.

Fixed a bug on the internal statistics, which, under high load, might have caused spurious logs of the form "Current delay for tasks..." with very high delay.

Fixed a race condition that, in rare cases, could have caused a session not to be removed from the statistics when closed.

Fixed a bug that could have caused a startup error if the "max_free" setting of some thread pool had been configured as 0.

Improved the internal implementation of some thread pools.
Revised the internal timers to reduce thread contentions; this should reduce potential bottlenecks under very high load.

Tested the compatibility with the new Java 8 release.

5.1.1 build 1623.2
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 20 Dec 2013

Changed the factory and recommended settings for TLS/SSL sockets, to remove weak cipher suites. This may cause some clients to no longer be able to connect; in this case, the <remove_cipher_suites> configuration elements should be modified. COMPATIBILITY NOTE: The change only involves the configuration file; if an existing configuration is kept, the Server upgrade will have no effect, although we recommend checking if the restriction can be manually applied to these installations as well.

5.1.1 build 1623.2
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 5 Mar 2013

Fixed the restart.sh launch script, which could have failed to stop the running Server for particular choices of the custom JVM arguments. Also clarified the script use case.

Improved the launch scripts and the installation scripts for the unix/linux environments in order to support the use of unusual names for the installation directory, such as names including spaces.
Revised the installation scripts for the unix/linux environments to better handle the case in which the standard DESTDIR environment variable is not supplied (see the details in bin/unix-like/install/README.TXT). COMPATIBILITY NOTE: If using the supplied scripts in order to reinstall the Server, just make sure again that the scripts are compliant with your environment. Addressed a possible incompatibility issue on the installation script for MacOSX (now macOS).

Extended the "Clustering.pdf" document, to clarify the conditions for the availability of WebSocket connections when a Load Balancer is in place.

5.1.1 build 1623.2
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 31 Jan 2013

Fixed a bug affecting the configuration of the DEMO license. The <edition> element was ignored, so that the Server would always run in Vivace edition.

Fixed a bug on unfiltered subscriptions in COMMAND mode, whereby an ADD immediately following a DELETE on the same key could have been delayed until the next event on that key.

Fixed a bug which affected the log of "create_session" requests, by stripping the first and the last character; the bug was introduced in version 5.1.

5.1.1 build 1623
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 10 Jan 2013

Fixed a bug that could have caused data inconsistency or system vulnerability issues in particular client environments and under particular conditions.

5.1 build 1622
Compatible with the deployment structure of the previous version.
May not be compatible with configuration files for the previous version; see the compatibility notes below.
Released on 20 Dec 2012

Improved and optimized the allocation and parsing of client requests. Particularly improved the efficiency in the handling of SendMessage requests over WebSocket.

Extended the provided Monitoring Data Adapter with new statistics on the elaboration of Client Messages, sent through the SendMessage requests. Look for MESSAGE.* on the General Concepts document for details.
Extended the Internal Monitor log to include some of the aforementioned message-related statistics.
Extended the Monitor Console to display some of the aforementioned message-related statistics.

Introduced the automatic audit log upload service, to be leveraged based on the current license terms; for details, see also the newly added <automatic_audit_upload> configuration element in lightstreamer_version_conf.xml. To this purpose, the pubkey.cer file has been added to the "lib" directory.

Fixed a bug on the HTTP header parsing, that could have caused particular cases of headers lying on multiple lines to be parsed incorrectly.

Fixed a bug on the WebSocket handshake that could have caused the websocket establishment to be delayed on some browsers.
Fixed a bug on WebSocket closure that might have caused a closure handshake to fail.

Fixed the notification of trial license expiration, corrupted in build 1513.1.11.

Fixed the reporting of syntax errors in the configuration file, which caused further errors.

Fixed the installation script for Redhat, which caused the Server to always run as root, regardless of the user configured.
Fixed a typo in the console output of the launch script.

Improved the compatibility with the Android browser for Android version 4.x; this may also fix connection issues on some devices.

Deprecated the <base_url_path> configuration flag, which was only leveraged by the SDK for HTML Clients, but it is no longer leveraged by the new SDK for JavaScript Clients. COMPATIBILITY NOTE: If the existing configuration uses this flag, it can be left unchanged and the flag will be still obeyed. However, the support may be discontinued in future releases.

Finally removed the support for the old-style configuration of the listening ports, not based on the <http_server> and <https_server> blocks. Also removed the support for the obsolete configuration element <redundant_delivery>. COMPATIBILITY NOTE: Existing configurations still using the old elements have to be updated.

Made the <server_pool_max_free> configuration flag to be mandatory when <server_pool_max_size> is set to 0, since the previous default as also 0 was not suitable. COMPATIBILITY NOTE: Existing configurations leaning on the mentioned default have to be completed, otherwise the Server startup will fail.

Revised the format of the log messages. Revised the log messages upon syntax errors in client requests (only possible with clients based on the SDK for Generic Clients). Slightly revised the format of the lines produced by the Internal Monitor log, to improve readability.

Added in the Clustering.pdf document notes on how to enable cookie-based stickiness for non-browser clients.

Put minor changes to the sample StockListDemo Adapter.

5.0 build 1576
May not be compatible with the deployment structure of the previous version; see the compatibility notes below.
May not be compatible with configuration files for the previous version; see the compatibility notes below.
May not be compatible with clients written for very old versions; see the compatibility notes below.
Released on 3 Aug 2012

Introduced support for requests through the WebSocket protocol; the supported versions of the WebSocket specifications are 8 and 13. Client libraries can now open a single WebSocket to send all requests and messages and to receive all data pertaining to a session. At the moment, this feature has been exploited by the JavaScript Client Library.
The support is enabled by default; see the new <websocket> element in the configuration file.
A public specification of a network protocol based on WebSockets for custom clients is not available yet.

Introduced support to cross-origin requests. See the new mandatory <cross_domain_policy> element in the server configuration file for further details. COMPATIBILITY NOTE: Current configuration files must be extended with the <cross_domain_policy> element; as long as an old HTML Client SDK is used, the element can be left empty.
Note that the new JavaScript Client Library, on most browsers, uses cross-origin XHR or WebSocket requests to ask for streaming data; hence, the new <cross_domain_policy> element should be set properly and allow your site origin, in order to ensure that web pages supplied from your site can access the Server. COMPATIBILITY NOTE: The above also holds for the Internal Monitor Console, though the page origin, in that case, is the Server itself, so that a same-origin access is performed; though most browsers don't need that, the Server origin should be explicitly allowed in <cross_domain_policy> in order to ensure that the Monitor Console keeps working on all browsers; see the Client Guide in the JavaScript SDK for details. The factory setting of <cross_domain_policy> allows any kind of cross-origin access to the Server; note that this kind of access was not even possible with the previous HTML Client Library.

Disabled the forwarding of request cookies to some Metadata Adapter methods. As a consequence, the new factory setting of <use_protected_js> is now N, which is recommended in order to enable cross-origin access for some browsers which don't support cross-origin XHR (see the Client Guide in the JavaScript SDK for details).
Introduced the <forward_cookies> configuration element (which defaults as N) to reenable forwarding when needed. COMPATIBILITY NOTE: Only if cookie information is used by Metadata Adapter methods, <forward_cookies> should be set as Y. However, if cookie information were used for authentication purpose (which is to be avoided, though), <use_protected_js> should be left as Y and <cross_domain_policy> should be set carefully.

Revised the licensing configuration, with the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. The <trial> and <production> blocks in the main configuration file have been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, it must be ported; for the <production> block, refer to the "LICENSE_FILE" license type; for the <trial> block, refer to the "LICENSE_SERVER" license type and to the <http_proxy> block (note that the other parts of the <proxy> block are not available for trial license configuration).

Introduced the "DEMO" license type, which is not based on a license key or trial account. See <type> in the new "lightstreamer_version_conf.xml" configuration file for details.

Introduced the generation of audit log files when trial accounts are in use.
Discontinued the generation of audit logs for any other non-production licenses.

Provided an automatic update check service. See <automatic_update_check> in the new "lightstreamer_version_conf.xml" configuration file for details. Note that a proper proxy configuration, through the <proxy> block, may be needed.
New libraries have been added to the "lib" directory for this extension. COMPATIBILITY NOTE: If any existing Adapter were based on a different version of one of the libraries in "lib", conflicts may arise.

Revised the licensing configuration, with the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. The <production> block in the main configuration file has been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, it must be ported to the new conventions.

Revised the licensing policy. The Server can now be run with full features with no need for a free license; as a consequence, the feature-limited "unregistered mode" has been dismissed. The <production> configuration block has then been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, the <production> block must be removed.

Provided an automatic update check service, through the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. COMPATIBILITY NOTE: In order to keep using an existing configuration file, the configuration of the new file must be added. New libraries have been added to the "lib" directory for this extension.

Changed the names returned by the "MONITOR" Data Adapter for the "LICENSE_TYPE" field, according to the new licensing policy.

Discontinued the support for java 5 SDK and runtime environment. Java 6 or later is now required. COMPATIBILITY NOTE: installations of the Server still based on a java 5 JVM have to be upgraded. Existing Adapters compiled with a java 5 SDK don't need to be upgraded. Revised the suggested JVM configuration in the launch scripts.

Improved the launch scripts for Windows and major Linux and Unix-like Operating Systems, supplied under the "bin" folder. As a consequence, manually setting the LS_HOME variable is no longer requested.
Provided suitable scripts to install the Server for automatic execution in many Unix and Linux environments, including MAC OS X (now macOS); see "install" under "bin/unix-like".

Updated the included version of the third-party slf4j and logback libraries. COMPATIBILITY NOTE: As the new libraries have different names, ensure that the previous version of the libraries is removed. Moreover, if using a custom launch script, ensure that the new libraries are now referred. COMPATIBILITY NOTE: Existing java Adapter binaries leaning on the included support for slf4j/logback should not be affected (but see the slf4j/logback release notes). COMPATIBILITY NOTE: In case further slf4j/logback libraries are needed by the adapters, ensure that their versions are consistent with the new libraries included.

Removed the third-party JUG libraries. Removed the "lib/native" directory and any reference to it in the launch script. COMPATIBILITY NOTE: Existing launch scripts will still work; any included reference to the "lib/native" directory will be useless. Added more third-party libraries to support the new update check service. COMPATIBILITY NOTE: Existing launch scripts should be extended to include the new libraries in the "lib" directory in the classpath. Simplified the factory launch script in order to do a bulk add of the third-party libraries to the classpath.

Revised the implementation of the scripts that stop a running Server. They are now based on the RMI connector to the JMX service. As a consequence, the requirement for the script to work is that the <rmi_connector> block is properly configured, no longer the <jmxmp_connector> block. If the JMXMP connector is not used directly, it can be disabled. COMPATIBILITY NOTE: If an existing configuration disables the RMI connector, it should enable it, possibly exposing the port to local connections only, in order to restore the "stop" script functionality. The change is reflected by the new factory configuration. COMPATIBILITY NOTE: Any existing configuration should be changed, in order to restore the "stop" script functionality, by replacing the preconfigured <jmx> block with the new version included in the factory configuration file (the currently configured port number can be kept).

Removed the third-party Oracle's jmxtools.jar and jmxremote_optional.jar libraries, previously redistributed. This drops the support for the HTML Adaptor and JMXMP Connector to the JMX service. The support can be restored by manually downloading and reinstalling the libraries. See README.TXT in the SDK for JMX Extensions for details. COMPATIBILITY NOTE: If just upgrading an existing deployment, the aforementioned libraries should be manually removed. On the other hand, if the current deployment leans on the HTML Adaptor or the JMXMP Connector, the needed libraries must be obtained from Oracle as shown. Removed the factory preconfiguration of the HTML Adaptor and JMXMP Connector. COMPATIBILITY NOTE: If just upgrading an existing deployment, the aforementioned libraries should be manually removed. The Server no longer leans on these libraries, hence no impact is expected.

Introduced a distinction between "prestarted" and started sessions; see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts document for details. Prestarted sessions are not included in the session count as far as Server activity metrics are concerned.
Starting a prestarted session may fail if it would cause any existing limit on the number of sessions to be exceeded.

Introduced the optional <client_identification> configuration block, in order to help to better identify the remote address of the connected clients. The block is related to each single <http_server> or <https_server> block. See the configuration file for details.

Changed the factory setting of <max_delay_millis> from 200 to 30 ms (setting <max_delay_millis> may improve performances at the expense of a less smooth data delivery). The new, less restrictive, value is suitable for applications in which push data is used to map moving positions, provided that no edition-related frequency limits apply.

Improved the support for TLS/SSL renegotiation requests by the clients.
Introduced dedicated thread pools to handle the load related with TLS/SSL handshakes; see <handshake_pool_size> and <https_auth_pool_max_*> in the configuration file.

Introduced configuration settings to suspend acceptance of new connection requests when the thread pools devoted to request handling are busy; see <*_pool_max_queue>.

Improved the implementation of the temporary refusal of new client connections that can be requested through JMX (see the Server MBean). In case of an HTTPS connection, the refusal now occurs before the initial handshake takes place.

Fixed a compatibility issue with Html Client Library version 5, which could have caused error messages related to session creation refusal to be ignored by the library.

Fixed a bug, introduced in build 1513, which prevented the clean closure of TLS/SSL connections. This shouldn't have had any impact on normal operation.

Fixed a bug which could have caused some connections in long polling to return unnecessarily early, with no data.

Fixed a bug which would have provoked an error in the internal Web Server when sending an empty file, if the compression_threshold had been set to 0.

Fixed a bug which could have caused the processing of "remote logs" sent by the HTML Client Library to fail for unusual user-agents.

Fixed a bug in the management of logback's own log, whereby the log related to logback initialization issues were not dumped. Now, it is available on the error console; the log is shown only in case of errors and in that case it is in verbose form.
Introduced a custom Logback StatusListener implementation (OnConsoleErrorWarningStatusListener). Such StatusListener is now configured by default and will show on the standard error any internal ERROR or WARN event from Logback internal status.

Discontinued the support for the old syntax of the JMX configuration. COMPATIBILITY NOTE: if any of the <html_adaptor_port>, <html_adaptor_public>, <html_adaptor_user>, <rmi_connector_port>, <jmxmp_connector_port> is still used in the configuration file, it should be rewritten with the current syntax.

Reduced the response overhead on polling requests issued by the Javascript Client Library.

Extended the format of the audit logs with a random identifier of the Server run. COMPATIBILITY NOTE: existing and new audit log lines can coexist with no problems.

Ensured that, for each type of monitor statistics, the same value is collected by the various consumers for each time period; consumers include the monitor log, Monitor Console and any "MONITOR" Data Adapters.

Extended the logging of client activities, by adding information on the server socket (i.e. <http_server> or <https_server> block) related to the connection.

Revised various error log messages.
Moved some harmless "Sync error" log messages from INFO to DEBUG level.
Expanded and clarified info log messages about session closing.

Discontinued support for the LS_top_max_frequency and LS_slowing_factor request parameters. Such parameters had already been dismissed in the client protocol and all client libraries. COMPATIBILITY NOTE: only clients based on a very old version of the client protocol or a client library might make use of these features. For them, the settings will no longer have any effect.

Slightly changed the response content-types for requests by the HTML/JavaScript Client Library; this may give rise to compatibility issues only for Opera browsers earlier than version 10.

Improved the performances under heavy load and under spikes of external requests, by reducing internal thread contention.

Changed the Connection counts returned by the Internal monitoring Data Adapter and the related log, to include sockets currently involved in the initial TLS/SSL handshake.
Similarly, moved the log of accepted connections in https, to be issued immediately, before the initial TLS/SSL handshake, rather than after.

Improved the parsing of incoming HTTP requests, to make syntax checks more strict.

Denied support for specifying a network interface for the JMX RMI connector when the <data_port> setting is omitted, as this configuration is in fact not working properly. COMPATIBILITY NOTE: we assume that no existing installation could be configured in this way, as it wouldn't have worked correctly; anyway, in such a case, only a warning message will be issued. Fixed a bug which, with the above configuration, would have caused a port conflict error message to be issued.

Introduced the stdout/stderr redirection when launching the Server as a service under Windows. The LS.out file in the predefined logs directory is now generated.

Revised the layout of the Internal Monitor Console and fixed a formatting issue.

Updated the Clustering.pdf document, according with the new features added in the JavaScript SDK.

Fixed the jars of the included StockList demo: LS_StockListDemo_DataAdapter.jar also included the classes already in LS_quote_feed_simulator.jar.

Revised the documentation, in regard to the names of the main concepts.

4.1 build 1513.1.14
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 9 Aug 2012

Fixed the handling of uncommon pathnames in the utility scripts for using the Server as a service under Windows.

Fixed the documentation of the <license_path> configuration element with the extensions introduced in build 1513.1.4

Enlarged the "SNAPSHOT" thread pool (devoted to dispatching of snapshot contents) so as to match the number of available processors, if greater than 10.

Fixed a bug, introduced in version 3.6, which affected subscriptions by the HTML Client Library to items in MERGE mode in case their snapshots was also requested; the update representing the snapshot could have been notified as not being a snapshot by the library.

Fixed a bug in the RelativeFileAppenders$RollingFileAppender implementation: the <FileNamePattern> specified in the <rollingPolicy> was interpreted relative to the launch directory instead of being interpreted relative to the log configuration file location, as it should have been. Now the paths specified in the <FileNamePattern> elements are correctly interpreted. On the other hand note that the <File> element was already correctly interpreted and thus its handling has not changed.

4.1 build 1513.1.12
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.

Introduced the support for dinamically reconfiguring the maximum frequency of currently subscribed items, that can be leveraged by client libraries.

Introduced the optional "randomize" attribute for both the <default_keepalive_millis> and <max_idle_millis> configuration elements, that can be used in particular scenarios; see the descriptions in the configuration file.

Fixed a bug in the handling of the <allowed_domain> setting, by which the check could have been avoided by purposedly altering the Html Client Library.

Clarified how resampling works for the LightstreamerMonitorText and LightstreamerMonitorTAB loggers configuration.

4.0.3 build 1513.1.11
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 6 Apr 2012

Adopted java 7 as the recommended SDK runtime environment and as the factory setting in the launch scripts.

Added the <max_streaming_millis> configuration flag; see the configuration file for details.

Fixed a bug, introduced in version 4.0, affecting polling sessions; under particular conditions of slowness, poll requests could have returned immediately even with no data available, thus causing an unneeded increase of the overall frequency of requests.

Fixed a bug affecting polling sessions; under particular conditions of fastness, poll requests could have returned with no data even if data were available, thus causing data delivery to be delayed.

Fixed the supplied scripts for running the Server as a Windows service, which, under some conditions, could have failed to correctly install the service.

4.0.2 build 1513.1.9
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.

Fixed an issue with potential conflicts regarding proxy settings when a trial license is used; if proxy settings are supplied in order to access the LS trial license validation server, they could also affect connections performed by the Adapters.

4.0.2 build 1513.1.8
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 6 Dec 2011

Fixed a bug introduced in version 4.0 which could have caused an html client to receive wrong data in case of issues with the use of XHR during a polling session. The error was serious, but the triggering environmental conditions were very rare.

Fixed a potential race condition which could have led to an internal thread deadlock. A high rate of socket disconnections (about 100 per second) was the only triggering scenario observed.

Changed, from 6666 to 6600, the factory setting for the port to be used for accessing the HTML-based JMX interface; in fact, access to port 6666 could be restricted by some browsers because of conflicts with known protocols.

4.0.1 build 1513.1.4
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.

Extended license configuration support by allowing to specify multiple <license_path> elements, so that, at any moment in the Server life, at least one should refer to a valid license.
Slightly changed the log upon license refusal.

4.0.1 build 1513.1.3
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 20 Jul 2011

Fixed a bug that could have caused read failures on TLS/SSL connections upon long requests.

4.0 build 1513.1.1
Compatible with the deployment structure of the previous version.
Compatible with configuration files for the previous version.
Released on 8 Jul 2011

Fixed and changed the timestamp format on the audit logs. COMPATIBILITY NOTE: existing and new audit log lines can coexist with no problems.

Introduced the execute permission flags for launch scripts also in the zip version of the package.

4.0 build 1513
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for JMX Extensions
5.3.2 build 1814
Compatible with Lightstreamer Server since 6.1.
Compatible with custom managers for the previous version.
Released on 23 Jan 2017

Fixed a bug which caused the extension on the Resource MBean introduced in build 1803 (that is, the handling of multiple subrequests) to become ineffective.
Clarified the documentation of the Resource MBean with respect to the abovementioned extension.

5.3.1 build 1803
Compatible with Lightstreamer Server since 6.0.3.
Compatible with custom managers for the previous version.
Released on 5 Sep 2016

Introduced the computation of the ThreadPool MBean's AvgExecTimeMillis property also for the TLS-SSL HANDSHAKE pool. Previously, the property was not computed (as for all cpu-bound pool) and its value was always null.

Modified the statistics on Control Requests (hence, on all Requests as well) in the Resource MBean, so that, when a single Request from the client comprises multiple subrequests, the count will report all subrequests rather that the aggregated one.

5.3 build 1794
Compatible with Lightstreamer Server since 6.0.1.
Compatible with custom managers for the previous version.
Released on 10 May 2016

Revised the javadocs overview.
Revised javadoc formatting style.

5.3 build 1775
Compatible with Lightstreamer Server since 6.0.1.
May not be compatible with custom managers for the previous version; see compatibility notes below.
Released on 16 Jul 2015

Modified the Session MBean, by removing the recently added ClientBuild property and extending the ClientVersion property to report the full version signature. COMPATIBILITY NOTE: Custom managers relying on the ClientBuild attribute, or on ClientVersion to report only a version number, should be revised.

5.2.1 build 1741
Compatible with Lightstreamer Server since 6.0.
Compatible with custom managers for the previous version.
Released on 13 Feb 2015

Extended the Session MBean with more information on the Client SDK type, if available (see getClientBuild).

5.2 build 1735
Compatible with Lightstreamer Server since 6.0.
May not be compatible with custom managers for the previous version; see compatibility notes below.
Released on 21 Jan 2015

Introduced the support for the new Push Notification Service. This includes the new PushNotifications MBean and extensions in the DataAdapter, AdapterSet, Server, and Load MBeans, to report the served devices and the new thread pools.

Introduced the ThreadPool MBeans, one for each of the thread pools used internally by Lightstreamer Server. See the ThreadPoolMBean class documentation for details.
Extended the Load MBean to provide a list of the names of all active thread pools (see getThreadPools). Note that the pool naming has changed in Server version 6.0.

Introduced a fake MBean of type "Session" and no SessionId associated, which is added when the creation of the Session MBeans is disabled; it acts as a reminder that the feature can be enabled. COMPATIBILITY NOTE: Custom managers should recognize and ignore the new MBean; it does not expose the properties of a normal Session MBean. Added a "destroySession" operation in the Resource MBean; this overcomes the unavailability of this functionality when Session MBeans are disabled.

Introduced the "clearSnapshot" operations on the DataAdapter MBeans, for clearing the state of an item bypassing the Data Adapter (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the documentation for details and usage clarifications.

Extended the Resource MBean and the DataAdapter MBeans with new statistics on the overall number of item subscriptions performed by the clients (see get*ItemSubscriptions).

Extended the Session MBean with information on the Client SDK type, if available (see getClientType and getClientVersion).

Extended the life of the Session MBean until the termination of the notifySessionClose invocation; hence, from within this callback, the Metadata Adapter can access the MBean and get the final value of cumulative statistics.
Added, for completeness, the IsClosed property (which is true in that case).

Fixed the getSessionListForItem method in the DataAdapter MBeans to return an empty list instead of null upon items not subscribed to.

Clarified the docs about the inclusion of "prestarted" sessions.

Fixed wrong links in the docs.

4.4 build 1622
Compatible with Lightstreamer Server since 5.1.
Compatible with custom managers for the previous version.
Released on 20 Dec 2012

Extended the Stream MBean and the Session MBean, with new properties carrying statistics on the elaboration of Client Messages, sent through the SendMessage requests. See the documentation for details.

4.3 build 1576
Compatible with Lightstreamer Server since 5.0.
May not be compatible with custom managers for the previous version; see compatibility notes below.
Released on 3 Aug 2012

Revised the reporting of bandwidth limits in the Session and Stream MBeans.
Fixed an inconsistency in the Session MBean; the AllocatedMaxBandwidthKbps property getter now returns the server-side bandwidth limit for the Session, according with the setter behavior; before, it used to return the limit currently enforced on the session, which is now returned by the new read-only property AllocatedBandwidthKbps. COMPATIBILITY NOTE: Custom managers that use the AllocatedMaxBandwidthKbps getter may need to be changed. Clarified when the special 0 value is possible in bandwidth limit values.
Introduced a 3-decimal approximation for the reported bandwidth limit values. COMPATIBILITY NOTE: Custom managers that rely on the reported bandwidth limits for internal computations may need to be revised.

Changed the count of the overall number of connected sockets in the Resource MBean to include sockets currently involved in the initial TLS/SSL handshake.
Extended the Resource MBean by introducing the count of sockets currently performing a TLS/SSL initial handshake and the count of failed handshakes.

Extended the Resource MBean with new properties to report the connections used for WebSocket interaction. The current and maximum number of such connections and the cumulative number of upgrades from HTTP/HTTPS are reported. See the documentation for details.

Extended the Load MBean to report the current queue on the newly introduced thread pools; see "getQueueStageHandshake".
Removed from the Load MBean the previously deprecated "getQueueStageIOPush" and "getQueueStageHTTPSAccept" methods. COMPATIBILITY NOTE: Custom managers that still request these properties may may need to be revised.

Revised the various session count statistics in the Resource MBean: prestarted sessions are no longer included; see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts document for details.
Extended the Resource MBean to provide the count of current prestarted sessions.
Extended the Session MBean to indicate when a session is in prestarted state.

Removed the deprecated getSubscribedItemList and getSubscribedItems methods from the Session MBean. COMPATIBILITY NOTE: Any custom managers still using those methods may have to be changed.

Added the getVersionConfigFile and getVersionConfigAsProperties methods in the Server MBean to make it available the contents of the newly introduced version configuration file.

Changed the names returned by getLSLicenseType in the Server MBean, according to the new licensing policy.

Fixed the comment on the "CumulControlRequest" property of the Session MBean on the html adaptor.

Refined the periodic statistics carried by the getAveragePoolQueueWait property of the Load MBean.

Fixed the included Version.txt file, which was not reporting the latest build number.

Regenerated the API documentation with the newest JDK default template.
Specified the version number in the javadocs.

4.0 build 1513.1.3
Compatible with Lightstreamer Server since 4.0.
Compatible with custom managers for the previous version.
Released on 20 Jul 2011
4.0 build 1513.1.1
Compatible with Lightstreamer Server since 4.0.
Compatible with custom managers for the previous version.
Released on 8 Jul 2011
4.0 build 1513
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

Adapter Remoting Infrastructure
1.7.2 build 73
Compatible with Server since 6.0.
Compatible with configuration files for the previous version.
Compatible with Remoting SDKs based on the previous version.
Released on 23 Jan 2017

Introduced a "first_connection_timeout_millis" configuration parameter for the Robust Proxy Data Adapter, similarly to what is available for the Robust Metadata case (but with a 0 default, which is consistent with the previous behavior).

Introduced a new strategy for the "events_recovery" configuration parameter of the Robust Proxy Data Adapter. See "enforce_snapshot" in the sample configuration file under "adapter_robust_conf_template".

Extended the configuration templates to advertise the variable-expansion feature introduced in Server version 6.1.

1.7 build 70
Compatible with Server since 6.0.
Compatible with configuration files for the previous version.
Compatible with Remoting SDKs based on the previous version.
Released on 10 May 2016

Improved a log message, which was unclear, related with Remote Adapter unavailability.

1.7 build 67
Compatible with Server since 6.0.
Not compatible with configuration files for the previous version; see the compatibility notes below.
May not be compatible with Remoting SDKs based on the previous version; see the compatibility notes below.
Released on 21 Jan 2015

Embedded the Proxy Adapter binaries related with the current version of the Adapter Remoting Infrastructure. Previously, the ls-proxy-adapters.jar file supplied by the ARI SDK had to be added to the Adapter Set libraries. As a consequence, the ls-proxy-adapters.jar binaries are no longer provided directly. As a further consequence, the compatibility constraint of the Adapter Remoting Infrastructure is now stated directly with respect to the Server. COMPATIBILITY NOTE: Existing Adapter Set deployments based on the old Proxy Adapters supplied in ls-proxy-adapters.jar are supported seamlessly.

Introduced the "PROXY_FOR_REMOTE_ADAPTER" and "ROBUST_PROXY_FOR_REMOTE_ADAPTER" reserved names to be used in place of the class names for the inclusion of the new embededd Proxy Adapters in adapters.xml. COMPATIBILITY NOTE: The new reserved names are not expected to conflict with custom class names in an existing adapters.xml. COMPATIBILITY NOTE: In order to port an existing Adapter Set configured for Remote Adapters to the new Proxy Adapters, the adapters.xml configuration file has to be changed to comply with the new naming (and ls-proxy-adapters.jar can be discarded).

Introduced an explicit initialization request sent by the Proxy Adapters to the Remote Adapters upon connection. This now allows for:

See "remote_params_prefix" in the sample "adapters.xml" files for details on how the initialization parameters can be specified. COMPATIBILITY NOTE: Existing Remote Servers based on the .NET and Generic Adapter SDKs have to be upgraded to the new SDK version. However, backward compatibility can be restored by disabling the new request through the new "init_remote" configuration parameter.

Discontinued the support for the "Piped" versions of the Proxy Adapters. Only the "Networked" versions and their "Robust" extensions are now available. COMPATIBILITY NOTE: Existing installations based on the "Piped" versions should be ported to the "Networked" versions. But we don't expect this case to occur for production deployments, as the use of the "Piped" versions was not recommended for production. Removed the "eos_count_limit" and "eos_sleep_time" configuration parameters, which were only used by the "Piped" versions of the Proxy Adapters.

Introduced the "remote_address_whitelist" parameter, to be used to specify a list of IP addresses, from where Remote Adapter connections are accepted by a Proxy Adapter. If missing, connections are still accepted from any host.

Changed the logger names used by the Proxy Adapters for their own logging and replaced the old logger configuration with the new one in the Server's factory log configuration file (see the supplied file for details). COMPATIBILITY NOTE: To keep using an existing log configuration file, the logger should be manually replaced too. Obviously, as long as existing Adapter Set deployments based on the old Proxy Adapters are in use, the old logger should also be kept.

Removed the description of the ARI protocol (made available to custom Remote Servers for implementing the Adapter interface via TCP) from the scope of this component. Now, the "Adapter Remoting Infrastructure" component (no longer an SDK) only covers Lightstreamer-Server-side support (based on the Proxy Adapters) for all remoting SDKs. See the new "SDK for Generic Adapters" for the ARI protocol topic.

As a consequence of the introduction, in Server version 6.0, of separate ClassLoaders for the loading of the external libraries used by the Server internally, specifed the suggested settings in the factory Proxy Adapter configuration (through the new <classloader> setting), to enforce sharing of the slf4j/logback logging libraries with the Server. This confirms the previous behavior, hence the log configuration of the Proxy Adapters is still included in the Server log configuration file.

Revised the factory configuration of the optional thread pools in adapters.xml; with the new suggested configuration, some adapter-related pools are enabled and will take on some tasks previously falling in the "SERVER" pool.

Revised the default naming of connections (for logging purposes) and related threads, by leaning on the configured proxy names instead of progressive numbers.
Introduced name suffixes to distinguish subsequent streams that may be created by the Robust Proxy Metadata Adapter.

Moved the configuration examples (which include parameter descriptions) under "doc".
Provided a new introductory document.

1.4.3 build 58
Compatible with Server Adapter Interface since 5.1.
Compatible with Remote Servers for the previous version.
Released on 20 Dec 2012

Revised and relieved the Notes on Method Sequence for the Notify New Tables and Notify Tables Close methods, according with the locking policy change and the new <sequentialize_table_notifications> parameter introduced in SDK for Java Adapters version 5.1.

1.4.2 build 57
Compatible with Server Adapter Interface since 5.0.
Compatible with Remote Servers for the previous version.
Released on 3 Aug 2012

Discontinued the compatibility with the previous version of the Server.

1.4.2 build 52
Compatible with Server Adapter Interface since 4.0.
Compatible with Remote Servers for the previous version.
Released on 9 Aug 2012

Revised the low level log of the Proxy Adapters, to allow for suppressing the log of real-time messages while logging the requests and replies from the Remote Server; see com.lightstreamer.adapters.remote in the Server log configuration file.
Fixed a typo in the com.lightstreamer.adapters.remote logger description.

1.4.2 build 51
Compatible with Server Adapter Interface since 4.0.
Compatible with Remote Servers for the previous version.
Released on 6 Apr 2012

Introduced new configuration properties to let the RobustNetworkedMetadataProvider return a custom error notification to the client upon a request for a new session when the Remote Server is currently unavailable; see "notify_user_disconnection_code" and "notify_user_disconnection_msg" in "conf\sockets(robust)\adapters.xml".

Introduced new configuration properties to let the RobustNetworkedDataProvider manage a custom item which carries notifications about the availability of the Remote Server; see "remote_adapter_status" in "conf\sockets(robust)\adapters.xml".

Added checks on the correct configuration of the Proxy Adapters; in fact, wrongly setting a notify port on a Proxy Metadata Adapter could lead to wrong behavior.

Improved the extraction of HTTP headers supplied by the "NUS"/"NUA" request.

Added log to detect issues caused by obsolete Remote Servers

1.4.1 build 48
Compatible with Server Adapter Interface since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Java In-Process Adapters
6.0.1 build 1803
Compatible with Lightstreamer Server since 6.0.3.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 23 Jan 2017

Extended the configuration template to advertise the variable-expansion feature introduced in Server version 6.1.

6.0.1 build 1803
Compatible with Lightstreamer Server since 6.0.3.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 5 Sep 2016

Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.

6.0 build 1794
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 10 May 2016

Revised the javadocs overview.
Revised javadoc formatting style.

6.0 build 1775
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 16 Jul 2015

Clarified in the Javadocs under which conditions field values supplied to the ItemEventListener can be reused.

6.0 build 1738
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 13 Feb 2015

Revised the title of the provided JavaDocs.

Added identification tags at the beginning of the various sample adapters.xml files provided. By keeping them in your own adapter configuration files, future upgrades of these files may be automated.

6.0 build 1735
Compatible with Lightstreamer Server since 6.0.
May not be compatible with code developed with the previous version; see the compatibility notes below.
May not be compatible with the deployment structure of the previous version; see the compatibility notes below.
Released on 21 Jan 2015

Extended the MetadataProvider interface to support the new Push Notification Service (aka MPN Module). When enabled, the new methods will be invoked in order to validate client requests related with the service. See the Javadocs for details (see also the <mpn_pool> element in the sample adapters.xml for Adapter related thread pool configuration). COMPATIBILITY NOTE: Existing Metadata Adapter source code has to be extended in order to be compiled with the new jar (the new methods could just throw a NotificationException), unless the Adapter class inherits from one of the supplied FileBasedProvider, LiteralBasedProvider or MetadataProviderAdapter. In the latter case, the Adapter will accept any MPN-related request; however, MPN-related client requests can be satisfied only if the involved "app" has been properly configured.
On the other hand, existing Metadata Adapter binaries are still supported (but for the unlikely case of a name conflict with the new methods) and will refuse any MPN-related request (unless the Adapter class inherits from one of the supplied FileBasedProvider, LiteralBasedProvider or MetadataProviderAdapter, where the above considerations hold).
However, the MPN Module is not available with this edition.

Extended the MetadataProvider interface to support the new Push Notification Service (aka MPN Module). However, the MPN Module cannot be enabled in Moderato edition. COMPATIBILITY NOTE: Existing Metadata Adapter source code has to be extended in order to be compiled with the new jar (the new methods could just throw a NotificationException), unless the Adapter class inherits from one of the supplied FileBasedProvider, LiteralBasedProvider or MetadataProviderAdapter.
On the other hand, existing Metadata Adapter binaries are still supported.

Changed the initialization order for Metadata Adapters and Data Adapters. By default the Metadata Adapter is initialised before any Data Adapter of the same Adapter Set. The optional configuration parameter "metadata_adapter_initialised_first" has been added to the adapters.xml configuration file to initialise the Metadata Adapter in parallel with the Data Adapters. COMPATIBILITY NOTE: Existing Adapter Sets relying on a concurrent initialization of Data and Metadata Adapters (may be the case for Remote Adapters) should use the "metadata_adapter_initialised_first" configuration parameter to restore the parallel initialization. Distinct Adapter Sets are initialised in parallel as before.

Introduced the "clearSnapshot"/"smartClearSnapshot" operations on the ItemEventListener, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the javadocs for details. COMPATIBILITY NOTE: Existing Data Adapters don't need to be recompiled. Extended some demo source code to show how the new methods can be invoked.

As a consequence of the introduction of separate ClassLoaders for the loading of the external libraries used by Lightstreamer Server internally, all these libraries are no longer visible from Adapter code. COMPATIBILITY NOTE: Existing Adapters that lean on libraries included by Lightstreamer Server should now include these libraries explicitly. Sharing of library state is no longer possible, but it was not supposed to be leveraged anyway.
The only exception is for logging. If any Adapter leans on the instance of slf4j/logback included by the Server (perhaps in order to share the log configuration), it can be configured to share these libraries through the new <classloader> setting in adapters.xml (see the sample adapters.xml for details). In particular, this is the case for Proxy Adapters.
However, note that the slf4j and logback libraries have been updated; hence, if any custom Adapter has to keep sharing these libraries, check out the slf4j and logback changelogs for any compatibility issues.

Introduced separate ClassLoaders for loading the resources related with the various Adapter Sets. As a consequence, classes pertaining to different Adapter Sets can no longer see each other, though they can still share any classes defined in the "shared" folder. By the way, note that any classes found in "lib" and "classes" under the Adapter Set folder are now added to the Adapter Set ClassLoader, even if all the Adapters declare a different dedicated <install_dir>. COMPATIBILITY NOTE: Existing Adapter code that leans on class sharing between the Adapter Sets may fail; however, the old behavior can be restored by simply placing all jars and classes in the "shared" folder. Moreover, introduced the possibility of loading the classes of single Metadata or Data Adapters in dedicated ClassLoaders (still inheriting from the ClassLoader of the Adapter Set); see the new <classloader> configuration element in the sample adapters.xml for details.

Fixed a race condition that, in principle, could have caused notifySessionClose to be invoked twice on the same session.

Embedded the binaries of the basic LiteralBasedProvider in ls-adapter-interface.jar. As a consequence, the ls-generic-adapters.jar file is no longer provided. Note that this library was also predeployed in the "shared" folder. COMPATIBILITY NOTE: If an existing Adapter installation is based on the LiteralBasedProvider and includes the ls-generic-adapters.jar file within its own folder, the jar should be removed to avoid confusion. Also note that the removed library also included the sample FileBasedProvider, which is no longer provided. COMPATIBILITY NOTE: in the unlikely case of an existing Adapter installation based on the FileBasedProvider, the old ls-generic-adapters.jar should be left; if it had been left in the "shared" folder, it is recommended to place it within the Adapter's own folder. Extended the interface Javadocs to include the LiteralBasedProvider, previously documented under the "examples" folder.

Introduced a sample adapters.xml configuration file, which includes the description of all parameters, in the new "adapter_conf_template" folder under "docs". It should be used as the reference for adapters.xml writing. On the other hand, the adapter configuration file of the preinstalled welcome page is no longer meant as a reference.

Revised the factory configuration of the optional thread pools in adapters.xml; with the new suggested configuration, some adapter-related pools are enabled and will take on some tasks previously falling in the "SERVER" pool.
Clarified the docs with regard to the thread pools involved in the various adapter invocations.

Added details in the debug log of events received from the Data Adapters.

Fixed an error in the documentation of getWinIndex in the TableInfo class; clarified how the field can be used to match subscription and unsubscription requests.

Fixed some truncated short descriptions in the javadocs.

Improved the Javadoc, with introductory notes and instructions on the use of the sample LiteralBasedProvider.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

Changed the SDK name, which was "SDK for Java Adapters", to avoid confusion with the new SDK for Java Remote Adapters.

5.1.2 build 1623.14
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 22 Jul 2014

Clarified the license terms for the included example source code.

5.1.1 build 1623.2
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 31 Jan 2013

Fixed an incorrect usage of SimpleDateFormat in some of the provided demo source files.

5.1.1 build 1623
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 10 Jan 2013
5.1 build 1622
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 20 Dec 2012

Relieved the locking policy on the invocation of the "notifyNewTables" and "notifyTablesClose" callbacks, so that delays on the callback execution no longer propagate to the update flow for the session. As a consequence, blocking implementations of "notifyNewTables" are now allowed. See the javadocs for details.
COMPATIBILITY NOTE: In some cases, the relative order of data and notification events may change, but only when different tables are involved, in which case no order specification has never been claimed. This also fixes an issue in the support of the Adapter Remoting Infrastructure, in which the implementation of "notifyNewTables" can't but be potentially blocking.

Introduced the <sequentialize_table_notifications> tag in the Metadata Adapter configuration, to allow for also relieving the sequentialization constraint on the "notifyNewTables" and "notifyTablesClose" callbacks, so that delays on the callback execution would not even propagate to other subscription requests for the session. See the inline comment in the demos "adapters.xml" for details.

Fixed a typo in the documentation of the init method of both adapters, where "adapter_conf.id" was reported instead of "adapters_conf.id".

5.0 build 1576
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 3 Aug 2012

Improved the extraction of HTTP headers supplied to notifyUser.

Clarified the API documentation in several points.

Regenerated the API documentation with the newest JDK default template.

4.1 build 1513.1.14
Compatible with Lightstreamer Server since 4.1.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 9 Aug 2012
4.1 build 1513.1.12
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
4.0.3 build 1513.1.11
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 6 Apr 2012
4.0.2 build 1513.1.8
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 6 Dec 2011
4.0.1 build 1513.1.3
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 20 Jul 2011
4.0 build 1513.1.1
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Compatible with the deployment structure of the previous version.
Released on 8 Jul 2011
4.0 build 1513
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Java Remote Adapters
1.1.2 build 30
Compatible with Adapter Remoting Infrastructore since 1.7.
Compatible with code developed with the previous version.
Released on 23 Jan 2017

Fixed a problem introduced by a known Java compiler bug, which caused a "verify error" to be reported at runtime. The problem only affected the previous build 24.

Improved the Javadocs, by shortening the concise descriptions of some classes and methods.

1.1.1 build 24
Compatible with Adapter Remoting Infrastructore since 1.7.
Compatible with code developed with the previous version.
Released on 5 Sep 2016

Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.

1.1.0 build 23
Compatible with Adapter Remoting Infrastructore since 1.7.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 May 2016

Introduced parallelization of the invocations of methods on the Remote Metadata Adapter; in fact, previously, the invocations were always done sequentially, with possible inefficient use of the available resources (invocations for the Data Adapter were already done in parallel). Also introduced suitable configuration; see the docs for MetadataProviderServer and DataProviderServer for details. COMPATIBILITY NOTE: If existing Remote Metadata Adapters don't support concurrent invocations, sequential invocations should be restored by configuration.

Introduced the possibility to configure the keepalive time (which was fixed to one second) through the custom "lightstreamer.keepalive.millis" system property.

Fixed the API documentation of class Server, by removing the method "init". In fact, the method was not meant to be public.

Improved logging; now the detailed log of request-reply messages not including notification messages (i.e. data updates) is possible. Moreover, the keepalives can now be excluded from the the detailed log of request, reply and notification messages.

Added missing javadocs for the RemotingException class and a few other fields.
Fixed some mistaken class names and other typos in the javadocs comments. Also removed the spurious DataProviderProtocol docs.
Revised javadoc formatting style and fixed a formatting error in DataProvider class.
Fixed the Javadocs for DataProvider and MetadataProvider interfaces on the way implementations are supplied.

1.0.2 build 18
Compatible with Adapter Remoting Infrastructore since 1.7.
Compatible with code developed with the previous version.
Released on 16 Jul 2015

Fixed the handling of generic exceptions thrown by a DataProvider or MetadataProvider implementation: generic exceptions are now forwarded to the connected Lightstreamer Server whenever possible.

1.0.1 build 16
Compatible with Adapter Remoting Infrastructore since 1.7.
Released on 21 Jan 2015

Included in Lightstreamer distribution. The features are similar to the current SDK for .NET Adapters (version 1.9 build 1008).

SDK for .NET Adapters
1.10.0 build 1017 (dll version 1.10.5962.17870 - Strong Name dll version 1.10.5962.17871)
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with code developed with the previous version.
Released on 23 Jan 2017

Improved the app configuration example, by showing how to configure the keepalive messages.

1.10.0 build 1017 (dll version 1.10.5962.17870 - Strong Name dll version 1.10.5962.17871)
Compatible with Adapter Remoting Infrastructure since 1.7.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 May 2016

Dropped the compatibility with .NET environment versions prior to 4.0. 4.0 or later is now required. COMPATIBILITY NOTE: Check the .NET runtime environment in use before updating existing Remote Adapter installations. If the Remote Adapter is run by a custom launcher, and if the application had been compiled for an earlier .NET environment, the loading of the new library may fail. In this case, the application has to be recompiled and possibly ported to a 4.0 or later target environment.

As a consequence of the new runtime requirements, the names of the provided exe and dll files have changed, to lose the _N2 suffix. COMPATIBILITY NOTE: Existing Remote Adapter installations may require some renaming within some custom script. If the Remote Adapter is run by a custom launcher, a rebuild of the application may be needed to refer to the new dll name.

Introduced parallelization of the invocations of methods on the Remote Metadata Adapter; in fact, previously, the invocations were always done sequentially, with possible inefficient use of the available resources. Several policies are now available for both Metadata and Data Adapter method invocation, and can be configured through the application configuration; see the new sample file in the new "conf" directory for details.
By default, the invocations to the Metadata Adapter methods are now done in parallel.COMPATIBILITY NOTE: If existing Remote Metadata Adapters don't support concurrent invocations, sequential invocations should be restored by configuration.

Introduced the possibility to configure the keepalive time (which was fixed to one second) through the application configuration; see the new sample file in the new "conf" directory for details.

Improved logging; now the keepalives can be excluded from the the detailed log of request, reply and notification messages.

Fixed obsolete notes in the docs for DataProvider and MetadataProvider interfaces on the way implementations are supplied.

1.9 build 1010 (dll version 1.9.5675.18260 - Strong Name dll version 1.9.5675.18262)
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with code developed with the previous version.
Released on 16 Jul 2015

Improved logging; now the detailed log of request-reply messages not including notification messages (i.e. data updates) is possible.

Reduced some long pathnames in the docs pages, which could cause issues on some systems.

1.9 build 1008 (dll version 1.9.5492.23212 - Strong Name dll version 1.9.5492.23215)
Compatible with Adapter Remoting Infrastructure since 1.7.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 21 Jan 2015

Introduced the possibility to provide Adapter initialization parameters directly from the Proxy Adapter configuration; such parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation) will be added to those already received by the Metadata or Data Adapter Init method.
As a consequence, the Init method of a Remote Adapter is no longer invoked upon Remote Server startup, but only after the connection with the Proxy Adapter has been established. COMPATIBILITY NOTE: The move of initialization stuff performed in the Init method from before to after the connection attempt may be undesirable. If this is the case:

Extended the MetadataProvider interface to support the new Push Notification Service (aka MPN Module). When enabled, the new methods will be invoked in order to validate client requests related with the service. See the interface docs for details. COMPATIBILITY NOTE: Existing Remote Metadata Adapter source code has to be extended in order to be compiled with the new dll (the new methods could just throw a NotificationException), unless the Adapter class inherits from one of the supplied LiteralBasedProvider or MetadataProviderAdapter. In the latter case, the Adapter will accept any MPN-related request; however, MPN-related client requests can be satisfied only if the involved "app" has been properly configured.
On the other hand, existing Remote Metadata Adapter binaries hosted by an old version of the .NET Adapter SDK still run with the new version of Lightstreamer Server and the Proxy Adapters, as long as the MPN Module is not enabled.
However, the MPN Module is not available with this edition.

Extended the MetadataProvider interface to support the new Push Notification Service (aka MPN Module). However, the MPN Module cannot be enabled in Moderato edition. COMPATIBILITY NOTE: Existing Remote Metadata Adapter source code has to be extended in order to be compiled with the new dll (the new methods could just throw a NotificationException), unless the Adapter class inherits from one of the supplied LiteralBasedProvider or MetadataProviderAdapter.
On the other hand, existing Remote Metadata Adapter binaries hosted by an old version of the .NET Adapter SDK still run with the new version of Lightstreamer Server and the Proxy Adapters.

Introduced the "ClearSnapshot" operations on the Remote Server's IItemEventListener, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the interface docs for details. COMPATIBILITY NOTE: Existing Data Adapters don't need to be extended or recompiled.

Removed the dependency of the SDK library from log4net for its own logging. Custom launchers should use the new static SetLoggerProvider function in the "Server" class to provide suitable consumers, by implementing new dedicated interfaces (see the docs for details). COMPATIBILITY NOTE: Existing custom launchers will still run with the new SDK library, but they won't print any log coming from the library itself; in order to print such log, they have to be extended. The supplied DotNetServer_N2.exe still leans on log4net, over which it forwards all library's log.
Updated the included log4net dll to version 1.2.13; note that, according with the above change, the log4net library is no longer required in order to compile the Adapters, but only in order to run DotNetServer_N2.exe.

Changed DotNetServer_N2.exe so that the /host command line argument is now mandatory; this disallows the use in combination with the "Piped" versions of the Proxy Adapters. COMPATIBILITY NOTE: this is just a consequence of the discontinuation of "Piped" versions brought by Adapter Remoting Infrastructure 1.7; see related notes.

Fixed an error in the documentation of the WinIndex property in the TableInfo class; clarified how the field can be used to match subscription and unsubscription requests.

Simplified the included documentation, to lean on the Adapter Remoting Infrastructure documentation for architectural aspects and on the available examples for the deployment aspects.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

Modified the SDK versioning, which now differs from the internal dll versioning.

1.7.4804.33208
Compatible with Adapter Remoting Infrastructure since 1.4.3.
Compatible with code developed with the previous version.

Improved the performances under high update load.

1.7.4720.31842
Compatible with Adapter Remoting Infrastructure since 1.4.3.
Compatible with code developed with the previous version.
Released on 20 Dec 2012

Relieved the restrictions on the use of the NotifyNewTables method, according with the locking policy change introduced in SDK for Java [In-Process] Adapters version 5.1.

1.7.4503.21088
Compatible with Adapter Remoting Infrastructure since 1.4.
Compatible with code developed with the previous version.
Released on 3 Aug 2012

Clarified the API documentation in several points.

1.7.4462.30217
Compatible with Adapter Remoting Infrastructure since 1.4.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Fixed a bug that affected the special Update method overloads based on the IItemEvent and IIndexedItemEvent interfaces. In case the "robust" version of the Proxy Data Adapter had been in use, the updates could have been discarded.

Improved the extraction of HTTP headers supplied to NotifyUser.

Clarified the API documentation in several points.

1.7.4175.16355
Compatible with Adapter Remoting Infrastructure since 1.4.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Node.js Adapters

Check for newer versions on npm.

1.3.2 build 27
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with code developed with the previous version.
Released on 13 Sep 2016

Fixed a bug in the parsing of requests that could lead to incorrect results in case of two or more simultaneous requests.

1.3.1 build 17
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with code developed with the previous version.
Released on 10 May 2016

Removed the library and jsdocs from the package. Only links to online resources are now provided.

1.3.1 build 15
Compatible with Adapter Remoting Infrastructure since 1.7.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 21 Jan 2015

Introduced the possibility to provide Adapter initialization parameters directly from the Proxy Adapter configuration. Hence, a "init" event has been added to both the MetadataProvider and DataProvider objects; it will be triggered after the connection with the Proxy Adapter has been established and passed the new parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation). COMPATIBILITY NOTE: The new events can be left unhandled, so no code changes are needed.

Extended the MetadataProvider object to support the new Push Notification Service (aka MPN Module). When enabled, the new events will be issued in order to validate client requests related with the service. See the docs for details. COMPATIBILITY NOTE: Existing Remote Metadata Adapter code is still supported (but for the unlikely case of a name conflict with the new events) and the Adapter will accept any MPN-related request; however, MPN-related client requests can be satisfied only if the involved "app" has been properly configured. However, the MPN Module is not available with this edition.

Extended the MetadataProvider interface to support the new Push Notification Service (aka MPN Module). However, the MPN Module cannot be enabled in Moderato edition. COMPATIBILITY NOTE: Existing Remote Metadata Adapter code is still supported.

Added the clearSnapshot method to the DataProvider object, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the interface docs for details.

Improved interpretation of non-string values used as field value updates: while previously all "falsey" values, excluding the empty string, were interpreted as nulls now their string representation is assumed COMPATIBILITY NOTE: If a null was expected on the Client as a consequence to a falsey value passed to the adapter, such value has to be replaced with an explicit null or the Client has to be changed accordingly.

Improved the interface documentation.
Fixed the documentation of some cases in the MetadataResponse class, which were confused with the corresponding requests.
Introduced suitable documentation for the default behavior of the MetadataProvider object.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

1.0.1 build 5
Compatible with Adapter Remoting Infrastructure since 1.4.3.
Released on 9 Oct 2013

Officially introduced in Lightstreamer distribution.

SDK for Python Adapters

Check for newer versions on the Python Package Index.

1.0.0post1 build 13
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with code developed with the previous version.
Released on 22 Nov 2016

Fixed notification of End Of Snaphsot in case of not availability of the snapshot.

Fixed docstrings in modules "lightstreamer_adapter/server.py" and "lightstreamer_adapter/subscription.py".

Fixed unit tests.

Updated logging messages.

Finishing touches on the package documentation visible from the PyPi repository.

Upgraded to final version, ready for production use.

1.0.0b1 build 9
Compatible with Adapter Remoting Infrastructure since 1.7.
Made available as a prerelease on 10 May 2016

Officially introduced in Lightstreamer distribution.

SDK for Generic Adapters
1.7 build 68
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with Remote Servers for the previous version.
Released on 23 Jan 2017

Fixed a wrong link to the online examples in examples.txt.

1.7 build 68
Compatible with Adapter Remoting Infrastructure since 1.7.
Compatible with Remote Servers for the previous version.
Released on 13 Feb 2015

Fixed syntax errors in the examples of the MPI and DPI commands. The syntax specifications were unaffected.

1.7 build 66
Compatible with Adapter Remoting Infrastructure since 1.7.
Not compatible with Remote Servers for the previous version; see compatibility notes below.
Released on 21 Jan 2015

Introduced as a separate SDK to address the ARI Protocol, made available to custom Remote Servers for implementing the Adapter interface via TCP. For the history of the previous versions of the protocol, refer to the "Adapter Remoting Infrastructure" component, up to version 1.4.3.

Extended the protocol to introduce the possibility to provide Remote Servers with initialization parameters directly from the Proxy Adapter configuration. Hence, new "DPI" and "MPI" methods, for Data and Metadata Adapters respectively, have been added; they will be invoked on the request channel immediately after the connection and passed the new parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation). See the protocol documentation for details. COMPATIBILITY NOTE: Existing Remote Servers have to be extended in order to accept and answer the new request, otherwise the connection will fail. However, the previous behavior can be enforced on the Proxy Adapter by disabling the new request through the new "init_remote" configuration parameter of the Proxy Adapter.

Extended the protocol with requests related with the new Push Notification Service (aka MPN Module). When enabled, the new requests will be issued in order to validate client requests related with the service. See the Protocol documentation for details. COMPATIBILITY NOTE: existing Remote Servers don't need to be extended as long as the MPN Module is not enabled. However, the MPN Module is not available with this edition.

Extended the protocol with requests related with the new Push Notification Service (aka MPN Module). However, the MPN Module cannot be enabled in Moderato edition. COMPATIBILITY NOTE: existing Remote Servers don't need to be extended.

Introduced the "CLS" command on the Data Adapter notification channel for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). Refer to "clearSnapshot" in the Java In-Process Adapter SDK for details.

Clarified the protocol documentation with regard to the thread pools within Lightstreamer Server involved in the invocation of the various methods.

SDK for Web Clients (Unified API)
7.0.4 build 1721
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 23 Jan 2017

Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. This includes the specification of field names as "data-field" attributes in DOM cells to be handled by StaticGrid or DynaGrid. Obviously, the final validation on field names is made by the Metadata Adapter.

Fixed a bug introduced in version 6.1 which prevented the "slowing algorithm" (see setSlowingEnabled) from working.

Fixed a bug in setRequestedBufferSize, which caused the value "unlimited" to be ignored for subscriptions in MERGE mode, which would stick to the default buffer size of 1.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument.

Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.

Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.

Revised the documentation of possible subscription error codes.

Fixed the Documentation of the FlashBridge class, which included spurious entries for names "onBridgeReadyCalled" and "callBridgeReady".

7.0.4 build 1718
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.

Fixed a bug that could prevent the transition to "cold" style of a cell in a grid, hence leaving it in "hot" state. This was only possible if the Server's <delta_delivery> setting had been forced to N.

Addressed a compatibility issue with the new Safari 10, which, on some environments, caused the cells associated with StaticGrid or DynaGrid objects not to be detected.

Fixed the handling of wrong calls to getFields and getFieldSchema on Subscription. In some cases, an exception different from the IllegalStateException was thrown.

Fixed a bug that could affect connection sharing on old browsers when equipped with Norton Internet Security.

Fixed a bug in the logging support, which caused the setUseInnerHtml method of the DOMAppender to be ineffective (false was always meant).

Fixed the log produced by the library, as, between the window name (when available) and the timestamp a space was missing.

7.0.4 build 1717
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.

Fixed a bug that, under conditions of client machine overloaded or badly responsive, could have caused a successful subscription, together with the related updates, not to be notified to the application. The bug only affected slave pages when connection sharing was enabled.

7.0.3 build 1713
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 5 Sep 2016

Fixed a bug that could have led, under certain circumstances, to an endless loop of connection and disconnection when two or more pages were trying to share the connection.

Added clarification details in the documentation of setCookieHandlingRequired and enableSharing.

7.0.2 build 1710
Compatible with Lightstreamer Server since 6.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Compatible with the previous version of the SDK for Flash Clients.
Released on 10 May 2016

Renamed the SDK, which was named "SDK for JavaScript Clients". The new name also emphasizes that it is based on the Unified APIs, like an increasing number of other Client SDKs. Also renamed the internal folder from "sdk_client_javascript" to "sdk_client_web_unified".

Discontinued the documentation of the use of this library in a Node.js environment. Now the new SDK for Node.js Clients (Unified API) is available, with dedicated documentation and instructions on how to acquire the library from the npm service.

Discontinued the supply of the alternative versions of the library, which, however, can still be created with Generator.html. Also moved Generator.html under the lib folder.
Note that the library version for Node.js was in AMD format and required to be included in a custom source together with RequireJS. The use of the library version available through the npm service (see the new Node.js Client SDK) is recommended instead.

Changed the names of some properties in the ConnectionOptions bean. To resume:

This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using getters and setters for any of the specified properties should be ported, but the old getters and setters are still supported. On the other hand, custom code which defines onPropertyChange on a ClientListener and mentions any of the specified properties has to be ported to the new property names.

Separated the ConnectionSharing class from the LightstreamerClient: this means the class and its dependencies can now be excluded using the Generator.html. Hence, the API and usage for this class have changed: clientInstance.connectionSharing.enableSharing(...); clientInstance.connectionSharing.isMaster(); becomes clientInstance.enableSharing(new ConnectionSharing(...)); clientInstance.isMaster(); where the parameters of the old enableSharing method and the new ConnectionSharing constructor are still the same. COMPATIBILITY NOTE: existing code leveraging enableSharing should be ported, although old code still works for now (provided that the ConnectionSharing class is not excluded via Generator.html); if no sharing at all is configured, the enableSharing call can also be removed.
When connection sharing is enabled, it is now possible to force the LightstreamerClient to release sharing-related resources by using the enableSharing(null) call while DISCONNECTED.

Fixed a bug introduced on version 6.2.6: the bug prevented the use of WebSockets in some cases in which the user connection was switched from a non-WS-enabling network to a WS-enabling one.

Fixed a bug: in case of a Subscription Error the client would still try to subscribe the Subscription again, until a manual unsubscribe call was performed.

Fixed a bug which prevented the invalid-license error from being notified on Node.js.

Changed the behavior of getConnectTimeout/setConnectTimeout. This setting now accepts the "auto" value. If "auto" is specified, the timeout will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value. To check and/or modify the current timeout a new getter/setter pair is exposed: getCurrentConnectTimeout/setCurrentConnectTimeout. COMPATIBILITY NOTE: If the getConnectTimeout method is called by the client code its receiving variable may now contain the string "auto"; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.

Slightly changed the reconnection policy upon unexpected errors affecting an active session. In some known cases, the reconnection will no longer be immediate (with the risk of a fast reconnection loop), but the configured retry delay will be applied.

Improved the support for connection sharing by taking advantage of the SharedWorker class, where supported by the browser. As a consequence, sharing will now succeed in some contexts in which it used not to take place.

Introduced a Promise polyfill (https://github.com/jakearchibald/es6-promise). The polyfill is optional and can be excluded using the Generator.html; in this case the library expects to find the Promise class in the environment.

Fixed a wrong argument type in the docs for class FunctionAppender.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.
Fixed various links in the JSDocs. Also slightly revised the style of the JSDocs.

Fixed the documentation of the DOMAppender and FunctionAppender constructors, which indicated optional arguments before a mandatory argument. Actually, an argument qualified as optional can omitted only if not followed by further arguments, hence arguments preceding a mandatory one are mandatory as well.
Aligned the documentation of all Appenders by removing the optionality attributes to their common constructor arguments.COMPATIBILITY NOTE: No change is needed to existing code, because each of these arguments can still be omitted, as long as no subsequent arguments are supplied.
Clarified the policy for optional function arguments in the docs introduction.

Removed from the documentation various classes that are not related with the interface, but used to be provided as utilities. The whole set of utility classes can be found on GitHub at the following address: https://github.com/Lightstreamer/utility-toolkit-javascript
Removed also some log-related classes that are not needed for setting up the library log, but used to be provided to offer a full reusable logging system. The whole logging system can be found on GitHub at the following address: https://github.com/Lightstreamer/utility-logging-javascript
COMPATIBILITY NOTE: These classes are still included in the library as part of the implementation, so application code exploiting them will keep working. However, any future changes related with these classes will not be reported.

Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license file that supports JavaScript SDK up to version 6.x or earlier, clients based on this new version will not be accepted by the Server.

6.2.7 build 1679.2
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.

Fixed a bug introduced on version 6.1.4 which only affected the use on Node.js; the effect was that, when the Server was unavailable, no more connection attempts were tried.

Fixed an error in the JSDocs, where SimpleLoggerProvider was documented as a module (with static methods); actually, it is a class, with instance methods and an empty constructor.

6.2.6 build 1678
Compatible with Lightstreamer Server since 6.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Compatible with the previous version of the SDK for Flash Clients.
Released on 16 Jul 2015

Fixed a bug: when using the SDK library inside a WebWorker, setting the setCookieHandlingRequired flag to true prevented the library from connecting.

Fixed a bug on the onClearSnapshot implementation of the DynaGrid/StaticGrid/Chart classes, which caused it to have no effect.

Fixed a bug in the SimpleLoggerProvider.removeLoggerAppender method.

Fixed an error in the JSDoc: in the ClientListener.onStatusChange the status "CONNECTED:STREAM-SENSING" was erroneously reported as "CONNECTED:STREAM-SENSE".

Prevented a serious error, on the opening of a WebSocket to a certain host, from blocking other WebSockets connections to different hosts.

Changed the behavior of the addListener method for the LightstreamerClient, Subscription, Chart, DynaGrid and StaticGrid classes: adding a second time the same listener instance now has no effect. COMPATIBILITY NOTE: if in existing code a same listener was added two times to a certain instance, it will no longer receive the events twice; moreover, upon the first invocation of removeListener it will be removed and it will stop receiving events. Hence such code may need to be revised.

Introduced work-around for early XDomainRequest failures related to specific proxies.

Introduced partial compatibility with React Native: at the moment the Client can only connect in HTTP-POLLING mode.

Clarified in the docs that the RemoteAppender does not support log of "INFO" and "DEBUG" levels.

Changed the value of the LightstreamerClient.LIB_NAME static property to "javascript_client".

Changed the default value for the ConnectionOptions.setContentLength setting.

6.2.5 build 1669
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 13 Feb 2015

Introduced support for the new error related to the expiration of an active session on Lightstreamer Server (error 48). The error is not forwarded to the ClientListener, a reconnection is performed instead.

Improved support for stickiness expiration on load balancers: if a client request pertaining to the current session is sent to the wrong instance of Lightstreamer Server, the Client automatically terminates the current session and opens a new one.

Fixed the Chart and ChartLine classes: positionXAxis and positionYAxis were supposed to accept negative values, but such values were explicitly blocked by their implementation.

Fixed a typo in the documentation of the "preventCrossWindowShare" parameter of "enableSharing".

Fixed the fade effect on IE<=8 for cases where the end color is "transparent": in these cases the fade effect will not be applied and a discrete switch will occur (previously there was no change at all and the starting color was left).

Fixed the "inherited methods" section of the JSDocs: some methods were missing, others were pointing to the wrong location. Also improved the readability of such list.

Fixed a bug that, under rare circumstances, could have triggered a non-strict loop of requests for the xhr.html file.

6.2.2 build 1664
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 21 Jan 2015

Added the error code 30 in onServerError; the case is only predisposed for future special licenses.COMPATIBILITY NOTE: custom clients which check the possible error outcomes don't have to be updated, as long as there is no change in license terms.

Extended the sendMessage with a new flag that permits to queue messages while the Client is offline.

Renamed the setRetryTimeout and getRetryTimeout methods into setRetryDelay and getRetryDelay. The old names are kept as aliases to mantain backward compatibility with previously written code. The behavior of the associated value is also changed: while the delay was previously started from the failure of the connection, it is now calculated from the start of the connection, thus absorbing any round-trip or timeout between the start of the connection and its failure.

Introduced the setFirstRetryMaxDelay and getFirstRetryMaxDelay settings. The actual delay is a randomized value between 0 and the value set on the property associated with the new methods. The randomization might help avoid a load spike on the cluster due to simultaneous reconnections, should one of the active servers be stopped. Previous versions of the SDK library had an hardcoded 0 value for this setting, the new 100ms default value should not introduce a noticeable difference.

Fixed the management of invalid key values when two-level push is active. Now an invalid key no longer causes the session to fail, but only a notification to onCommandSecondLevelSubscriptionError with the new code 14 is issued.
Fixed the documentation of two-level push, to specify the implicit conditions that determine the (unlikely) cases in which a key value is invalid.

Fixed an error in the obfuscation process which, under rare circumstances, could have caused a "OpenAjax is not defined" exception.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there. Example code for normal html pages should also be found on GitHub; the source code of the preinstalled welcome page is no longer meant as a reference.

Introduced the new setHttpExtraHeadersOnSessionCreationOnly/isHttpExtraHeadersOnSessionCreationOnly in the the ConnectionOptions class. Unlike with setHttpExtraHeaders, extra http headers will not be sent on all connections, but only during session creation; this still ensures that the headers will reach notifyUser and does not disable WebSocket connections.

Introduced the support for io.js.

Fixed a bug that might have occasionally caused an error to be shown on the browser console (the text of the error was: 'Uncaught Executor error time: NaN').

Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file that supports JavaScript SDK up to version 6.1 or earlier, clients based on this new version will not be accepted by the Server.

6.1.4 build 1640.11
Compatible with Lightstreamer Server since 5.1.2.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 22 Jul 2014

Introduced the new setHttpExtraHeaders/getHttpExtraHeaders in the the ConnectionOptions class. It is now possible to add extra http headers to the requests sent to Lightstreamer Server. NOTE: Setting a non null value for this setting disables WebSockets.

Improved compatibility with redirect-based authentication mode used by some proxies.

Fixed a bug in the autoscroll behavior of the DynaGrid class: it was adhering to the documentation only if listening to a DISTINCT Subscription.

Fixed a bug affecting IE8: if many Subscriptions were subscribed/unsubscribed to the LightstreamerClient in a strict loop a "Stack overflow at line: 0" error might have been generated.

Fixed an incompatibility with phonegap applications running on Windows Phone 8.

Fixed a bug affecting Chrome, and potentially other browsers, that prevented the SDK library from working correctly if, depending on the case, "Block sites from setting any data" or "Block third-party cookies and site data" was selected on the Content settings.

Fixed a bug introduced on version 6 that might have prevented the SDK library to behave correctly if Websockets were not used (because of configuration or network/browser/intermediaries capabilities) and a load balancer using cookie stickiness was placed between the Client and the servers.

6.1.1 build 1640
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 10 Mar 2014

Fixed an issue with Chrome 33 and greater, where a harmless request for a page named "null" was performed to the web server.

Fixed an issue, introduced on version 6.1, with the Rekonq browser, that prevented the SDK library from correctly starting up.

Fixed a bug that in rare cases could have prevented the recovery of a shared connection in case of closure of the "master" Client.

Fixed an issue with Node.js on Linux that was observed in particular scenarios and, in these cases, prevented the connection.

6.1 build 1634
Compatible with Lightstreamer Server since 5.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Not compatible with the previous version of the SDK for Flash Clients.
Released on 19 Feb 2014

Removed the need of cookie usage in most situations.

Added a onClearSnapshot callback to the SubscriptionListener. The callback will be invoked upon a corresponding invocation of "clearSnapshot" on the Adapter side for one of the subscribed items (provided that the Subscription is for DISTINCT or COMMAND mode) with the request to accomplish the specified action. Note that the "clearSnapshot" invocation is not available for Servers lower than version 6.0. COMPATIBILITY NOTE: Existing code will keep working as long as, on the Adapter side, "clearSnapshot" is not used for items in DISTINCT or COMMAND mode; otherwise, the item state on the Client may become inconsistent, hence implementing the new callback would be mandatory.

Added a default handling of the onClearSnapshot event in the AbstractGrid class that's thus reflected on subclasses:
All the rows/charts associated to an item receiveng the onClearSnapshot event are removed from the widget.

Fixed a bug that in rare cases could have made the Client send wrong-composed requests to Lightstreamer Server. The bug had two effects, none of which caused any actual issue: the Client may have sent extra useless requests; in response to such requests the Server would have logged error messages in the log.

Fixed a bug that prevented the correct execution of VisualUpdate.setCellValue calls having null as second parameter.

Expand the ConnectionOptions.setForcedTransport method to accept "HTTP" and "WS" values. These new values force the Client to only use the related transport without forcing it into using a fixed connection method (i.e.: POLLING or STREAMING).

Fix a bug on the StaticGrid. Once sorted it may have routed updates to the wrong rows.

Extended the Chart implementation to accept nulls as chart values. Nulls have now special meanings: a single null (either on the X or Y axis) will make the Chart ignore the update, a double null (on both the X and Y axis) will clear the involved ChartLine. COMPATIBILITY NOTE: existing code will keep working as long as the rule imposing to only feed the Chart with valid numbers was respected. If not it is possible to leverage parsers for the Chart.setXAxis and Chart.addYAxis methods to prevent nulls to reach the internal Chart engine.

Improved Node.js compatibility.

Revised the directory structure of the included examples.

Clarified the license terms for the included example source code.

Incremented the minor version number. COMPATIBILITY NOTE: If running Lightstreamer Server with a license file that supports JavaScript Client SDK up to version 6.0 or earlier, clients based on this new version will not be accepted by the Server.

6.0.1 build 1603
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 31 Jan 2013

Improved the Chart class: now charts are printed using the <canvas> element. If <canvas> is not available the SDK library will switch to the previous behavior.

Fixed an issue that may crash IE7 in case the SDK library needs to fallback to the "Unoptimized HTTP Polling".

Improved compatibility between Opera and the "Unoptimized HTTP Polling".

Fixed a bug on the StaticGrid class: if the grid was bound to a COMMAND or DISTINCT Subscription and there were more cells bound to the same field then the grid would have stopped showing updates on the HTML after a clean or scroll operation.

6.0.1 build 1599
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 10 Jan 2013

Fixed a bug introduced on build 1595: UNORDERED messages may have been repeated if the session connection was "Unoptimized Polling over HTTP" (see http://goo.gl/kwREX for reference).

6.0.1 build 1595
Compatible with Lightstreamer Server since 5.1.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 20 Dec 2012

Removed a potential memory leak: the disposal of a LightstreamerClient instance was leaving some resources behind.

Fixed generator.html to work on browsers when/where the console instance is not available.

Introduced a better handling of proxies that can forward the WebSocket handshake but can't properly handle the open WebSocket.

Fixed an issue with Firefox that might have caused a reconnection attempt to hang for many seconds after Lightstreamer Server had been unavailable for a while.

Fixed handling of string parameters entered in the ConnectionDetails and ConnectionOptions objects: a parameter supposed to be a string may have been mistakenly parsed as a number resulting in heading 0 and . to be removed.

Improved style of the StatusWidget appearance by replacing any globally set BackgroundColor with a transparent one.

Added some missing [optional] flags to the documentation.

Fixed a bug in the Subscription class: when used in COMMAND mode, the "key" field of a "row" might have been mistakenly empty if such "row" was removed (via a DELETE command) and then added again (via an ADD command) by the adapter.

Fixed a bug in the ItemUpdate.isValueChanged method: when used against a second-level field an erroneous true was returned.

Removed a 100/200 ms delay on subscriptions and messages that was erroneously introduced client-side. In case of file:/// executions the delay may also have been suffered during the dequeuing of received updates.

Improved send message performances.

Improved fallback mechanisms for Android stock browser.

Extended the supplied Monitor Demo with the newly available message-related statistics.

Added an example of integration with the Dojo libraries. Actually the example is hosted on GitHub and only a link is provided.

Included in the Client Guide document notes on how to configure the RequireJS optimization tool for use with a code including the JavaScript Client SDK library.

6.0 build 1576
Compatible with Lightstreamer Server since 5.0.
Not compatible with code developed with the old SDK for HTML Clients.
Not compatible with the previous version of the SDK for Flash Clients.
Released on 3 Aug 2012

Introduced the new JavaScript Client SDK, which replaces the old HTML Client SDK with a brand new, fully redesigned, API and extended features, including:

See the included documentation for any details.
The HTML Client SDK library shipped with the previous versions of Lightstreamer is still supported by Lightstreamer Server since Server version 4.0.

SDK for Node.js Clients (Unified API)

Check for newer versions on npm.

7.0.5 build 1718
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 16 Jan 2017

Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

7.0.4 build 1717
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 9 Jan 2017

Fixed a bug introduced in version 6.1 which prevented the "slowing algorithm" (see setSlowingEnabled) from working.

Fixed the handling of wrong calls to getFields and getFieldSchema on Subscription. In some cases, an exception different from the IllegalStateException was thrown.

Fixed the log produced by the library, as, between the window name (when available) and the timestamp a space was missing.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument.

Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.

Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.

Revised the documentation of possible subscription error codes.

Added clarification details in the documentation of setCookieHandlingRequired.

7.0.3 build 1712
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 10 May 2016

Introduced the new Node.js SDK. See the "sdk_client_nodejs_unified" folder.
Previously, the Node.js library was available as part of the SDK for JavaScript Clients, now called SDK for Web Clients (Unified API).
Note that the library was released in two different versions: as a "flavour" of the JavaScript Client Library and through the npm service. This SDK only refers to the library deployed via npm. However, currently, the use of the Web (Unified API) Client Library in the Node.js flavour, which is based on AMD, is not recommended.
The Client Library has the same characteristics of the library in the current SDK for Web Clients (Unified API) version 7.0.2 and you can refer to that SDK for the changelog with respect to previous versions (although some topics in that changelog, obviously, don't pertain to Node.js), with the following additions:

SDK for Flash Clients
1.3 build 49
Compatible with Web (Unified API) Client SDK since 6.1.
Compatible with code developed with the previous version.
Released on 10 May 2016

Updated obsolete names in the signature of the SDK and some included files.

1.3 build 48
Compatible with JavaScript Client SDK since 6.1.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

1.3 build 48
Compatible with JavaScript Client SDK since 6.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 19 Feb 2014

Added a onClearSnapshot callback to the FlashTable. The callback will be invoked upon a corresponding invocation of "clearSnapshot" on the Adapter side for one of the items in the table (provided that they are subscribed to in DISTINCT or COMMAND mode) with the request to accomplish the specified action. COMPATIBILITY NOTE: Existing code will keep working as long as, on the Adapter side, "clearSnapshot" is not used for items in DISTINCT or COMMAND mode; otherwise, the item state on the Client may become inconsistent, hence implementing the new callback would be mandatory.

Revised the directory structure of the included examples.

Clarified the license terms for the included example source code.

1.2 build 46
Compatible with JavaScript Client SDK since 6.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 3 Aug 2012

Ensured compatibility with the new JavaScript Client SDK.
Ported the included demos to the new JavaScript Client SDK library. Note that the "commons" directory is no longer used to bring configuration code and imported JavaScript library code, which is now all included in the demo directory.

Removed the "javascript bridge" part of the SDK library, lsflashbridge.js, which is no longer needed with the new JavaScript Client SDK library. This also removes the strict dependency of each library build from a specific build of the underlying library, which was the case with the old HTML Client SDK library.

Changed the behavior of the onStatusChange callback; as a consequence of the required change of the underlying Client SDK library, the callback now returns new status indicators. COMPATIBILITY NOTE: existing code making use of the values returned by the onStatusChange callback should be wholly revised, by referring to the new behavior.

Simplified the SDK library deployment, by removing the version-reporting files.

1.1 build 43.165.13
Compatible with SDK for HTML Clients version 5.0.1 build 1446.13.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Ported to the current HTML Client SDK library build.

1.1 build 43.165.9
Compatible with SDK for HTML Clients version 5.0 build 1446.9.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Ported to the current HTML Client SDK library build.

Rebuilt the included StockList demo; the demo binaries have reduced significantly.

1.1 build 40.165.6
Compatible with SDK for HTML Clients version 5.0 build 1446.6.
Compatible with code developed with the previous version.
Released on 6 Dec 2011

Ported to the current HTML Client SDK library build.

1.1 build 40.165.3
Compatible with SDK for HTML Clients version 5.0 build 1446.3.
Compatible with code developed with the previous version.
Released on 8 Jul 2011

Ported to the current HTML Client SDK library build.

1.1 build 40.165
Compatible with SDK for HTML Clients version 5.0 build 1446.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Flex Clients
2.2.1 build 103
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

Fixed the documentation of the Table classes, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

2.2 build 96
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 19 Feb 2014

Fixed a bug in the protocol layer regarding the interpretation of some kind of ERROR messages. In case one of such error messages was received the Client was unable to forward them to the application layer.

Used Flex 4 SDK to build the SDK library.

Improved the layout of the included examples.

Clarified the license terms for the included example source code.

2.1 build 93
Compatible with Lightstreamer Server since 4.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 Jan 2013

Fixed a bug in the management of non-ascii and control characters in field values; for particular values, the bug could also cause nearby characters to be affected.

Dropped the support for Flex 3. Flex 4 or later is now required.
COMPATIBILITY NOTE: existing clients compiled against Flex 3 have to be ported to Flex 4 or higher version.

2.1 build 90
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Improved the robustness in case of connection problems.

2.1 build 88
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Silverlight Clients
1.4.2 build 1011 (dll version 1.4.6080.20194 - Strong Name dll version 1.4.6080.20196)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 5 Sep 2016

Fixed a bug that prevented the use of very long (> 2^15) custom strings (for instance: for item groups, fields schemas or user names), by causing exceptions to be thrown.

1.4.1 build 1009 (dll version 1.4.5960.30621 - Strong Name dll version 1.4.5960.30623)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Fixed a bug that, under rare circumstances, could have prevented the success of the session rebind procedure performed by the Library, causing the session to hang and eventually close.

1.4.1 build 1008 (dll version 1.4.5457.31419 - Strong Name dll version 1.4.5457.31421)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

Fixed a bug that could have prevented the natural termination of the process when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate naturally, without invoking the application's OnClose (which, instead, should have been given an opportunity to prevent termination).

Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

Modified the SDK versioning, which now differs from the internal dll versioning.

1.4.4588.29271
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 3 Aug 2012

Discontinued the compatibility with the previous version of the Server.

1.4.4527.28381
Compatible with Lightstreamer Server since 4.1.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Introduced the ChangeSubscription method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription; this also introduces a new error code in PushServerException.

Fixed the handling of mocked calls to UnsubscribeTable when a batch is in place.

Fixed a bug which prevented the ForceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.

1.3.4517.22613
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.

Fixed a memory leak that could have caused a zombie thread to be left after an unsuccessful attempt of connecting to Lightstreamer Server; if the Server had been unreachable for long time for any reason and a loop of attempts had been performed, the leak could have become significant.

1.3.4279.18255
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Fixed a potential bug that may have occurred after a SendMessage call, causing an ObjectDisposedException to be internally issued.

1.3.4168.21501
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for iOS Clients
1.4.5 build 169
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 23 Jan 2017

Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.

Property maxConcurrentSessionsPerServer of LSConnectionInfo is now maxed out at 4. Previously, trying to set a value greater than 4 would raise an exception.

Raised minimum iOS version requirements to 8.0.

1.4.4 build 167
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 5 Sep 2016

Introduced the use of NSURLSession in place of NSURLConnection, where available.

1.4.3 build 165
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Added bitcode support.

Slightly revised the organization of the doc folder.

Updated obsolete names in the signature of some included files.

1.4.3 build 163
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 16 Jul 2015

Fixed a problem that was causing that some kind of connection errors were not notified via the common LSConnectionDelegate and would result in automatic reconnection attempts after a timeout.

Fixed bug that caused a missing "changed" flag on the first update of a field if the update value was null.

Fixed bug that left failed subscriptions in the Client's cache, leading to a possible duplicated subscription after an automatic reconnection.

Fixed bug that was causing an empty user parameter to be sent in place of a null user parameter.

Fixed a problem triggered when disconnecting while a connection attempt was hanging: an attempt to use the exception thrown by openConnection could have led to a memory violation.

Fixed overzealous Unicode decoding that could lead to corrupted update values. E.g. sequences like U+XXXX are no more converted to their corresponding Unicode character.

Reduced memory consumption during exception handling.

1.4.1 build 157
Compatible with Lightstreamer Server since 6.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 13 Feb 2015

Added log delegation. Now an LSLogDelegate may be set on the LSLog class to redirect logging lines to an app-specific logging facility.

Removed the 32-bit-only version of the library from the SDK distribution. The mixed 32- and 64-bit library version now is compatible up to, and including, iOS 5.1. COMPATIBILITY NOTE: If your project used the 32-bit version of the SDK library, libLightstreamer_iOS_client.a, update the project to use the mixed 32- and 64-bit version, libLightstreamer_iOS_client_64.a.

Fixed bug that caused notification of benign timeout events during initial phases of stream-sense cycles. These notifications have been discontinued since version 1.2.3, but under particular conditions they were still sent.

1.4 build 151
Compatible with Lightstreamer Server since 6.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 21 Jan 2015

ARC-ified. As a consequence of ARC-ification, delegates are now held with weak references, hence, you should keep a strong reference of delegates passed to the SDK library, or they will be released immediately and their methods will not be invoked. COMPATIBILITY NOTE: If your code does not keep a strong reference of delegates passed to the SDK library, it should be revised. Moreover, if your app is not developed with ARC, it is necessary to add "-fobjc-arc" to Other Linker Flags under the app's Build Settings, or you may encounter linking errors.

Added support for Mobile Push Notifications. The LSClient now provides methods to activate special MPN subscriptions that will be delivered via mobile push (i.e. remote) notifications. An MPN subscription is backed by a real-time subscription, from which it may take any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent: they survive the session and are identified by a permanent, global, unique key provided by the APIs at time of activation. Mobile Push Notifications carry common iOS remote notification information, like a sound and an icon badge, but additionally may carry user-defined data at the benefit of the application.
See the interface documentation for details.
However, support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Added an alternative version of some methods to offer an error handling pattern that better fits Cocoa Touch. Now, for every method that may throw an exception in presence of a runtime error, a corresponding non-exception-throwing version is provided. This alternative method has always the same name, semantics, return value and parameters, except for an additional NSError output parameter that may be used (if not nil) to store a runtime error. Note that exceptions due to programming errors (such as use of invalid field names, wrong API call sequence, etc.) may still be thrown. See the API reference home page for an example.

Added new LSPushClientException, thrown in case passed parameters are invalid or conflicting. Previously, a generic LSException was thrown, with a varying exception name property. COMPATIBILITY NOTE: Existing code depending on the LSException class or on the exception name property should be revised. Generic LSException is never thrown now, but remains as a base class of all specific exceptions.

Modified the LSTableInfo class to allow the setter methods to throw a LSPushClientException. This is needed to support the creation of unmodifiable instances, as needed by the new MPN support. COMPATIBILITY NOTE: Existing code is not affected, as only unmodifiable instance can throw the exception and such instances are only returned by the newly introduced LSMPNSubscription class.

Fixed the documentation of the LSExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Improved the reconnection mechanism: if a connection error is detected within an existing valid session, a reconnection attempt is tried after a short randomized interval that can be configured with the new parameter LSConnectionInfo.firstRetryMaxDelaySecs. Moreover, subsequent connection retries now consider the delay specified by LSConnectionInfo.retryDelaySecs as part of an elapsed timeout. This avoids an additional delays if a longer timeout has expired. If a connection retry fails immediately, instead, the delay specified by LSConnectionInfo.retryDelaySecs is applied.

Fixed unsubscription APIs: now an active connection is no more needed, they will unsubscribe the table whether the Client is connected or not. In certain cases a zombie subscription may remain on Lightstreamer Server.

Fixed bug that caused rounding of requested max frequency when changing constraints on an existing table subscription.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

1.2.6 build 74.24
Compatible with Lightstreamer Server since 5.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 22 Jul 2014

Decoupled the session thread from the notification of connection events and asynchronous message events. Previous risks of deadlock by closing the connection during a connection event are now avoided. API docs have been updated to reflect the change.COMPATIBILITY NOTE: Existing code using background threads to call closeConnection during a connection event will continue to work. Anyway, consider that connection events may now be called with a short delay, and represent a connection status that may have changed in the meantime.

Improved enforcement of network timeouts. Now the SDK library is able to detect stalled network operations also for control connections. When this happens it cancels the operation to avoid keeping the Client blocked indefinitely.

Improved connection check on synchronous and asynchronous send message. Clarified asynchronous send message API docs.

Fixed a race condition that, upon concurrent invocations of openConnection, could have caused some of these invocations to be aborted but to return with no exception.

Fixed bug that was sending exceptions caught while sending asynchronous messages to the connection delegate instead of the message delegate.

Fixed bug that could lead to hang during connection closure, when called under network instability.

Fixed bug with the policy for ConcurrentSessionsPerServer exceeding: the "none" policy was not obeyed and the "block" policy was used instead.
Changed the default policy from "none" to "block". COMPATIBILITY NOTE: Existing code leaning on the default to be "none" should now explicitly set this policy. Code trusting the SDK library default, due to the aforementioned bug, won't experience any change. Changed the ConcurrentSessionsPerServer setting interpretation, in order to clarify its meaning: previously it was referring to "maximum number of HTTP connections for each distinct server address", with a default of 3, which would translate to 2 maximum streaming sessions per server address (as 1 connection was always kept as spare for control connections). Now it correctly refers to "streaming connections", and the new default is 2. COMPATIBILITY NOTE: Existing code that performs the setting will now allow one more session, unless changed accordingly.

Added use of "no-cache" HTTP headers for better traversal of network operators' transparent proxies.

Fixed missing check for client connection during synchronous and asynchronous message send. Improved asynchronous message send API docs.

Fixed wrong log category for some messages of LSThreadPool class.

1.2.4 build 74.14
Compatible with Lightstreamer Server since 5.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 Mar 2014

Added new LSConnectionStatusConnecting value for LSConnectionStatus. This value reports when the Client is currently trying to connect (or reconnect after a connection drop). This case was previously included in the LSConnectionStatusDisconnected status. COMPATIBILITY NOTE: Existing code leveraging the LSConnectionStatus value should be checked.

Fixed bug that could cause a subscription or a batch to be sent to Lightstreamer Server even when the connection procedure was not fully completed. The Client now correctly raises an exception saying the Client is not connected.

Fixed bug that could lead to automatic resubscription of tables used on a previous session that has since been forcibly closed by Lightstreamer Server.

Fixed bug that was causing the isSnapshot flag to be NO for snapshot events after an automatic resubscription

Fixed bug that could lead to missing table resubscription after automatic reconnection if a closeConnection was called in the meantime

Fixed bug that could lead to unexpectedly long stall detection time.

Fixed bug that could cause a crash while closing the connection under some rare conditions.

1.2.3 build 74.10
Compatible with Lightstreamer Server since 5.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Dec 2013

Dropped support for iOS versions lower than 5.0; now the iOS Client SDK supports only iOS versions 5.0 and greater. COMPATIBILITY NOTE: clients deployed on old iOS versions may no longer work.

Discontinued the invocation of Event clientConnection:didReceiveConnectionFailure: during the stream-sensing phase of the connection for benign timeout conditions. Now, when the Client connects, this event will no longer be received until a full Stream-sense cycle has been completed. COMPATIBILITY NOTE: Existing code handling this Event to recover connection issues may behave differently, but those issues will be handled by Lightstreamer Stream-sense mechanism, which should be desirable.

Discontinued all the invocations of Event clientConnection:didStartSessionWithPolling: upon session rebind; hence, the event is now called just once per each session, at session establishment, aligning iOS Client SDK behavior to other Client SDKs. Note that this affects also streaming sessions, on content length exhaustion. COMPATIBILITY NOTE: Existing code depending of these notifications may behave differently; the clientConnectionDidEstablish: Event can be used instead.

Added support for TLS/SSL authentication challenge through a new (optional) LSConnectionDelegate event. The new event is named clientConnection:willSendRequestForAuthenticationChallenge: and reflects the equivalent delegate call of NSURLConnectionDelegate. See the event documentation for more information.

Fixed typo in method signature for end-of-snapshot event in LSTableDelegate. The new name is didEndSnapshotForItemPosition. COMPATIBILITY NOTE: A workaround is in place to let code developed with the previous releases to continue working without modifications. See table:didEndSnapshotForItemPosition:itemName: for more information.

Improved batch mode: now the Client will automatically split the batch in more chunks if its size should be more than the configured <request_limit> on Lightstreamer Server.

Fixed bugs related to special subscription cases: unfiltered dispatching, unlimited buffer size and distinct snapshot length were not passed appropriately under certain conditions.

Fixed bug related to conversion of Unicode characters at end of string.

Fixed bug related to protocol handling of # and $ characters at the beginning of a field value. The bug was causing a repeated # or $ character if the field value was beginning with one of these two characters.

Improved the included StockList Demo:
Fixed bug causing crash when the app was put in background and recalled after 1 minute or more.
Removed unsubscription on background: now the app relies completely on the LightStreamer client reconnection and resubscription mechanism.
Clarified life cycle of connection events in the source code.

Clarified the license terms for the included example source code.

1.2.2 build 74.2
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 9 Oct 2013

Added support for 64 bit ARM architectures through a separate version of the SDK library.

Upgraded the included demo to the iOS7 look and feel.

1.2.1 build 68
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 5 Mar 2013

Fixed a bug on the encoding of attributes to be submitted in client requests; the bug could have caused errors in request submission if particular characters had been used in strings such as user/password values or item/group/field/schema names.

1.2 build 66
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2012

Reworked low-level threading model: now the SDK library makes use of dynamic thread pools, for better performance and lower memory footprint.

Extended LSConnectionInfo: introduced properties to specify client behavior in case multiple sessions have to be opened towards the same instance of Lightstreamer Server.

Fixed an issue with exception handling, whereby exceptions occurred while processing updates from Lightstreamer Server could have caused the updates to be silently discarded; now an invocation to clientConnection:didReceiveDataError: on the LSConnectionDelegate is provided.

Fixed minor bugs and documentation errors.

Included code version optimized for iPhone 5 chipset (armv7s).

Adapted the included demo to the iOS6 / iPhone5 environments.

1.1.2 build 51
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 3 Aug 2012

Added the optional isAboutToSendURLRequest callback in the LSConnectionDelegate, to provide a hook that makes it possible to decorate the underlying HTTP requests, if needed to comply with low-level system requirements.

Discontinued the compatibility with the previous version of Lightstreamer Server.

1.1.1 build 47
Compatible with Lightstreamer Server since 4.1.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Introduced the "changeTableSubscription" method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription.

Fixed the wrong name "infoWithPushServerURL" in the documentation page on how to open a connection.

1.1 build 43
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Revised and improved the handling of cases of poor connectivity and of switching between networks.
Note that it is now required that the SystemConfiguration framework is included in the framework list of the XCode project.

Fixed a bug that could have caused high CPU usage under particular conditions.

1.1 build 39
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.

Fixed a bug on the Stream-sense algorithm, which was not working properly.

Fixed a bug that could have caused session rebinds to timeout improperly.

Fixed a bug that could have caused a crash in case of concurrent unsubscription and update of the same item.

Fixed a bug that could have caused a crash in case of multiple reconnections in a short period of time.

1.0.6 build 32
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.

Fixed a bug that could have caused http to be used for control connections also when https was needed, when <control_link_address> / <control_link_machine_name> was specified on Lightstreamer Server configuration.

1.0.5 build 31
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.

Fixed bugs that could have caused a deadlock when repeatedly calling closeConnection and openConnection under poor connectivity.

Fixed minor documentation errors on LSTableDelegate and LSConnectionInfo.

1.0.1 build 27
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for iOS Clients (Unified API Version)

Check for newer versions of Lightstreamer_iOS_Client on CocoaPods.

2.1.2 build 49
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 17 Jan 2017

Added the new setting limitExceptionsUse in LSLightstreamerClient to avoid throwing an exception when certain methods are called with an invalid parameter. E.g. valueWithFieldName: in LSItemUpdate and valueWithItemName:fieldName: in LSSubscription both obey to this new setting. See API docs for more information.

Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

Moved the LIB_NAME and LIB_VERSION methods of LSLightstreamerClient to class properties. They can now be accessed with the dot notation. Previous class methods remain available.

2.1.1 build 46
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 6 Jan 2017

Fixed a bug on the implementation of disconnect, whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.

Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.

Revised the default setting for the contentLength property of LSConnectionOptions, to allow the library to set it to the best value.

2.1.0 build 45
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 25 Nov 2016

Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit the number of sessions that can be concurrently open to the same Server. New properties are: maxConcurrentSessionsPerServer (a class property) and maxConcurrentSessionsPerServerExceededPolicy. See docs for more information.

Added new event to LSClientDelegate to respond to an authentication challenge raised during network connection. New event is client:willSendRequestForAuthenticationChallenge:. See docs for more information.

Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.

Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.

Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.

Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos: on LSSubscriptionDelegate, which is only predisposed.

The client library is now distributed as a framework.

Raised the minimum iOS version requirements to 8.0.

2.0.1 build 38
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 26 Aug 2016

Fixed a memory leak that could become significant with intense update activity.

Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.

Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.

2.0.0 build 33
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 8 Apr 2016

Included in Lightstreamer distribution package. See "sdk_client_ios_unified".

Added bitcode support.

Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.

Event client:didChangeProperty: now reports correct iOS client property names, e.g. "pollingTimeout" instead of "pollingMillis".

Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.

Prevented reconnection attempts upon wrong answers from the Server.

Fixed an error in the log of the keepalive interval setting.

Fixed the documentation of client:didReceiveServerError:withMessage: and client:didChangeStatus:, to specify that the former is always preceded, not followed, by the latter with DISCONNECTED.

2.0 a5 build 27
Compatible with Lightstreamer Server since 6.0.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 17 Nov 2015

Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.

2.0 a4 build 20
Compatible with Lightstreamer Server since 6.0.1
Made available as a prerelease on 7 Oct 2015

Introduced as an improved alternative to the SDK for iOS clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.

SDK for macOS Clients
1.2.5 build 85
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 23 Jan 2017

Renamed the SDK from "SDK for OS X Clients" to follow the renaming of the operating system.
References to "OS X" or "Mac OS X" now changed to "macOS".

Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.

Property maxConcurrentSessionsPerServer of LSConnectionInfo is now maxed out at 6. Previously, trying to set a value greater than 4 would raise an exception.

Raised minimum macOS version requirements to 10.9.

1.2.4 build 83
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 5 Sep 2016

Introduced the use of NSURLSession in place of NSURLConnection, where available.

1.2.3 build 80
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Added bitcode support.

Revised the organization of the doc folder.

Updated obsolete names in the signature of some included files.

1.2.3 build 78
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 16 Jul 2015

Fixed a problem that was causing that some kind of connection errors were not notified via the common LSConnectionDelegate and would result in automatic reconnection attempts after a timeout.

Fixed bug that caused a missing "changed" flag on the first update of a field if the update value was null.

Fixed bug that left failed subscriptions in the Client's cache, leading to a possible duplicated subscription after an automatic reconnection.

Fixed bug that was causing an empty user parameter to be sent in place of a null user parameter.

Fixed a problem triggered when disconnecting while a connection attempt was hanging: an attempt to use the exception thrown by openConnection could have led to a memory violation.

Fixed overzealous Unicode decoding that could lead to corrupted update values. E.g. sequences like U+XXXX are no more converted to their corresponding Unicode character.

Reduced memory consumption during exception handling.

1.2.1 build 72
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 13 Feb 2015

Added log delegation. Now an LSLogDelegate may be set on the LSLog class to redirect logging lines to an app-specific logging facility.

Fixed bug that caused notification of benign timeout events during initial phases of stream-sense cycles. These notifications have been discontinued since version 1.0.2, but under particular conditions they were still sent.

1.2 build 67
Compatible with Lightstreamer Server since 6.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 21 Jan 2015

ARC-ified. As a consequence of ARC-ification, delegates are now held with weak references, hence, you should keep a strong reference of delegates passed to the SDK library, or they will be released immediately and their methods will not be invoked. COMPATIBILITY NOTE: If your code does not keep a strong reference of delegates passed to the library, it should be revised. Moreover, if your app is not developed with ARC, it is necessary to add "-fobjc-arc" to Other Linker Flags under the app's Build Settings, or you may encounter linking errors.

Minimum macOS version supported is now 10.7 (Lion), up from 10.6 (Snow Leopard). This is required by ARC.

It is now required that the Security framework is included in the dependencies of the project. COMPATIBILITY NOTE: if your project does not include the Security framework you will see linking errors during the build process. Adding the framework will solve the errors.

Added support for Mobile Push Notifications. The LSClient now provides methods to activate special MPN subscriptions that will be delivered via mobile push (i.e. remote) notifications. An MPN subscription is backed by a real-time subscription, from which it may take any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent: they survive the session and are identified by a permanent, global, unique key provided by the APIs at time of activation. Mobile Push Notifications carry common macOS remote notification information, like an icon badge, but additionally may carry user-defined data at the benefit of the application.
See the interface documentation for details.
However, support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Added an alternative version of some methods to offer an error handling pattern that better fits Cocoa. Now, for every method that may throw an exception in presence of a runtime error, a corresponding non-exception-throwing version is provided. This alternative method has always the same name, semantics, return value and parameters, except for an additional NSError output parameter that may be used (if not nil) to store a runtime error. Note that exceptions due to programming errors (such as use of invalid field names, wrong API call sequence, etc.) may still be thrown. See the API reference home page for an example.

Added new LSPushClientException, thrown in case passed parameters are invalid or conflicting. Previously, a generic LSException was thrown, with a varying exception name property. COMPATIBILITY NOTE: Existing code depending on the LSException class or on the exception name property should be revised. Generic LSException is never thrown now, but remains as a base class of all specific exceptions.

Modified the LSTableInfo class to allow the setter methods to throw a LSPushClientException. This is needed to support the creation of unmodifiable instances, as needed by the new MPN support. COMPATIBILITY NOTE: Existing code is not affected, as only unmodifiable instance can throw the exception and such instances are only returned by the newly introduced LSMPNSubscription class.

Fixed the documentation of the LSExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Improved the reconnection mechanism: if a connection error is detected within an existing valid session, a reconnection attempt is tried after a short randomized interval that can be configured with the new parameter LSConnectionInfo.firstRetryMaxDelaySecs. Moreover, subsequent connection retries now consider the delay specified by LSConnectionInfo.retryDelaySecs as part of an elapsed timeout. This avoids an additional delays if a longer timeout has expired. If a connection retry fails immediately, instead, the delay specified by LSConnectionInfo.retryDelaySecs is applied.

Fixed unsubscription APIs: now an active connection is no more needed, they will unsubscribe the table whether the Client is connected or not. In certain cases a zombie subscription may remain on Lightstreamer Server.

Fixed bug that caused rounding of requested max frequency when changing constraints on an existing table subscription.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

1.0.4 build 4.21
Compatible with Lightstreamer Server since 5.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 22 Jul 2014

Decoupled the session thread from the notification of connection events and asynchronous message events. Previous risks of deadlock by closing the connection during a connection event are now avoided. API docs have been updated to reflect the change.COMPATIBILITY NOTE: Existing code using background threads to call closeConnection during a connection event will continue to work. Anyway, consider that connection events may now be called with a short delay, and represent a connection status that may have changed in the meantime.

Improved enforcement of network timeouts. Now the SDK library is able to detect stalled network operations also for control connections. When this happens it cancels the operation to avoid keeping the Client blocked indefinitely.

Improved connection check on synchronous and asynchronous send message. Clarified asynchronous send message API docs.

Fixed a race condition that, upon concurrent invocations of openConnection, could have caused some of these invocations to be aborted but to return with no exception.

Fixed bug that was sending exceptions caught while sending asynchronous messages to the connection delegate instead of the message delegate.

Fixed bug that could lead to hang during connection closure, when called under network instability.

Fixed bug with the policy for ConcurrentSessionsPerServer exceeding: the "none" policy was not obeyed and the "block" policy was used instead.
Changed the default policy from "none" to "block". COMPATIBILITY NOTE: Existing code leaning on the default to be "none" should now explicitly set this policy. Code trusting the SDK library default, due to the aforementioned bug, won't experience any change. Changed the ConcurrentSessionsPerServer setting interpretation, in order to clarify its meaning: previously it was referring to "maximum number of HTTP connections for each distinct server address", with a default of 3, which would translate to 2 maximum streaming sessions per server address (as 1 connection was always kept as spare for control connections). Now it correctly refers to "streaming connections", and the new default is 2. COMPATIBILITY NOTE: Existing code that performs the setting will now allow one more session, unless changed accordingly.

Added use of "no-cache" HTTP headers for better traversal of network operators' transparent proxies.

Fixed missing check for client connection during synchronous and asynchronous message send. Improved asynchronous message send API docs.

Fixed wrong log category for some messages of LSThreadPool class.

1.0.3 build 4.12
Compatible with Lightstreamer Server since 5.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 Mar 2014

Added new LSConnectionStatusConnecting value for LSConnectionStatus. This value reports when the Client is currently trying to connect (or reconnect after a connection drop). This case was previously included in the LSConnectionStatusDisconnected status. COMPATIBILITY NOTE: Existing code leveraging the LSConnectionStatus value should be checked.

Fixed bug that could cause a subscription or a batch to be sent to Lightstreamer Server even when the connection procedure was not fully completed. The Client now correctly raises an exception saying the Client is not connected.

Fixed bug that could lead to automatic resubscription of tables used on a previous session that has since been forcibly closed by Lightstreamer Server.

Fixed bug that was causing the isSnapshot flag to be NO for snapshot events after an automatic resubscription

Fixed bug that could lead to missing table resubscription after automatic reconnection if a closeConnection was called in the meantime

Fixed bug that could lead to unexpectedly long stall detection time.

Fixed bug that could cause a crash while closing the connection under some rare conditions.

1.0.2 build 4.8
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2013

Discontinued the invocation of Event clientConnection:didReceiveConnectionFailure: during the stream-sensing phase of the connection for benign timeout conditions. Now, when the Client connects, this event will no longer be received until a full Stream-sense cycle has been completed. COMPATIBILITY NOTE: Existing code handling this Event to recover connection issues may behave differently, but those issues will be handled by Lightstreamer Stream-sense mechanism, which should be desirable.

Discontinued all the invocations of Event clientConnection:didStartSessionWithPolling: upon session rebind; hence, the event is now called just once per each session, at session establishment, aligning OS X (now macOS) Client SDK behavior to other Client SDKs. Note that this affects also streaming sessions, on content length exhaustion. COMPATIBILITY NOTE: Existing code depending of these notifications may behave differently; the clientConnectionDidEstablish: Event can be used instead.

Added support for TLS/SSL authentication challenge through a new (optional) LSConnectionDelegate event. The new event is named clientConnection:willSendRequestForAuthenticationChallenge: and reflects the equivalent delegate call of NSURLConnectionDelegate. See the event documentation for more information.

Fixed typo in method signature for end-of-snapshot event in LSTableDelegate. The new name is didEndSnapshotForItemPosition. COMPATIBILITY NOTE: A workaround is in place to let code developed with the previous releases to continue working without modifications. See table:didEndSnapshotForItemPosition:itemName: for more information.

Improved batch mode: now the Client will automatically split the batch in more chunks if its size should be more than the configured <request_limit> on Lightstreamer Server.

Fixed bugs related to special subscription cases: unfiltered dispatching, unlimited buffer size and distinct snapshot length were not passed appropriately under certain conditions.

Fixed bug related to conversion of Unicode characters at end of string.

Fixed bug related to protocol handling of # and $ characters at the beginning of a field value. The bug was causing a repeated # or $ character if the field value was beginning with one of these two characters.

Improved the included StockList Demo: clarified life cycle of connection events in the source code.

Clarified the license terms for the included example source code.

1.0.1 build 4.1
Compatible with Lightstreamer Server since 5.0.
Released on 9 Oct 2013

Included in Lightstreamer distribution.
The included library is very similar to that for the iOS Client SDK 1.2.2 build 74.2.

SDK for macOS Clients (Unified API Version)

Check for newer versions of Lightstreamer_macOS_Client on CocoaPods.

2.1.2 build 43
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 17 Jan 2017

Added the new setting limitExceptionsUse in LSLightstreamerClient to avoid throwing an exception when certain methods are called with an invalid parameter. E.g. valueWithFieldName: in LSItemUpdate and valueWithItemName:fieldName: in LSSubscription both obey to this new setting. See API docs for more information.

Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

Moved the LIB_NAME and LIB_VERSION methods of LSLightstreamerClient to class properties. They can now be accessed with the dot notation. Previous class methods remain available.

2.1.1 build 41
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 6 Jan 2017

Fixed a bug on the implementation of disconnect, whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.

Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.

Revised the default setting for the contentLength property of LSConnectionOptions, to allow the library to set it to the best value.

2.1.0 build 40
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 25 Nov 2016

Renamed the SDK from "SDK for OS X Clients (Unified API Version)" to follow the renaming of the operating system.
References to "OS X" or "Mac OS X" now changed to "macOS".

Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit the number of sessions that can be concurrently open to the same Server. New properties are: maxConcurrentSessionsPerServer (a class property) and maxConcurrentSessionsPerServerExceededPolicy. See docs for more information.

Added new event to LSClientDelegate to respond to an authentication challenge raised during network connection. New event is client:willSendRequestForAuthenticationChallenge:. See docs for more information.

Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.

Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.

Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.

Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos: on LSSubscriptionDelegate, which is only predisposed.

The client library is now distributed as a framework.

Raised the minimum macOS version requirements to 10.9.

2.0.1 build 33
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 26 Aug 2016

Fixed a memory leak that could become significant with intense update activity.

Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.

Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.

2.0.0 build 28
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 8 Apr 2016

Included in Lightstreamer distribution package. See "sdk_client_os_x_unified" (now sdk_client_macos_unified).

Added bitcode support.

Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.

Event client:didChangeProperty: now reports correct client property names, e.g. "pollingTimeout" instead of "pollingMillis".

Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.

Prevented reconnection attempts upon wrong answers from the Server.

Fixed an error in the log of the keepalive interval setting.

Fixed the documentation of client:didReceiveServerError:withMessage: and client:didChangeStatus:, to specify that the former is always preceded, not followed, by the latter with DISCONNECTED.

2.0 a5 build 22
Compatible with Lightstreamer Server since 6.0.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 17 Nov 2015

Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.

2.0 a4 build 16
Compatible with Lightstreamer Server since 6.0.1
Made available as a prerelease on 7 Oct 2015

Introduced as an improved alternative to the SDK for OS X (now macOS) clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.

SDK for tvOS Clients (Unified API)

Check for newer versions of Lightstreamer_tvOS_Client on CocoaPods.

2.1.2 build 22
Compatible with Lightstreamer Server since 6.0.2
Compatible with code developed with the previous version.
Released on 17 Jan 2017

Added the new setting limitExceptionsUse in LSLightstreamerClient to avoid throwing an exception when certain methods are called with an invalid parameter. E.g. valueWithFieldName: in LSItemUpdate and valueWithItemName:fieldName: in LSSubscription both obey to this new setting. See API docs for more information.

Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

Moved the LIB_NAME and LIB_VERSION methods of LSLightstreamerClient to class properties. They can now be accessed with the dot notation. Previous class methods remain available.

2.1.1 build 20
Compatible with Lightstreamer Server since 6.0.2
Compatible with code developed with the previous version.
Released on 6 Jan 2017

Fixed a bug on the implementation of disconnect, whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.

Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.

Revised the default setting for the contentLength property of LSConnectionOptions, to allow the library to set it to the best value.

2.1.0 build 19
Compatible with Lightstreamer Server since 6.0.2
Compatible with code developed with the previous version.
Released on 25 Nov 2016
Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit the number of sessions that can be concurrently open to the same Server. New properties are: maxConcurrentSessionsPerServer (a class property) and maxConcurrentSessionsPerServerExceededPolicy. See docs for more information.

Added new event to LSClientDelegate to respond to an authentication challenge raised during network connection. New event is client:willSendRequestForAuthenticationChallenge:. See docs for more information.

Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.

Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.

Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.

Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos: on LSSubscriptionDelegate, which is only predisposed.

The client library is now distributed as a framework.

Fixed the Server compatibility note for version 2.0.1 in this changelog, which was mistakenly brought back to 6.0.1.

2.0.1 build 12
Compatible with Lightstreamer Server since 6.0.2
Compatible with code developed with the previous version.
Released on 26 Aug 2016

Fixed a memory leak that could become significant with intense update activity.

Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.

Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.

2.0.0 build 7
Compatible with Lightstreamer Server since 6.0.2
Released on 8 Apr 2016

Included in Lightstreamer distribution.
The included library is very similar to that for the iOS Client SDK (Unified API Version) 2.0.0 build 33.
See "sdk_client_tvos_unified".

SDK for Android Clients
1.2 build 40.2
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Fixed the Javadocs, by removing private class MpnSubscriptionInfo.
Revised javadoc formatting style.

1.2 build 40
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

Added support for Mobile Push Notifications. The LSClient now provides methods to activate special MPN subscriptions that will be delivered via mobile push notifications (i.e. cloud messages). An MPN subscription is backed by a real-time subscription, from which it may take any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent: they survive the session and are identified by a permanent, global, unique key provided by the APIs at time of activation. Mobile Push Notifications carry common GCM cloud message information, like a collapse key and custom data in the form of key-value pairs.
See the class documentation for details.
However, the support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

As part of the support for Mobile Push Notifications, extended the SimpleTableInfo bean with a "getAdapterSet" method. This is only related to MPN inquiry requests and it should be ignored in other contexts.

Introduced configurable timeouts on socket connection and read operations. See the documentation of openConnection for details.

Fixed a bug that could have prevented the natural termination of the process when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate naturally, without invoking the application's OnClose (which, instead, should have been given an opportunity to prevent termination).

Discontinued the raise of exceptions upon session close when the close occurs during the execution of an unsubscription request; in this case, it is guaranteed that the unsubscription is being performed on Lightstreamer Server.

Fixed the documentation of "onUnsubscrAll" in HandyTableListener, which is not meant to be invoked in some cases.

Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Discontinued the compatibility with Android versions prior to 2.3.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

1.0.2 build 23
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 19 Feb 2014

Fixed some spurious "Discarded unknown property" log messages in the connection phase.

Fixed a few typos in the Javadocs.

Ported the included example to a newer version of Android Client SDK.

Clarified the license terms for the included example source code.

1.0.2 build 19
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 3 Aug 2012

Regenerated the API documentation with the newest JDK default template.

Discontinued the compatibility with the previous version of Lightstreamer Server.

1.0.2 build 18
Compatible with Lightstreamer Server since 4.1.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Introduced the changeSubscription method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription; this also introduces a new error code in PushServerException.

Fixed the handling of mocked calls to unsubscribeTable when a batch is in place.

Fixed a bug which prevented the forceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.

1.0.1 build 17
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Introduced the new ExtendedConnectionListener interface that extends the still available ConnectionListener. When the new interface is implemented, the new onSessionStarted overload is invoked carrying extra information about the current server host, which, however, is not useful for the Moderato case.

1.0 build 12
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.

Fixed a compatibility issue for Android version 2.2 and earlier that was introduced in build 10. The issue would give rise to an unresolved method exception upon a connection attempt, but, in turn, it was only triggered by an unchecked exception thrown by the underlying I/O library.
Extended the scope of the PushConnException to wrap any Throwable, whereas before it only used to wrap IOExceptions. COMPATIBILITY NOTE: existing clients were already not supposed to expect PushConnException to only wrap IOExceptions.

1.0 build 11
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Dec 2011

Improved the checks on unexpected issues during I/O operations.

1.0 build 10
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.

Improved the robustness against unexpected issues during I/O operations.

Suppressed warnings about BufferedReader usage in the JVM log.

1.0 build 8
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Android Clients (Unified API Version)

Check for newer versions online.

3.0.0 build 97
Compatible with Lightstreamer Server since 6.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Jan 2017

Introduced the use of WebSockets both for streaming and for subscription and client message requests, which brings an overall performance improvement.
As a consequence, setForcedTransport now also supports the "WS", "WS-STREAMING", and "WS-POLLING" values and the predisposed setEarlyWSOpenEnabled method is now effective.

Modified the name of the library made available via Maven. Now, ls-android-client should be referred in place of ls-android-client-compact. However, the latter is still available as an alternative "compact" version of the library. In fact, the memory footprint of the library, when including its dependencies, has increased significantly, whereas the "compact" version has not grown, but it does not include WebSocket support.

Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.

Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to onRealMaxFrequency to the custom listener would cause an exception that would be caught internally.

Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).

Completed the implementation of methods whose implementation was only partial. This regards:

  • setFieldSchema in Subscription now also working for COMMAND mode subscriptions;
  • setSlowingEnabled in ConnectionOptions now working if true is supplied;
  • onClearSnapshot in the SubscriptionListener now invoked as expected.

Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

Fixed a bug on the implementation of disconnect(), whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument; negative values will now be accepted to mean that the Server default timeout is to be used. COMPATIBILITY NOTE: Existing code using the 5-argument version of sendMessage and supplying 0 as "delayTimeout" must be modified to use -1 instead. Invocations to the 1-argument version don't have to be modified.

Added new error codes 66 and 68 to onServerError, onSubscriptionError, and onSecondLevelSubscriptionError, to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to onServerError documentation; this error reports server-side licensing limitations.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError documentation; when a subscription request cannot find the session, the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.

Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.

Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.

Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.

Improved the management of setHttpExtraHeadersOnSessionCreationOnly, when true. Previously, the extra headers (supplied with setHttpExtraHeaders) were still sent, redundantly, on control requests.

Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.

Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.

Improved the documentation of various methods in regard to the special case of two-level subscriptions.
Detailed the documentation of the various property getters and setters in regard to the possible values.

Improved the Javadocs, by shortening the concise descriptions of some classes and methods.

2.0.4 build 94.1
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 23 Nov 2016

Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.

2.0.3 build 94
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 14 Nov 2016

Fixed a bug which could have caused onSubscriptionError and onCommandSecondLevelSubscriptionError to report wrong error codes, that is, codes different from the documented ones.

Fixed the documentation of onClearSnapshot, which is only predisposed.

2.0.2 build 92
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 30 Aug 2016

Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.

2.0.1 build 88
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 22 Jul 2016

Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.

2.0.0 build 87
Compatible with Lightstreamer Server since 6.0.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 May 2016

As moved to final, renamed the internal folder from "sdk_client_android_alpha" to "sdk_client_android_unified".

Changed the names of some properties in the ConnectionOptions bean. To resume:

  • keepaliveMillis has become keepaliveInterval
  • idleMillis has become idleTimeout
  • pollingMillis has become pollingInterval
  • reverseHeartbeatMillis has become reverseHeartbeatInterval

This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using any of the mentioned properties has to be ported and any related binaries have to be recompiled.

Fixed potential NullPointerException which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.

Changed the type and behavior of the getConnectTimeout/setConnectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value.

To check and or modify the current value, a new CurrentConnectTimeout property, with its getter/setter pair in ConnectionOptions, is exposed. COMPATIBILITY NOTE: if the setConnectTimeout method is called by the client code, the given parameter must be modified to be a String. If the getConnectTimeout method is called by the client code its receiving variable must be converted to a String; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.

Prevented reconnection attempts upon wrong answers from the Server.

Fixed an error in the log of the keepalive interval setting.

Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.

Revised javadoc formatting style and fixed various typos in the javadocs.

2.0 a2 build 74
Compatible with Lightstreamer Server since 6.0.1.
May not be compatible with code developed with the previous version; see compatibility notes below.

Resorted to an external package for the log support. COMPATIBILITY NOTE: Custom code using the LoggerProvider interface should be revised, based on the new documentation; see setLoggerProvider.

Improved the handling of long polling.

Added missing documentation of setProxy in ConnectionOptions.

2.0 a1 build 66
Compatible with Lightstreamer Server since 6.0.1.
Made available as a prerelease on 16 Jul 2015

Introduced as an improved alternative to the SDK for Android Clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.
see "sdk_client_android_alpha".

SDK for BlackBerry Clients
1.1.2 build 16
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Revised javadoc formatting style; also fixed links and missing fields in the javadocs.

1.1.2 build 15
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

In BlackBerry 7 SDK, fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

In BlackBerry 7 SDK, introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

1.1.1 build 10
Compatible with Server since 5.0.
Compatible with code developed with the previous version.
Released on 22 Jul 2014

In BlackBerry 7 SDK, clarified the license terms for the included example source code.

1.1.1 build 10
Compatible with Server since 5.0.
Compatible with code developed with the previous version.
Released on 19 Feb 2014

Improved the included example of BlackBerry 10 integration based on Adobe AIR.

Updated the included examples of BlackBerry 10 integration, to lean on the new versions of Lightstreamer Flex and JavaScript SDKs. Note that, only to run the JavaScript example, the new version of the Server is needed.

1.1.1 build 10
Compatible with Server since 5.0.
Compatible with code developed with the previous version.
Released on 9 Oct 2013

Introduced the support for BlackBerry 10, by adding the sdk_client_blackberry10 subfolder. The current SDK has been moved to the sdk_client_blackberry7 subfolder and has been left unchanged; it can only be used up to BlackBerry 7 (i.e. BlackBerry OS). For BlackBerry 10 no dedicated libraries are needed and examples of how to achieve integration by leveraging other SDKs are shown.

1.1.1 build 10
Compatible with Server since 5.0.
Compatible with code developed with the previous version.
Released on 3 Aug 2012

Introduced the reverse heartbeat mechanism. Introduced the new method LSClient.setReverseHeartbeatMillis method to configure it and LSClient.getReverseHeartbeatMillis to test it.

Changed the return type of the ConnectionProvider clone method from ConnectionProvider to Object. COMPATIBILITY NOTE: if a custom ConnectionProvider was implemented the return value of its clone method must be changed; on the other hand the implementation of the method does not need any change. Note that the included demo has been changed accordingly.

Regenerated the API documentation with the newest JDK default template.

1.0.1 build 6.3
Compatible with Server since 4.1.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Introduced the setMaxFrequency and setFrequencyUnlimited methods, which allow for modification of the maximum frequency settings for currently subscribed items; unless in single connection mode, the changes will take place immediately, with no need for a resubscription.
Extended the sample code to demonstrate the use of the new methods.

1.0 build 6.2
Compatible with Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Changed the default for the setIdleTimeout method of the ConnectionPolicy class from 30000 to 19000 ms.

Fixed a bug that sometimes caused HandyTableListener instances to receive updates carrying the wrong old values.

1.0 build 5
Compatible with Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Java ME Clients
3.2.2 build 156
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Revised javadoc formatting style; also fixed links and missing fields in the javadocs.

3.2.2 build 155
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

3.2.1 build 150
Compatible with Lightstreamer Server since 5.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 3 Aug 2012

Introduced the reverse heartbeat mechanism. Introduced the new LSClient.setReverseHeartbeatMillis method to configure it and LSClient.getReverseHeartbeatMillis to test it.

Changed the return type of the ConnectionProvider clone method from ConnectionProvider to Object. COMPATIBILITY NOTE: if a custom ConnectionProvider was implemented the return value of its clone method must be changed; on the other hand the implementation of the method does not need any change.

Regenerated the API documentation with the newest JDK default template.

3.1.1 build 146.4
Compatible with Lightstreamer Server since 4.1.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Introduced the setMaxFrequency and setFrequencyUnlimited methods, which allow for modification of the maximum frequency settings for currently subscribed items; unless in single connection mode, the changes will take place immediately, with no need for a resubscription.
Extended the sample code to demonstrate the use of the new methods.

3.1 build 146.2
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Changed the default for the setIdleTimeout method of the ConnectionPolicy class from 30000 to 19000 ms.

Fixed a bug that sometimes caused HandyTableListener instances to receive updates carrying the wrong old values.

3.1 build 145
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Java SE Clients
2.5.3 build 1133.2
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 10 May 2016

Revised javadoc formatting style; also fixed missing fields in the javadocs.

2.5.3 build 1133
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 21 Jan 2015

Fixed a bug that could have prevented the natural termination of the process when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate naturally, without invoking the application's OnClose (which, instead, should have been given an opportunity to prevent termination).

Discontinued the raise of exceptions upon session close when the close occurs during the execution of an unsubscription request; in this case, it is guaranteed that the unsubscription is being performed on Lightstreamer Server.

Fixed the documentation of "onUnsubscrAll" in HandyTableListener (LSClient interface), which is not meant to be invoked in some cases.

Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.

Clarified in the docs how timeouts on socket connection and read operations can be configured.

Fixed the docs for the ProxyInfo class (LSProxy interface), to state that the default for the onFailedConnectionRetry property is true.

Introduced the support for the new client identification mechanism.

Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.

2.5.2 build 1117
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 19 Feb 2014

Improved the included test source code to demonstrate showing the session close cause code.

Fixed some spurious "Discarded unknown property" log messages in the connection phase.

Fixed a few typos in the Javadocs.

Clarified the license terms for the included example source code.

Improved the support of the Load Test Toolkit for tests in SSL.

2.5.2 build 1110
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2012

Fixed a bug introduced in version 2.5.1 which affected the "lsproxy" interface.

Ensured the compatibility with the new Load Test Toolkit for Lightstreamer Colosseo.

2.5.2 build 1108
Compatible with Lightstreamer Server since 5.0.
Compatible with code developed with the previous version.
Released on 3 Aug 2012

Regenerated the API documentation with the newest JDK default template.

Discontinued the compatibility with the previous version of Lightstreamer Server.

2.5.2 build 1107
Compatible with Lightstreamer Server since 4.1.
Compatible with code developed with the previous version.
Released on 9 Aug 2012

Introduced the changeSubscription method (LSClient interface), which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription; this also introduces a new error code in PushServerException.
Extended the sample code to demonstrate the use of changeSubscription.

Fixed the handling of mocked calls to unsubscribeTable when a batch is in place.

Fixed a bug which prevented the forceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.

2.5.1 build 1105
Compatible with Lightstreamer Server since 4.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2012

Introduced the new ExtendedConnectionListener interface that extends the still available ConnectionListener. When the new interface is implemented, the new onSessionStarted overload is invoked carrying extra information about the current server host. , which, however, is not useful for the Moderato case.

Improved the robustness against unexpected issues during I/O operations.
Extended the scope of the PushConnException to wrap any Throwable, whereas before it only used to wrap IOExceptions. COMPATIBILITY NOTE: existing clients were already not supposed to expect PushConnException to only wrap IOExceptions.

2.5 build 1103
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).

SDK for Java SE Clients (Unified API Version)

Check for newer versions online.

4.0.0 build 1282
Compatible with Lightstreamer Server since 6.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Jan 2017

Introduced the use of WebSockets both for streaming and for subscription and client message requests, which brings an overall performance improvement.
As a consequence, setForcedTransport now also supports the "WS", "WS-STREAMING", and "WS-POLLING" values and the predisposed setEarlyWSOpenEnabled method is now effective.

Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.

Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to onRealMaxFrequency to the custom listener would cause an exception that would be caught internally.

Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).

Completed the implementation of methods whose implementation was only partial. This regards:

  • setFieldSchema in Subscription now also working for COMMAND mode subscriptions;
  • setSlowingEnabled in ConnectionOptions now working if true is supplied;
  • onClearSnapshot in the SubscriptionListener now invoked as expected.

Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

Fixed a bug which could have caused unexpected short blocks in the case of synchronous polling mode

Fixed a bug on the implementation of disconnect(), whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument; negative values will now be accepted to mean that the Server default timeout is to be used. COMPATIBILITY NOTE: Existing code using the 5-argument version of sendMessage and supplying 0 as "delayTimeout" must be modified to use -1 instead. Invocations to the 1-argument version don't have to be modified.

Added new error codes 66 and 68 to onServerError, onSubscriptionError, and onSecondLevelSubscriptionError, to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to onServerError documentation; this error reports server-side licensing limitations.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError documentation; when a subscription request cannot find the session, the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.

Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.

Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.

Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.

Improved the management of setHttpExtraHeadersOnSessionCreationOnly, when true. Previously, the extra headers (supplied with setHttpExtraHeaders) were still sent, redundantly, on control requests.

Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.

Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.

Improved the documentation of various methods in regard to the special case of two-level subscriptions.
Detailed the documentation of the various property getters and setters in regard to the possible values.

Improved the Javadocs, by shortening the concise descriptions of some classes and methods.

3.1.4 build 1278.3
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 23 Nov 2016

Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.

3.1.3 build 1278
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 14 Nov 2016

Fixed a bug which could have caused onSubscriptionError and onCommandSecondLevelSubscriptionError to report wrong error codes, that is, codes different from the documented ones.

Fixed the documentation of onClearSnapshot, which is only predisposed.

Fixed the included README.TXT, that contained an obsolete note about the library not being ready for production. Only releases explicitly versioned as beta are not ready for production.

3.1.2 build 1274
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 30 Aug 2016

Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.

3.1.1 build 1270
Compatible with Lightstreamer Server since 6.0.1.
Compatible with code developed with the previous version.
Released on 22 Jul 2016

Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.

3.1.0 build 1269
Compatible with Lightstreamer Server since 6.0.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 10 May 2016

As moved to final, renamed the internal folder from "sdk_client_java_se_beta" to "sdk_client_java_se_unified".

Changed the names of some properties in the ConnectionOptions bean. To resume:

  • keepaliveMillis has become keepaliveInterval
  • idleMillis has become idleTimeout
  • pollingMillis has become pollingInterval
  • reverseHeartbeatMillis has become reverseHeartbeatInterval

This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using any of the mentioned properties has to be ported and any related binaries have to be recompiled.

Added logging messages (at ERROR level) for those cases in which runtime exceptions could be thrown while running some asynchronus code paths.

Fixed potential NullPointerException which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.

Fixed an error in the log of the keepalive interval setting.

Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.

Revised javadoc formatting style and fixed various typos in the javadocs.

Updated the versions of some external libraries which the SDK depends upon.

3.0 build 1265.1
Compatible with Lightstreamer Server since 6.0.1
May not be compatible with code developed with the previous version; see compatibility notes below.

Changed the type and behavior of the getConnectTimeout/setConnectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value.

To check and or modify the current value, a new CurrentConnectTimeout property, with its getter/setter pair in ConnectionOptions, is exposed. COMPATIBILITY NOTE: if the setConnectTimeout method is called by the client code, the given parameter must be modified to be a String. If the getConnectTimeout method is called by the client code its receiving variable must be converted to a String; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.

Added the new method disconnectFuture to the LigtstreamerClient class, with the purpose to provide a notification when all threads started by all LightstreamerClient instances living in the JVM have been terminated, because no more activities need to be managed and hence event dispatching is no longer necessary.
Such method is especially useful in those environments which require an appropriate resource management, like "full" Java EE application servers or even the simpler Servlet Containers. The method should be used in replacement of disconnect() in all those circumstances where it is indispensable to guarantee a complete shutdown of all user threads, in order to avoid potential memory leaks and waste resources.
See the docs for further details about the proper usage pattern for this method.

Prevented reconnection attempts upon wrong answers from the Server.

3.0 b2 build 1261
Compatible with Lightstreamer Server since 6.0.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 6 Oct 2015

Resorted to an external package for the log support. COMPATIBILITY NOTE: Custom code using the LoggerProvider interface should be revised, based on the new documentation; see setLoggerProvider.

Introduced the possibility to override the library-set HTTP headers through the ConnectionOptions.setHttpExtraHeaders method (previously it was the other way round).

Improved the handling of long polling.

Added missing documentation of setProxy in ConnectionOptions.

3.0 b1 build 1253
Compatible with Lightstreamer Server since 6.0.1.
Made available as a prerelease on 16 Jul 2015

Introduced as an improved alternative to the SDK for Java SE Clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.
see "sdk_client_java_se_beta".

SDK for .NET PCL Clients

Check for newer versions on NuGet.

3.0.0 build 1050
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous versions.
Released on 23 Jan 2017

Introduced the new .NET PCL (Portable Class Libraries) SDK. See the "sdk_client_pcl" folder.
This SDK is intended as a replacement for the old:

  • SDK for .NET Clients
  • SDK for WinRT Clients
  • SDK for Windows Phone Clients

COMPATIBILITY NOTE: The Portable Class Library dll included in this SDK targets the following platforms:

  • .NET Framework 4.5 and higher
  • Windows Phone Silverlight 8 and higher
  • Windows Store Apps 8 and higher
  • ASP.NET Core 1.0

If the target of your application is an older framework, you should revert to the older Client libraries.

SDK for Generic Clients
2.0.0 build 1809
Compatible with Server since 6.1.
Not compatible with custom clients for the previous version.
Released on 23 Jan 2017

Thoroughly redesigned the protocol, mainly on the response side. The new protocol, named TLCP, helps achieving various improvements, such as the following:

  • full support for WebSockets, as transport for both streaming and control requests;
  • protocol versioning;
  • notification of successful subscriptions and unsubscriptions within the update flow;
  • detailed error messages also for syntax errors;
  • support for independent execution of the requests in a batch;
  • notification of the bandwidth and frequency constraints applied by the Server;
  • notification of subscription metadata determined by the Server;
  • full support for Adapter's ClearSnapshot requests;
  • discontinuation of the use of zero values to carry special meanings, in both requests and responses;
  • notification of server-side timestamps, to allow for detection of data transport delays;
  • notification of server-side client IP, to allow for detection of changes in connection routing;
  • support for subscription requests embedded in session opening requests;
  • injection of custom cause messages in session destroy requests.

See the included documentation for any details.
Any custom clients based on the previous versions of the protocol are still supported by Lightstreamer Server.

Redefined the SDK version, which is now 2.0.0 and also represents the version of the underlying TLCP protocol. It is meant that any explicit or implicit reference to the "previous" versions of the SDK may include version 6.0.3 or earlier. The supplied build number is still increasing and can be used to disambiguate.

6.0.3 build 1803
Compatible with Server since 6.0.3.
Compatible with custom clients for the previous version.
Released on 5 Sep 2016

Restricted the syntax checks on the requests, so that some illegal cases that used to be accepted are now refused. For instance, negative numeric values were, in some cases, treated like missing values and replaced with defaults. COMPATIBILITY NOTE: No client is expected to fall into the above illegal cases.

6.0.2 build 1794
Compatible with Server since 6.0.2.
Compatible with custom clients for the previous version.
Released on 10 May 2016

Added the LS_cause_code parameter to LS_op=destroy requests. The supplied codes will now be possible cause codes of the "END" message. COMPATIBILITY NOTE: The newly available codes are not to be expected from the "END" message, unless extended invocations of LS_op=destroy requests are introduced.

Clarified the use of the Control Link in the protocol documentation.

6.0.1 build 1747
Compatible with Lightstreamer Server since 6.0.
Compatible with custom clients for the previous version.
Released on 16 Jul 2015
6.0.1 build 1738
Compatible with Lightstreamer Server since 6.0.
Compatible with custom clients for the previous version.
Released on 13 Feb 2015

Added the cause code 48 upon the "END" message (asynchronous close). COMPATIBILITY NOTE: The code can be issued only if the new <max_session_duration_minutes> setting (introduced with Lightstreamer Server build 1741) is used, hence custom clients don't have to be updated to take the code into account, as long as the Server configuration is not changed.

6.0 build 1734
Compatible with Lightstreamer Server since 6.0.
Not compatible with custom clients for the previous version; see compatibility notes below.
Released on 21 Jan 2015

Extended the protocol to support the new client identification mechanism. See the added parameters for the "create_session.txt" request. COMPATIBILITY NOTE: Existing clients have to be extended with the new parameters in order to comply with the current and future versions of the protocol; however, Lightstreamer Server always guarantees the support for old clients.

Added the error code 30 upon control.txt; the case is only predisposed for future special licenses.COMPATIBILITY NOTE: custom clients which check the possible error outcomes don't have to be updated, as long as there is no change in license terms.

Removed the error code 14 upon create_session/bind_session, as it is no longer issued. The check was related with the use in custom clients of the Adapter Set used by the Monitor Console/Dashboard, which is an undocumented (and unneeded) option.

Fixed a clarification comment on the protocol documentation: the single quote is expected to be escaped in field values, not the double quote.

Updated the included examples, to reflect changes in Lightstreamer Server default configuration and predeployed Adapters.

5.1.2 build 1623.14
Compatible with Lightstreamer Server since 5.0.
May not be compatible with custom clients for the previous version; see compatibility notes below.
Released on 22 Jul 2014

Extended the syntax with the "Preamble" element in the response header, which may be used in specific cases for padding purpose only. COMPATIBILITY NOTE: existing custom clients that perform strict checks on the response headers may refuse the response and eventually fail to establish a session, hence they should be extended. Backward compatibility can be enforced by removing the new <use_enriched_content_type> configuration setting.

5.1.1 build 1623.2
Compatible with Lightstreamer Server since 5.0.
Compatible with custom clients for the previous version.
Released on 5 Mar 2013

Clarified the requirements on the URL encoding of the request attributes.

5.1.1 build 1623.2
Compatible with Lightstreamer Server since 5.0.
Compatible with custom clients for the previous version.
Released on 31 Jan 2013
5.1.1 build 1623
Compatible with Lightstreamer Server since 5.0.
Compatible with custom clients for the previous version.
Released on 10 Jan 2013

Clarified the encoding of values in regard to UTF-16 surrogate pairs.

5.1 build 1622
Compatible with Lightstreamer Server since 5.0.
Compatible with custom clients for the previous version.
Released on 20 Dec 2012
5.0 build 1576
Compatible with Lightstreamer Server since 5.0.
May not be compatible with custom clients for the previous version; see compatibility notes below.
Released on 3 Aug 2012

Added new possible error codes, namely 7 and 8, pertaining to both the bind_session.txt request and the END push message. COMPATIBILITY NOTE: custom clients which check the possible error outcomes may have to be revised. However, the new errors are only possible when limits on the maximum number of sessions are set, either through the <max_sessions> settings or through the JMX service or by special licenses.

Introduced a 3-decimal approximation for the reported bandwidth limit values.

Slightly revised che checks for wrong requests and the related log messages issued by Lightstreamer Server.

Revised the documentation, in regard to the names of the main concepts.

4.1 build 1513.1.14
Compatible with Lightstreamer Server since 4.1.
Compatible with custom clients for the previous version.
Released on 9 Aug 2012
4.1 build 1513.1.12
Compatible with Lightstreamer Server since 4.1.
Compatible with custom clients for the previous version.

Introduced the "reconf" operation, which allows for dinamically reconfiguring the maximum frequency of currently subscribed items; see the Network Protocol Tutorial document for details.

4.0.3 build 1513.1.11
Compatible with Lightstreamer Server since 4.0.
Compatible with custom clients for the previous version.
Released on 6 Apr 2012
4.0.2 build 1513.1.8
Compatible with Lightstreamer Server since 4.0.
Compatible with custom clients for the previous version.
Released on 6 Dec 2011
4.0.1 build 1513.1.3
Compatible with Lightstreamer Server since 4.0.
Compatible with custom clients for the previous version.
Released on 20 Jul 2011
4.0 build 1513.1.1
Compatible with Lightstreamer Server since 4.0.
Compatible with custom clients for the previous version.
Released on 8 Jul 2011
4.0 build 1513
Compatible with Lightstreamer Server since 4.0.
Released on 7 Jun 2011

Introduction of Lightstreamer "Duomo" release (Server 4.0).