LIGHTSTREAMER CHANGELOG
Server: Adapters: Clients:
Lightstreamer Server
7.0.1 build 1885
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 14 Jun 2018

Introduced various improvements on the support for client https connections (see the <https_server> configuration block).

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

Fixed a bug that, under conditions of huge activity and high parallelism, could have caused one or more threads to enter a strict loop and the whole Server to hang.

Fixed a bug introduced in 7.0.0 which caused the configuration of TLS/SSL on the JMX RMI connector to be refused as not licensed in case the DEMO license type was configured.

Fixed a bug introduced in 7.0.0 which caused the <truststore> configuration block in the <https_server> block to be ignored. This only affected the case in which either <use_client_auth> or <force_client_auth> (or both) was set to Y.

Fixed bug in MPN module that could have caused an error when a new Server instance was taking over devices from a previous instance. This would have caused delays in the takeover operation.

Improved handling of control requests targeted to closed sessions on WebSockets. Such requests might have been reported as "Bad request"; now a proper error notification will always be issued.

Clarifying some logging messages and improved logging in various ways:

Added to the included Monitoring Dashboard a section, only available when the online license validation is leveraged, which reports the number of Server instances currently active and validated for the same contract ID.

Improved the reporting of client IPs in the internal Monitoring Data Adapter and Monitoring Dashboard.

Added a check to refuse session recovery requests specifying an event not yet sent; in fact, in principle, such request could be fulfilled, but they are implicitly forbidden by the specifications.

Aligned the Clustering.pdf document (paragraph 4) to account for the extension recently introduced in some client SDKs to notify the client of the Server's detection of wrong affinity.

Clarified the SSL Certificate.pdf document with respect to keytool limitations and acquisition of the certificate chain.

Fixed a bug in the included welcome page which caused malfunctioning in case of network issues. However, the welcome page is for internal use only.

7.0.0 build 1860.2
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 23 Apr 2018

Fixed a serious bug in the recently introduced session recovery mechanism, which could have caused update event duplication upon a successful recovery on clients based on the Web and Node.js client SDKs (of versions suitable for session recovery support). The bug was triggered by previous subscription requests that were refused, because illegal or disallowed by the Metadata Adapter (such errors are notified to the client application through onSubscriptionError or onCommandSecondLevelSubscriptionError).

Fixed a compatibility issue which affected the validation of ONLINE licenses. With some custom configurations of the JVM security settings, a valid license could have been refused.

Fixed a bug on the handling of suspension of MPN devices returned by Apple’s feedback service. This prevented the removal of the devices.

Improved logging upon session recovery, by adding a missing log of the related bind_session request.

Slightly revised the log of online license checks.

7.0.0 build 1860
Compatible with the deployment structure of the previous version.
Not compatible with configuration files for the previous version; see the compatibility notes below.
May not be compatible with licensed features holding for the previous version; see the compatibility notes below.
Not compatible with the database of the MPN Module for the previous version; see the compatibility notes below.
Released on 28 Feb 2018
Systemwide Changes and Extensions

Introduced two different editions: "COMMUNITY" for FREE license (replacing the old "Moderato" edition) and "ENTERPRISE" for all other types of license (replacing the old "Allegro/Presto/Vivace" editions).
For this purpose, revised the licensing configuration, with the introduction of the new "lightstreamer_edition_conf.xml" configuration file, which replaces the old "lightstreamer_version_conf.xml". In particular, the <license> section has been heavily modified. See <edition> in the new "lightstreamer_edition_conf.xml" configuration file for details; and the specific section of each edition depending on your choice:
- <community_edition_details>
- <enterprise_edition_details>
Also a new mandatory <edition_conf> configuration element in the main configuration file "lightstreamer_conf.xml" has been introduced, replacing the old <version_conf>. See the inline comments in the factory configuration file for details. COMPATIBILITY NOTE: In existing installations, the new <edition_conf> element and "lightstreamer_edition_conf.xml" file must be added (and the old <version_conf> element must be removed).
If previously using the "Moderato" package, configure the "COMMUNITY" edition; otherwise, configure the "ENTERPRISE" edition. In the latter case:

  • If using a "DEMO" license with "Vivace" edition configured, just keep the factory settings.
  • If using a "DEMO" license with other editions configured, start from the factory settings, but restrict the feature set accordingly (see below).
  • If using a "LICENSE_SERVER" or "LICENSE_FILE", ask for a license upgrade, with instructions on how to configure it.

The currently used "lightstreamer_version_conf.xml" file should be abandoned, and any changes to the <proxy> block and the <audit_log_path>, <automatic_update_check>, and <automatic_audit_upload> elements should be ported to the new "lightstreamer_edition_conf.xml" configuration file.

For DEMO licenses, introduced the possibility to only activate the optional features you want to use, instead of choosing only among the three old available editions. See the <optional_features> section in the "lightstreamer_edition_conf.xml" configuration file.
For online-validated licenses (previously the LICENSE_SERVER type), the optional features are now provided by your license, instead of choosing among the three old available editions. Yet, it is still possible to furtherly restrict the optional features you want to use through the <optional_features> section.
Also for file-based licenses (previously the LICENSE_FILE type) it is now possible to furtherly restrict the optional features you want to use through the <optional_features> section.

The COMMUNITY edition allows to choose one of the available Client SDKs to use with the Lightstreamer Server; instead, the old "Moderato" edition forced Web, Node.js, and Flash client SDKs. COMPATIBILITY NOTE: If upgrading from "Moderato" to "COMMUNITY" edition, whereas Web, Node.js, and Flash client SDKs were all enabled at the same time, now only one of them can be enabled at the same time.

Revised the licensing configuration, with the introduction of the new "lightstreamer_edition_conf.xml" configuration file, which replaces the old "lightstreamer_version_conf.xml".
Also a new mandatory <edition_conf> configuration element in the main configuration file "lightstreamer_conf.xml" has been introduced, replacing the old <version_conf>. See the inline comments in the factory configuration file for details. COMPATIBILITY NOTE: In existing installations, the new <edition_conf> element and "lightstreamer_edition_conf.xml" file must be added (and the old <version_conf> element must be removed).
The currently used "lightstreamer_version_conf.xml" file should be abandoned

Introduced the possibility to deactivate some features you don't want to use, instead of sticking to the features provided by the license. See the <optional_features> section in the "lightstreamer_edition_conf.xml" configuration file.

Introduced the possibility to customize the path of the generated audit logs through the <audit_logs> block in the "lightstreamer_edition_conf.xml" configuration file. However, with this edition, the generation of audit logs has been discontinued and is no longer available.

Wholly revised the support for Mobile Push Notifications offered through the internal MPN Module. The support is now available through the recently introduced TLCP client protocol. This makes it part of the SDK for Generic Clients and enables support on more client SDKs.
See the MPN chapter on the General Concepts document for all the details. But in particular, the revision brings the following consequences:

However, the MPN Module is not available with this edition.

Discontinued the support for Mobile Push Notifications for clients based on the previous version of the MPN Module. This affects the old non-Unified-API versions of the Android, iOS, and macosOS Client SDKs. The Server will remain formally compatible with these clients, but any request for Mobile Push Notification services will be actively refused. COMPATIBILITY NOTE: Existing clients leveraging the Mobile Push Notifications support should be upgraded by porting them to the corresponding Unified-API versions of the old SDKs, which have now been extended with Mobile Push Notification support based on the new MPN Module. However, the MPN Module is not available with this edition.

Introduced the support for the recovery of a session upon an interruption of a streaming or long polling connection. If the interruption is due to network issues, a client can request a rebind starting from the last event it received. See the new <session_recovery_millis>, <max_recovery_length>, and <max_recovery_poll_length> configuration elements for details.

Modified the default for the <server_pool_max_size> to become 1000. This should reduce the delays caused by slow adapters on those installations in which the settings for the SERVER thread pool and its optional subpools are not leveraged. COMPATIBILITY NOTE: For installations leaning on the default pool size, in case of slow adapters, the memory footprint could increase by about 1GB. If an installation cannot afford this memory increase, <server_pool_max_size> should be manually redefined. The previous default was the maximum between 10 and the number of cores. Only if <server_pool_max_size> is missing and left at its default, the default of <server_pool_max_free> also changes and becomes 10.

Added a check on client's activity and heartbeats as a way to detect streaming connections kept open by some intermediate node while the client is stuck or already detached. The check has to be requested by the clients.

Introduced an experimental support for external implementations of the PKCS#11 standard to be used as keystores. Contact Lightstreamer Support for details.
Introduced the explicit support of keystores of type PKCS12, which, however, may not be available with old JDKs. The extension involves the <keystore> and <truststore> blocks under <https_server> and the <keystore> block under <rmi_connector>. Updated the included SSL Certificates.pdf document accordingly.
Enforced the syntax checks on the mandatory subelements of the abovementioned blocks. COMPATIBILITY NOTE: Only in case of illegal missing subelements, an existing configuration that used to be tolerated (by assuming an empty block) may now be refused on startup.

Limited the responses of the form "License not valid for this Client version", which were issued also in cases in which the client version was not correctly specified in the request (which, actually, could also be due to request corruption). These cases are now treated as normal syntax errors (which are notified in different ways depending on the client type).
Relieved the above license notifications for all clients based on the Web and Node.js client SDKs, also for old versions. Instead of issuing an alert (Web) or a console log (Node.js), a suitable error code is now reported; where not available, the issue is notified as a syntax error.

Updated the included versions of some third-party libraries; also added a few more libraries and removed some. 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. In particular:

Added a heuristic detection of client requests that may be targeted to a different Server instance of a cluster and routed to the wrong instance. The information is made available in the log and to the most recent clients.

Introduced a preliminary test of the reachability of the RMI Connector for the JMX interface. In fact, without the test, the Server could start by leaving the RMI Connector not reachable even by the "stop" script when lanched from the same environment as the Server. COMPATIBILITY NOTE: if the RMI Connector were not reachable from the Server environment with the configured hostname, an existing working installation will now fail to start. To disable the test, see the new <test_ports> configuration flag under <rmi_connector>.
Added a configurable timeout to cope with cases in which the establishment or the test of the RMI Connector could block and delay the Server startup. See the new <test_timeout_millis> configuration flag under <rmi_connector>.
Improved the log of setup and connection to the RMI Connector.

Fixes for Bugs and Defects

Modified the handling of the HTTP headers configured through the <response_http_headers> block. If the same header is reported multiple times, multiple header lines will be now produced, instead of a single line with comma-separated values.
This fixes the handling of multiple occurrences of the Set-Cookie header, for which multiple occurrences are indeed legal, but a comma-separated format, overriding the general HTTP rule, is not.
COMPATIBILITY NOTE: For any other HTTP header currently configured, no change is expected in the behavior of the user-agents, as the multiple-lines and the comma-separated forms are supposed to be equivalent. At the most, for some other non-standard HTTP header, we can expect an improvement.

Improved the robustness of the Internal Web Server and the Monitoring Dashboard.
Fixed missing escaping in the Internal Web Server, which might have caused some requests on directories with unusual names to fail.

Fixed a bug affecting update dispatching, which could have been triggered by the combination of a very fast unsubscription-resubscription sequence and significant delays in internal update processing, possibly due to high load. The bug could have caused one or more updates for the previous subscription to be used in place of an equal number of updates for the new subscription.

Fixed a bug in the handling of session termination which, in case of a concurrent unsubscription, could have caused the corresponding notifyTablesClose invocation to be missed. As said, this could only occur upon session close, hence just before the final notifySessionClose notification.
Fixed other harmless bugs in the handling of session termination which, in rare cases, could have caused an exception to be logged.

Fixed a bug which caused the Server response to be empty upon requests made with the recently introduced TLCP protocol and containing syntax errors. The response should have reported error code 65, 67, or 68. This could only affect clients based on the SDK for Generic Clients.

Fixed the handling of empty requests, which caused an exception to be thrown.

Ensured compatibility with Javascript strict mode for clients based on the Node.js Client SDK.

Fixed a bug triggered by reuse, by the Data Adapter, of an update event of HashMap type in multiple update/smartUpdate calls for different items, when the modes of the two items were different. In this case, some field values could have been treated as null and a WARN message could have been issued.

Fixed a bug that, in rare and isolated cases, could have caused the average wait on a thread pool queue to be computed as a negative number. This affected the JMX Extension SDK (including the JMX Tree) and the internal MONITOR Data Adapter and log.

Ensured runtime compatibility with Java 9; this also required a change in the launch script, to use Java 9's JDK_JAVA_OPTIONS environment variable. COMPATIBILITY NOTE: If an existing installation uses a custom launch script, it can be left unmodified; however, in order to take advantage of the improvement, the change should be ported.

Fixed the documentation comment of the <server_tokens> configuration element, as the Server identifies itself as "Lightstreamer Server" instead of "Lightstreamer" since version 6.0.

Minor Changes and Extensions

Improved the communication with the embedded version of the Proxy Adapters. This will impact on the count of "active threads" involved in the invocations of notifyUser and notifyUserMessage, which should become much smaller. Nevertheless, the related "queued tasks" and "pool queue wait" statistics should remain similar, to still take into account the wait for the answers from the Remote Adapter. As a consequence, the behavior of the various "max_queue" configuration flags should also remain similar.

Added preliminary checks on the completeness of the configured keystores. If a keystore doesn't define a private key, the startup will fail. COMPATIBILITY NOTE: Existing installations are not expected to configure an empty keystore, since, in this case, the port wouldn't accept any connection; however, the Server would start and other ports would still work. Now, to achieve the same, that port should be removed from the configuration.

Moved to case-sensitive checks for the recognition of the values set for the "classloader" parameters in adapters.xml. COMPATIBILITY NOTE: Only existing configuration using non-lowercase values would be refused, but this case is not expected, as never explicitly allowed.

Introduced the <handshake_timeout_millis> configuration element to replace <read_timeout_millis> when TLS/SSL handshakes are involved. This also modifies the applied timeout, which is now 4000 ms, unless reconfigured. COMPATIBILITY NOTE: If an existing installation needs to keep the TLS/SSL handshake timeout unchanged, a new <handshake_timeout_millis> element with the same value specified for <read_timeout_millis> has to be added.
Clarified when the various I/O timeout checks can be suppressed.

Modified the HTTP 404 response issued to WebSocket opening requests that specify a wrong URI. The page configured through <error_page> is now returned as the body.

Revised and improved the Monitoring Dashboard.
Added the new tab "License" summarizing the details of your edition and the specific license features active in the server running.
Optimized the subscriptions handling for "Logs" tab in case of get/lost focus events.

Extended the internal MONITOR Data Adapter with new items, "monitor_details" and "monitor_client_libs", which provide details of your edition and the specific license features active in the server running. Look for the new items in the General Concepts document for details.

Brought various efficiency improvements, to increase the scalability with respect, in particular, to the overall frequency of client control requests.
The scenario of massive client disconnections has also been addressed.
Reduced the allocation of short-lived memory for various tasks, which should save some Garbage Collection work.

Improved the checks associated to the <unexpected_wait_threshold_millis> setting, to embrace all invocations to the adapters.

Revised the handling and improved logging of http parsing issues.
Improved the log of connection issues by adding socket information where missing.

Changed the suggested setting for the <write_timeout_millis> configuration element to enable the check, though with a long timeout, to cope with half-open connections.

Moved to case-sensitive checks for the recognition of the values set for the "classloader" parameters in adapters.xml. COMPATIBILITY NOTE: Only existing configuration using non-lowercase values would be refused, but this case is not expected, as never explicitly allowed.

Extended the <disable_session_mbeans> configuration element; with the new "sampled_statistics_only" setting, these MBeans will still be available from the SDK for JMX Extensions, but the properties based on periodic sampling (which can cause scalability issues in some scenarios) will not be computed.

Introduced a size limit on the internal buffers that can be kept allocated for reuse. Only in particular cases, the overall allocation of these buffers could have grown too much and caused memory shortage.
Introduced the <max_common_pump_buffer_allocation> and <max_common_nio_buffer_allocation> configuration elements to manage the limit.

Addressed a compatibility issue with Safari which, when leveraging the newly introduced session recovery feature, could have caused unexpected exceptions in pages based on the Web Client SDK.

Revised the internal approximation in item frequency management. This avoids that, with very high requested frequencies, the "real" frequency may be higher.

Increased the length of the generated session IDs by a few bytes.

Improved the log of WebSocket requests, by adding the involved session id when it is omitted from the request.
Introduced the "upd" sublogger to the LightstreamerLogger.subscriptions logger, to distinguish the part of log related with the events coming from the Data Adapter. By setting it to ERROR, the warnings issued upon updates for items currently not subscribed to can be suppressed.

Slightly revised the log on startup.

Improved the "stop" script to act faster.

Documentation and Deployment Level Changes

Aligned the included SSL Certificates.pdf document to recent standards. In particular, suggested the inclusion of the "subject alternative name" field in the certificate, which may be required by some user agents.

Revised the Clustering.pdf document and aligned it to the current state of the client SDKs with regard to cookie handling requirements. Also reformulated the HTTPS section to consider acquisition of multi-domain certificates as the normal practice.

Revised naming convention and format of Audit logs. See files header in the "audit" folder for details.

Slightly revised the preinstalled welcome page. Added a new section with "Edition" details.

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.

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 SDK 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 MONITOR 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 MONITOR 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 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, 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 MONITOR 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. 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 ; 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). to the new conventions.

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.

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.

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.

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 MONITOR 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.4.3 build 1870
Compatible with Lightstreamer Server since 7.0.
Compatible with custom managers for the previous version.
Released on 14 Jun 2018

Added missing documentation notes in the provided inline "MBeanInfo" descriptions, to align with the static docs.
Improved the "see" references in the "MBeanInfo" descriptions (but they still lean on the javadoc-style naming convention adopted for the static docs).

5.4.2 build 1859
Compatible with Lightstreamer Server since 7.0.
Compatible with custom managers for the previous version.
Released on 28 Feb 2018

Fixed the MaxVersionsAllowed property of the EditionDetailsMBean in case of DEMO license.

Added information about the new watchOS SDK to the EditionDetailsMBean.

Aligned the documentation to comply with current licensing policies.

5.4.1 build 1851
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with custom managers for the previous version; see compatibility notes below.
Released on 20 Dec 2017

Added a Data Adapter MBean for the new internal Data Adapter introduced for the MPN Module (when enabled). Note that, even though the Data Adapter is automatically added to all Adapter Sets, it is a single one and its MBean requires a special query for the access; see the Data Adapter MBean docs for details. On the other hand, it is not reported in any Adapter Set MBean.

Added the SampledStatisticsEnabled read-only property to the SessionMBeans, to reflect the new "sampled_statistics_only" Server configuration keyword available. If configured, some properties of the SessionMBeans can now issue null values (see the docs for details).

Extended the ThreadPoolMBeans to report statistics on CPU usage and blocked state for the threads. Since these statistics need enablement at JVM level, suitable enabling methods have also been added both in the ThreadPoolMBeans and, at global level, in the LoadMBean. See the docs for details.

Changed the names used in the PushNotificationsMBean to identify the MPN platforms, according to the changes in the SDK for In-Process Adapters. COMPATIBILITY NOTE: Custom managers invoking the getCurrentMPNDevice or getMPNDevicePlatformType operation should be aligned.

Added a new MBean EditionDetails to recap license characteristics.
The getLSEdition and getLSLicenseType methods in the ServerMBean will also reflect the new concepts.
Added getEditionConfigFile and getEditionConfigAsProperties in the ServerMBean to reflect the new configuration deployment, as lightstreamer_version_conf.xml has been replaced by lightstreamer_edition_conf.xml. The previous getVersionConfigFile and getVersionConfigAsProperties methods now refer to the new file, but have been deprecated.

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.8.1 build 84
Compatible with Server since 7.0.
Compatible with configuration files for the previous version.
Compatible with Remoting SDKs based on the previous version.
Released on 28 Feb 2018

Added a new configuration parameter, "keepalive_timeout_millis", for both Proxy Metadata and Data Adapters. The new configuration allows to set a timeout for received data and keepalives from the Remote Adapters to detect unresponsive connections (that will be handled differently by the "robust" and "non robust" versions. See the sample adapters.xml files for details.

Aligned the protocol documentation to comply with current licensing policies.

1.8.0 build 77
Compatible with Server since 7.0 b2.
May not be 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 20 Dec 2017

Modified the communication protocol for the Remote Metadata Adapters in the part related to the MPN Module, after its full revision. COMPATIBILITY NOTE: Only if the MPN Module is enabled, existing Remote Metadata Adapters based on the current SDKs have to be ported to the new versions of the SDKs. But note that the MPN Module is not available with this edition. COMPATIBILITY NOTE: Existing Remote Metadata Adapters will not be affected.

Changed the default of the <sequentialize_table_notifications> flag available in adapters.xml from Y to N, to better cope with cases in which many subscriptions are performed at once. COMPATIBILITY NOTE: If any existing Remote Metadata Adapter relies on the invocations of notifyNewTables and notifyTablesClose for the same session to never overlap, ensure that the flag is explicitly configured as Y for this Adapter.

Improved some error messages.

Changed the preconfigured settings for the dedicated thread pools in the adapters.xml templates, to leverage the new defaults for the SERVER pool.

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
7.0.1 build 1859
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Compatible with configuration files for the previous version.
Compatible with the deployment structure of the previous version.
Released on 28 Feb 2018

Added clarifications on licensing matters in the docs.

7.0.0 build 1851
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with 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 deployment structure of the previous version.
Released on 20 Dec 2017

Modified the interface in the part related to the MPN Module, after its full revision. But note that the MPN Module is not available with this edition. Here is a resume of the changes:

Changed the default of the <sequentialize_table_notifications> flag available in adapters.xml from Y to N, to better cope with cases in which many subscriptions are performed at once. COMPATIBILITY NOTE: If any existing Metadata Adapter relies on the invocations of notifyNewTables and notifyTablesClose for the same session to never overlap, ensure that the flag is explicitly configured as Y for this Adapter.

Changed the preconfigured settings for the dedicated thread pools in the adapters.xml template, to leverage the new defaults for the SERVER pool.

Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.

Aligned the documentation to comply with current licensing policies.

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.

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.2.0 build 35
Compatible with Adapter Remoting Infrastructore since 1.8.
Compatible with code developed with the previous version.
Released on 28 Feb 2018

Added clarifications on licensing matters in the docs.

1.2.0 build 34
Compatible with Adapter Remoting Infrastructore since 1.8.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Dec 2017

Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:

Added checks to protect the MetadataProviderServer and DataProviderServer objects from reuse, which is forbidden.

Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.

Aligned the documentation to comply with current licensing policies.

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.11.0 build 1022 (dll version 1.11.6618.28060 - Strong Name dll version 1.11.6618.28061)
Compatible with Adapter Remoting Infrastructure since 1.8.
Compatible with code developed with the previous version.
Released on 28 Feb 2018

Added clarifications on licensing matters in the docs.

1.11.0 build 1021 (dll version 1.11.6557.21148 - Strong Name dll version 1.11.6557.21150)
Compatible with Adapter Remoting Infrastructure since 1.8.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Dec 2017

Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:

Added checks to protect the MetadataProviderServer and DataProviderServer objects from reuse, which is forbidden.

Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.

Aligned the documentation to comply with current licensing policies.

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.

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.4.1 build 33
Compatible with Adapter Remoting Infrastructure since 1.8.
Compatible with code developed with the previous version.
Released on 22 Feb 2018

Added clarifications on licensing matters in the documentation.

1.4.0 build 30.3
Compatible with Adapter Remoting Infrastructure since 1.8.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 19 Dec 2017

Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:

Added notes in the documentation on the implication of the licensing policies.

1.3.3 build 28
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 24 Feb 2017

Fixed the error() method of the MetadataResponse class, whose support for the "credits" and "conflictingSession" response was incomplete; sending such a response would have caused a wrong message to be sent to the Server and the message would have been refused. The new optional exceptionData argument has been added; see the API docs for details. Sending a "credits" or "conflictingSession" response now requires the new argument; if omitted or wrong, an exception will be thrown. COMPATIBILITY NOTE: Custom code sending "credits" or "conflictingSession" responses must be changed, although such code wouldn't have worked anyway.

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.

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.1.2 build 33
Compatible with Adapter Remoting Infrastructure since 1.8.
Compatible with code developed with the previous version.
Released on 22 Feb 2018

Fixed edition note in the documentation of notify_user_with_principal.

Added clarifications on licensing matters in the docs.

1.1.1 build 32
Compatible with Adapter Remoting Infrastructure since 1.8.
Compatible with code developed with the previous version.
Released on 22 Dec 2017

Fixed few source code fragments to make them PEP8 compliant.

Fixed Lightstreamer Compatibility Notes in the README file.

Removed the API-reference folder under doc, which referred to version 1.0.0post1 and should have been removed since version 1.1.0.

1.1.0 build 27.10
Compatible with Adapter Remoting Infrastructure since 1.8.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 19 Dec 2017

Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:

Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.

Aligned the documentation to comply with current licensing policies.

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.8.0 build 84
Compatible with Adapter Remoting Infrastructure since 1.8.
Compatible with Remote Servers for the previous version.
Released on 28 Feb 2018

Added clarifications on licensing matters in the documentation.

1.8.0 build 77
Compatible with Adapter Remoting Infrastructure since 1.8.
May not be compatible with Remote Servers for the previous version; see compatibility notes below.
Released on 20 Dec 2017

Modified the protocol for the Remote Metadata Adapters in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:

COMPATIBILITY NOTE: Only if the MPN Module is enabled, existing Remote Metadata Adapters should be updated to support the new syntax. COMPATIBILITY NOTE: As the MPN Module is disabled, existing Remote Metadata Adapters will not be affected.

Revised the documentation to comply with the configuration change introduced in ARI 1.8 about <sequentialize_table_notifications>.

Added missing notes on the constraints on error codes in Credits and Conflicting Session exception types.

Clarified in the documentation which race conditions between Notify Session Close and other methods can be expected.

Added notes in the documentation on the implication of the licensing policies.

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.

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.1.3 build 1767
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 14 Jun 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Fixed a race condition, mostly possible while a session recovery was being attempted, which could have caused the delay of subscription requests due to a wrong request to the Server.

Addressed various issues related with connection sharing:

Addressed a particular case of session interruption that was still not supported by the session recovery feature.

7.1.2 build 1749
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 23 Mar 2018

Fixed a severe bug in the recently introduced session recovery mechanism, by which, after the creation of a new session because of network issues, it was possible that subsequent successful session recovery would cause data loss.

Fixed a bug in the recently introduced session recovery mechanism, which, upon particular kinds of network issues and if the creation of a new session had been necessary, could have caused the client to skip the resuming of the active subscriptions.

Fixed an annoying typo in the documentation of onStatusChange regarding the "DISCONNECTED:TRYING-RECOVERY" status.

Improved the library log by splitting the "lightstreamer.subscriptions" category in three, with the introduction of "lightstreamer.messages" and "lightstreamer.requests". See setLoggerProvider in LightstreamerClient for details. COMPATIBILITY NOTE: Existing code that collects log from the "lightstreamer.subscriptions" category should be ported. This obviously is not expected to affect production code.

7.1.1 build 1745
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Compatible with the previous version of the SDK for Flash Clients.
Released on 28 Feb 2018

Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches on mobile phones.

Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a race condition, introduced in the previous build 1737, which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Improved compatibility with the latest versions of Edge and Safari. This required disabling connection sharing.

Improved the notification of closed sessions to the Server, to enforce a cleanup when a browser tab is closing.

7.1.0 build 1737
Compatible with Lightstreamer Server since 7.0 b2.
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 20 Dec 2017

Changed the internal folder from sdk_client_web_unified to sdk_client_web.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, onStatusChange and getStatus can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via onStatusChange or getStatus may have to be aligned.

Added the onServerKeepalive callback in the ClientListener. See the JSDocs for details.

Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval" property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed a bug on sending reverse heartbeats to the Server, which, sometimes, could have caused the Server to report a syntax error.

Added the error codes 60 and 71 to "onServerError", to report cases in which the Server license does not allow the client version.

Fixed a bug which caused the invocations to the "setReconnectTimeout" method in ConnectionOptions to be ignored.

Fixed a bug on the recovery of control requests upon session close and replacement, which, through a rare race condition, could have caused the block of all subsequent control requests.

Fixed a bug that could affect the sorting of grid widgets requested through setSort method in case of large numbers (greater that 1 million) and comma as thousands separator.

Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Put a workaround for a known issue with shared workers in Firefox 57 and above, which could have caused misbehavior in case of connection sharing. As a consequence, the support for connection sharing may be limited.

Aligned the "Web Client Guide" document with regard to the referred "Deployment Config Matrix", which had remained obsolete.

Improved subscription requests on WebSockets by removing unnecessary parts.

Improved the messages shown by the provided StatusWidget.

Aligned the documentation to comply with current licensing policies.

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.2.4 build 1757
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 7 Jun 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a harmless bug, introduced in the previous version, which could have caused a Server warning for "duplicated LS_session" on some client requests.

7.2.3 build 1750
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 17 Apr 2018

Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Fixed a race condition, mostly possible while a session recovery was being attempted, which could have caused the delay of subscription requests due to a wrong request to the Server.

Addressed a particular case of session interruption that was still not supported by the session recovery feature.

7.2.2 build 1747
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 23 Mar 2018

Fixed a severe bug in the recently introduced session recovery mechanism, by which, after the creation of a new session because of network issues, it was possible that subsequent successful session recovery would cause data loss.

Fixed a bug in the recently introduced session recovery mechanism, which, upon particular kinds of network issues and if the creation of a new session had been necessary, could have caused the client to skip the resuming of the active subscriptions.

Fixed an annoying typo in the documentation of onStatusChange regarding the "DISCONNECTED:TRYING-RECOVERY" status.

Improved the library log by splitting the "lightstreamer.subscriptions" category in three, with the introduction of "lightstreamer.messages" and "lightstreamer.requests". See setLoggerProvider in LightstreamerClient for details. COMPATIBILITY NOTE: Existing code that collects log from the "lightstreamer.subscriptions" category should be ported. This obviously is not expected to affect production code.

7.2.1 build 1745
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 22 Feb 2018

Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches on mobile phones.

Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a race condition, introduced in the previous build 1737, which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Improved the notification of closed sessions to the Server.

7.2.0 build 1743
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Dec 2017

Changed the internal folder from sdk_client_node_unified to sdk_client_node.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, onStatusChange and getStatus can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via onStatusChange or getStatus may have to be aligned.

Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval" property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed a bug on sending reverse heartbeats to the Server, which, sometimes, could have caused the Server to report a syntax error.

Added the new Server error code 71 to onServerError and clarified the difference with error code 60.

Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Improved subscription requests on WebSockets by removing unnecessary parts.

Aligned the documentation to comply with current licensing policies.

7.1.1 build 1732.7
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 20 Nov 2017

Removed all the occurrences of the deprecated "with" statement, erroneously reintroduced in version 7.1.0.

Ensured source compatibility with React Native up to version 0.49.

7.1.0 build 1732
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 25 May 2017

Fixed the recently added support for cookie handling on WebSocket connections, to be fully compliant in the determination of outgoing cookies.

Added static methods addCookies and getCookies to LightstreamerClient, to simplify the sharing of cookies between Server connections operated by the SDK library and the rest of the application.

7.0.9 build 1729
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 15 May 2017

Improved the handling of cookies, by adding support of the WebSocket case. Now, the invocation of setCookieHandlingRequired(true) no longer causes the library to keep from using WebSockets.
Clarified in the docs for setHttpExtraHeaders how custom cookies can be set and inquired, which is also how cookies set by other sites can be supplied.

Added the error code 60 to "onServerError", to report cases in which the Server license does not allow the client version.

Fixed a bug on the recovery of control requests upon session close and replacement, which, through a rare race condition, could have caused the block of all subsequent control requests.

7.0.7 build 1722
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 17 Mar 2017

Removed all the occurrences of the deprecated "with" statement in order to ensure Javascript strict mode compatibility.

7.0.6 build 1719
Compatible with Lightstreamer Server since 6.0.2.
Compatible with code developed with the previous version.
Released on 7 Mar 2017

Fixed a bug which caused the invocations to the "setReconnectTimeout" method in ConnectionOptions to be ignored.

Removed the polyfill of the Promise, which is no longer needed, yet it might have caused compatibility issues in some environments.

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 50
Compatible with Web (Unified API) Client SDK since 6.1.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Aligned the documentation to comply with current licensing policies.

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 105
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Aligned the documentation to comply with current licensing policies.

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 1012 (dll version 1.4.6549.19417 - Strong Name dll version 1.4.6549.19418)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Aligned the documentation to comply with current licensing policies.

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 Unity Clients
2.1.3 build 1021 (dll version 2.1.6645.23710 - Strong Name dll version 2.1.6645.23711)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 15 Mar 2018

Fixed a bug, introduced in the previous build 1020, which caused the library to be refused by the Server, when running with some license types.

2.1.3 build 1020 (dll version 2.1.6593.19042 - Strong Name dll version 2.1.6593.19044)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 28 Feb 2018

Renamed, for clarity, the provided libraries from DotNetClient_2 to UnityClient.

Added the "strong name" version of the library, that was missing.

2.1.2 build 1018 (dll version 2.1.6487.20172 - Strong Name dll version 2.1.6487.20174)
Compatible with Lightstreamer Server since 6.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Introduced in Lightstreamer distribution in the new folder DOCS-SDKs/sdk_client_unity.
The features are similar to those of the SDK for Silverlight Clients.

SDK for iOS Clients (Unified API)

Check for newer versions on CocoaPods.

4.0.2 build 70
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 31 May 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added sessionRecoveryTimeout property in LSConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.

Fixed a bug affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.

Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.

Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues

4.0.1 build 69
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 26 Feb 2018

Added the error code 21 in client:didReceiveServerError:withMessage:, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke client:didReceiveServerError:withMessage: and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.

Modified the default value of the retryDelay property from 5 to 2 seconds. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches.

Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a bug, introduced in version 3.0.0, which could have caused the property snapshot of LSItemUpdate to behave wrongly on subscriptions in which the snapshot was not requested.

Fixed a bug introduced with version 3.0.0 preventing the connection when the Server configuration specifies a control-link address.

Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.

Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.

Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.

Fixed the instructions provided in the documentation of notificationFormat property of the LSMPNSubscription class.

Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.

Added clarifications on licensing matters in the docs.

4.0.0 build 66
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Changed the internal folder from sdk_client_ios_unified to sdk_client_ios.

Introduced the support for Mobile Push Notifications. It consists in new methods in the LSLightstreamerClient class together with new dedicated classes. See the API documentation for details.
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 Server at time of activation.
The notifications are managed by third-party services supported by the Server, which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, client:didChangeStatus: event and the status property can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via client:didChangeStatus: or status may have to be aligned.

Extended the reverse heartbeat mechanism, governed by the reverseHeartbeatInterval property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0, setting a value for the reverseHeartbeatInterval property could have even caused the connection interruption.

Added the new Server error code 71 to client:didReceiveServerError:withMessage: and clarified the difference with error code 60.

Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter retryDelay property of LSConnectionOptions.

Fixed a bug, introduced in version 3, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to client:didReceiveServerError:withMessage: would carry code 61 (internal error) instead of the specified custom code.

Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.

Fixed the documentation of serverSocketName property, whose behavior has slightly changed since version 3.0.0.

Fixed the documentation of the contentLength, keepaliveInterval, and reverseHeartbeatInterval properties of LSConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Aligned the documentation to comply with current licensing policies.

3.0.1 build 55.10
Compatible with Lightstreamer Server since 6.1
Compatible with code developed with the previous version.
Released on 26 Oct 2017

Fixed bug that could have caused a streaming connection to stall if the client was under heavy activity.

Fixed minor memory leak in WebSocket connection opening.

3.0.0 build 55.8
Compatible with Lightstreamer Server since 6.1
Compatible with code developed with the previous version.
Released on 6 Sep 2017

Confirmed and published with no changes since beta prerelease.

3.0.0 beta build 55.7
Compatible with Lightstreamer Server since 6.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 19 Jul 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, forcedTransport now also supports the "WS", "WS-STREAMING", and "WS-POLLING" values and the predisposed earlyWSOpenEnabled property is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in the distribution.

Added static methods addCookies:forURL: and getCookiesForURL: in LSLightstreamerClient, to allow for cookie sharing with the rest of the application when a local cookie store is being used.

Replaced the maxBandwidth property of LSConnectionOptions 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 property names and also the invocations of client:didChangeProperty: on the LSClientDelegate (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, subscription:didReceiveRealFrequency:, to the LSSubscriptionDelegate, 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 subscription:didReceiveRealFrequency: to the custom delegate would simply be ignored.

Introduced a new property, clientIp, in LSConnectionDetails; it is a read-only property with the keyword for client:didChangeProperty: (see the docs for details).

Completed the implementation of methods whose implementation was only partial. This regards:

Fixed the nullability annotations for the following methods and properties:

COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a delegate 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.

Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused subscription:didFailWithErrorCode:message: with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.

Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.

Improved the management of retries upon unsuccessful control requests.

Slightly delayed the availability of the serverSocketName property of LSConnectionDetails, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using serverSocketName right after a session start, should ensure that client:didChangeProperty: 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 HTTPExtraHeadersOnSessionCreationOnly, when YES. Previously, the extra headers (supplied with HTTPExtraHeaders) were still sent, redundantly, on control requests.

Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved readability and conformance with other SDKs documentation.

Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:, subscription:didFailWithErrorCode:message:, and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:, to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage: documentation; this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message: and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey: 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.

Clarified in the documentation the meaning of nil in requestedMaxFrequency and requestedBufferSize. Extended requestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is nil.

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 (Unified API)

Check for newer versions on CocoaPods.

4.0.2 build 60
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 31 May 2018

Raised minimum macOS version requirement to 10.10, from 10.9.

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added sessionRecoveryTimeout property in LSConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.

Fixed a bug affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.

Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.

Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues

4.0.1 build 58
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 26 Feb 2018

Added the error code 21 in client:didReceiveServerError:withMessage:, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke client:didReceiveServerError:withMessage: and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.

Modified the default value of the retryDelay property from 5 to 2 seconds. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches.

Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a bug, introduced in version 3.0.0, which could have caused the property snapshot of LSItemUpdate to behave wrongly on subscriptions in which the snapshot was not requested.

Fixed a bug introduced with version 3.0.0 preventing the connection when the Server configuration specifies a control-link address.

Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.

Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.

Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.

Fixed the instructions provided in the documentation of notificationFormat property of the LSMPNSubscription class.

Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.

Added clarifications on licensing matters in the docs.

4.0.0 build 55
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Changed the internal folder from sdk_client_macos_unified to sdk_client_macos.

Introduced the support for Mobile Push Notifications. It consists in new methods in the LSLightstreamerClient class together with new dedicated classes. See the API documentation for details.
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 Server at time of activation.
The notifications are managed by third-party services supported by the Server, which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, client:didChangeStatus: event and the status property can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via client:didChangeStatus: or status may have to be aligned.

Extended the reverse heartbeat mechanism, governed by the reverseHeartbeatInterval property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0, setting a value for the reverseHeartbeatInterval property could have even caused the connection interruption.

Added the new Server error code 71 to client:didReceiveServerError:withMessage: and clarified the difference with error code 60.

Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter retryDelay property of LSConnectionOptions.

Fixed a bug, introduced in version 3, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to client:didReceiveServerError:withMessage: would carry code 61 (internal error) instead of the specified custom code.

Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.

Fixed the documentation of serverSocketName property, whose behavior has slightly changed since version 3.0.0.

Fixed the documentation of the contentLength, keepaliveInterval, and reverseHeartbeatInterval properties of LSConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Aligned the documentation to comply with current licensing policies.

3.0.1 build 46.11
Compatible with Lightstreamer Server since 6.1
Compatible with code developed with the previous version.
Released on 26 Oct 2017

Fixed bug that could have caused a streaming connection to stall if the client was under heavy activity.

Fixed minor memory leak in WebSocket connection opening.

3.0.0 build 46.9
Compatible with Lightstreamer Server since 6.1
Compatible with code developed with the previous version.
Released on 6 Sep 2017

Confirmed and published with no changes since beta prerelease.

3.0.0 beta build 46.8
Compatible with Lightstreamer Server since 6.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 19 Jul 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, forcedTransport now also supports the "WS", "WS-STREAMING", and "WS-POLLING" values and the predisposed earlyWSOpenEnabled property is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in the distribution.

Added static methods addCookies:forURL: and getCookiesForURL: in LSLightstreamerClient, to allow for cookie sharing with the rest of the application when a local cookie store is being used.

Replaced the maxBandwidth property of LSConnectionOptions 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 property names and also the invocations of client:didChangeProperty: on the LSClientDelegate (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, subscription:didReceiveRealFrequency:, to the LSSubscriptionDelegate, 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 subscription:didReceiveRealFrequency: to the custom delegate would simply be ignored.

Introduced a new property, clientIp, in LSConnectionDetails; it is a read-only property with the keyword for client:didChangeProperty: (see the docs for details).

Completed the implementation of methods whose implementation was only partial. This regards:

Fixed the nullability annotations for the following methods and properties:

COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a delegate 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.

Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused subscription:didFailWithErrorCode:message: with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.

Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.

Improved the management of retries upon unsuccessful control requests.

Slightly delayed the availability of the serverSocketName property of LSConnectionDetails, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using serverSocketName right after a session start, should ensure that client:didChangeProperty: 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 HTTPExtraHeadersOnSessionCreationOnly, when YES. Previously, the extra headers (supplied with HTTPExtraHeaders) were still sent, redundantly, on control requests.

Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved readability and conformance with other SDKs documentation.

Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:, subscription:didFailWithErrorCode:message:, and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:, to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage: documentation; this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message: and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey: 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.

Clarified in the documentation the meaning of nil in requestedMaxFrequency and requestedBufferSize. Extended requestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is nil.

Aligned the LIB_NAME property to "macos"; it was still valued as "osx".

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 on CocoaPods.

4.0.2 build 38
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 31 May 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added sessionRecoveryTimeout property in LSConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.

Fixed a bug affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.

Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.

Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues

4.0.1 build 37
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 26 Feb 2018

Added the error code 21 in client:didReceiveServerError:withMessage:, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke client:didReceiveServerError:withMessage: and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.

Modified the default value of the retryDelay property from 5 to 2 seconds. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches.

Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a bug, introduced in version 3.0.0, which could have caused the property snapshot of LSItemUpdate to behave wrongly on subscriptions in which the snapshot was not requested.

Fixed a bug introduced with version 3.0.0 preventing the connection when the Server configuration specifies a control-link address.

Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.

Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.

Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.

Fixed the instructions provided in the documentation of notificationFormat property of the LSMPNSubscription class.

Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.

Added clarifications on licensing matters in the docs.

4.0.0 build 34
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Changed the internal folder from sdk_client_tvos_unified to sdk_client_tvos.

Introduced the support for Mobile Push Notifications. It consists in new methods in the LSLightstreamerClient class together with new dedicated classes. See the API documentation for details.
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 Server at time of activation.
The notifications are managed by third-party services supported by the Server, which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, client:didChangeStatus: event and the status property can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via client:didChangeStatus: or status may have to be aligned.

Extended the reverse heartbeat mechanism, governed by the reverseHeartbeatInterval property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0, setting a value for the reverseHeartbeatInterval property could have even caused the connection interruption.

Added the new Server error code 71 to client:didReceiveServerError:withMessage: and clarified the difference with error code 60.

Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter retryDelay property of LSConnectionOptions.

Fixed a bug, introduced in version 3, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to client:didReceiveServerError:withMessage: would carry code 61 (internal error) instead of the specified custom code.

Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.

Fixed the documentation of serverSocketName property, whose behavior has slightly changed since version 3.0.0.

Fixed the documentation of the contentLength, keepaliveInterval, and reverseHeartbeatInterval properties of LSConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Aligned the documentation to comply with current licensing policies.

3.0.1 build 25.10
Compatible with Lightstreamer Server since 6.1
Compatible with code developed with the previous version.
Released on 26 Oct 2017

Fixed bug that could have caused a streaming connection to stall if the client was under heavy activity.

Fixed minor memory leak in WebSocket connection opening.

3.0.0 build 25.8
Compatible with Lightstreamer Server since 6.1
Compatible with code developed with the previous version.
Released on 6 Sep 2017

Confirmed and published with no changes since beta prerelease.

3.0.0 beta build 25.7
Compatible with Lightstreamer Server since 6.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 19 Jul 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, forcedTransport now also supports the "WS", "WS-STREAMING", and "WS-POLLING" values and the predisposed earlyWSOpenEnabled property is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in the distribution.

Added static methods addCookies:forURL: and getCookiesForURL: in LSLightstreamerClient, to allow for cookie sharing with the rest of the application when a local cookie store is being used.

Replaced the maxBandwidth property of LSConnectionOptions 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 property names and also the invocations of client:didChangeProperty: on the LSClientDelegate (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, subscription:didReceiveRealFrequency:, to the LSSubscriptionDelegate, 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 subscription:didReceiveRealFrequency: to the custom delegate would simply be ignored.

Introduced a new property, clientIp, in LSConnectionDetails; it is a read-only property with the keyword for client:didChangeProperty: (see the docs for details).

Completed the implementation of methods whose implementation was only partial. This regards:

Fixed the nullability annotations for the following methods and properties:

COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a delegate 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.

Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused subscription:didFailWithErrorCode:message: with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.

Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.

Improved the management of retries upon unsuccessful control requests.

Slightly delayed the availability of the serverSocketName property of LSConnectionDetails, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using serverSocketName right after a session start, should ensure that client:didChangeProperty: 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 HTTPExtraHeadersOnSessionCreationOnly, when YES. Previously, the extra headers (supplied with HTTPExtraHeaders) were still sent, redundantly, on control requests.

Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved readability and conformance with other SDKs documentation.

Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:, subscription:didFailWithErrorCode:message:, and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:, to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage: documentation; this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message: and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey: 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.

Clarified in the documentation the meaning of nil in requestedMaxFrequency and requestedBufferSize. Extended requestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is nil.

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 watchOS Clients (Unified API)
4.0.2 build 8
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 31 May 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added sessionRecoveryTimeout property in LSConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues

4.0.1 build 7
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 26 Feb 2018

Added the error code 21 in client:didReceiveServerError:withMessage:, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke client:didReceiveServerError:withMessage: and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.

Modified the default value of the retryDelay property from 5 to 2 seconds. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches.

Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a bug which could have caused the property snapshot of LSItemUpdate to behave wrongly on subscriptions in which the snapshot was not requested.

Fixed a bug preventing the connection when the Server configuration specifies a control-link address.

Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.

Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.

Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.

Fixed the instructions provided in the documentation of notificationFormat property of the LSMPNSubscription class.

Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.

Added clarifications on licensing matters in the docs.

4.0.0 build 4
Compatible with Lightstreamer Server since 7.0 b2.
Made available as a prerelease on 7 Feb 2018

Included in Lightstreamer distribution. See "sdk_client_watchos".
The included library is derived from iOS Client SDK 4.0.0 build 66.
Some features are missing. See the introduction of the API documentation for details.

SDK for Android Clients (Unified API)

Check for newer versions online.

4.0.9 build 142
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 28 May 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.

4.0.8 build 141
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 18 Apr 2018

Fixed a compatibility issue with Android API level 21, which may have caused TLS connections to fail during the initial handshake. This only affected the "full" version of the library.

Updated the included version of the third-party Netty library. This only regards the "full" version of the library.

4.0.7 build 139
Compatible with Lightstreamer Server since 7.0.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 13 Apr 2018

Fixed the documentation about Android version support. Support for Android versions earlier than 4.4.2 (API level 19) was dropped by SDK version 3.1.

Fixed a bug, introduced in version 4.0.0, affecting the interruption of a session on a WebSocket (available in the "full" version of the library). In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.

Modified the constructor of the MpnDevice class, by removing the "senderId" argument, which was not actually used. COMPATIBILITY NOTE: Existing code leveraging the MPN support and using this constructor (instead of the available factory method) needs to be aligned and recompiled.

Discontinued token reuse upon MPN device registration: now a new token is always requested. Previously, the existing token was reused if the application package version had not changed. This better conforms to Android FCM library best usage practices.

4.0.6 build 137
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 9 Apr 2018

Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Fixed possible cases of incorrect cookie handling in old versions of Android (api level 23 and earlier).

4.0.5 build 134
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 6 Apr 2018

Fixed a compatibility issue in the previously added debug log.

4.0.4 build 133
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 5 Apr 2018

Improved internal debug log.

4.0.3 build 132
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 26 Mar 2018

Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.

4.0.2 build 131
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 27 Feb 2018

Fixed a bug, introduced in version 3.0, which could have caused the method ItemUpdate.isSnapshot to behave wrongly on subscriptions in which the snapshot was not requested.

4.0.1 build 129
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 21 Feb 2018

Added the error code 21 in onServerError, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke onServerError and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.

Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches.

Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a bug introduced with version 3.0.0 preventing the connection when the server configuration specifies a control-link address.

Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.

Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.

Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused a NullPointerException to be logged on the console.

Fixed the instructions provided in the documentation of setNotificationFormat in the MpnSubscription class.

Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.

Added clarifications on licensing matters in the docs.

4.0.0 build 127
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Dec 2017

Changed the internal folder from sdk_client_android_unified to sdk_client_android.

Introduced the support for Mobile Push Notifications. It consists in new methods in the LightstreamerClient class together with new dedicated classes under the "mpn" subpackage. See the API documentation for details.
As a consequence, new dependencies from third-party libraries have been added.
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 Server at time of activation.
The notifications are managed by third-party services supported by the Server, which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Restricted the compatibility constraint to Android 4 or later. COMPATIBILITY NOTE: Existing applications can keep running on earlier Android versions as long they don't leverage the MPN support.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, onStatusChange and getStatus can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via onStatusChange or getStatus may have to be aligned.

Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval" property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0, setting a value for the "ReverseHeartbeatInterval" property could have even caused the connection interruption.

Addressed an issue in the "compact" version of the library, which, in particular circumstances (more likely to occur in long polling), could have caused the silent loss of events on the session. Look for "sun.net.http.retryPost" in the Javadoc overview for details.

Added the new Server error code 71 to onServerError and clarified the difference with error code 60.

Fixed the documentation of getServerSocketName, whose behavior has slightly changed since version 3.0.0.

Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Fixed the javadocs, by removing some class member variables that were not supposed to be documented.

Aligned the documentation to comply with current licensing policies.

3.1.7 build 103.10
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 6 Dec 2017

Added the method LightstreamerClient.setTrustManagerFactory, which provides a mean to control the way TLS certificates are evaluated, with the possibility to accept untrusted ones.

3.1.6 build 103.9
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 24 Nov 2017

Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter ConnectionOptions.setRetryDelay.

3.1.5 build 103.8
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 23 Nov 2017

Addressed compatibility issue with Android 8 affecting SSL/TLS WebSocket connections and causing a tight loop of connection attempts.

Fixed an error in the determination of the LIB_VERSION constant of the LightstreamerClient class in the "full" (i.e. non "compact") version; this version description can also be reported by the Server.

3.1.4 build 103.2
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 26 Sep 2017

Fixed a bug, introduced in version 3, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to onServerError would carry code 61 (internal error) instead of the specified custom code.

3.1.3 build 103.1
Compatible with Lightstreamer Server since 6.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 6 Jul 2017

Fixed the reconnection algorithm, which, in the "full" Android client, could have caused a tight reconnection loop in particular conditions when the server is not available.

Added the null annotations (according to JSR 305) in the class files of public classes, to better support library use with Kotlin and any other language which leverages JSR 305. COMPATIBILITY NOTE: Existing code written in Kotlin and similar languages may no longer compile and should be aligned with the new method signatures. No issues are expected for existing Java code.

3.1.1 build 100
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version.
Released on 29 May 2017

Fixed a bug introduced in the previous release, as unnecessary encoding of characters in the requests was saved. The bug caused any '+' characters in the requests (for instance, in group/schema names and in client messages) to be handled incorrectly.

Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.

3.1.0 build 99
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version.
Released on 25 May 2017

Fixed the support for proxies, which could have caused connections to fail in case a public DNS were not available from the client host.

Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused onSubscriptionError with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.

Revised the support for cookies:

Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.

Introduced a configuration property to choose whether multiple instances of LightstreamerClient should use dedicated threads for their internal operations instead of sharing a single one. See the Javadoc comment for the LightstreamerClient class for details.

Fixed spurious entries in the Javadoc of the Subscription class.

3.0.1 build 98
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version.
Released on 2 Feb 2017

Fixed a bug in TLS management for the newly introduced support of WebSockets, whereby, when the EarlyWSOpenEnabled property was true, the WebSocket connections was open without performing the TLS certificate check. However, in case of an untrusted certificate, still no request could be sent to the Server and no session could be opened. Obviously, the bug did not affect the "compact" version of the library.

Improved the management of retries upon unsuccessful control requests.

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:

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:

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 17
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Aligned the documentation to comply with current licensing policies.

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 157
Compatible with Server since 6.0.
Compatible with code developed with the previous version.
Released on 20 Dec 2017

Aligned the documentation to comply with current licensing policies.

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 (Unified API)

Check for newer versions online.

4.2.6 build 1318
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 28 May 2018

Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.

Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.

Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.

Updated the included version of the third-party Netty library.

4.2.5 build 1314
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 13 Apr 2018

Fixed a bug, introduced in version 4.2.0, affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.

4.2.4 build 1313
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 9 Apr 2018

Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.

Improved internal debug log.

4.2.3 build 1312
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 26 Mar 2018

Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.

4.2.2 build 1311
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 27 Feb 2018

Fixed a bug, introduced in version 4.0, which could have caused the method ItemUpdate.isSnapshot to behave wrongly on subscriptions in which the snapshot was not requested.

4.2.1 build 1309
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 21 Feb 2018

Added the error code 21 in onServerError, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke onServerError and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.

Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds.

Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.

Fixed a bug introduced with version 3.0.0 preventing the connection when the server configuration specifies a control-link address.

Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.

Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.

Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.

Fixed a harmless bug on the implementation of disconnectFuture(), which, in rare cases, could have caused a NullPointerException to be logged on the console.

Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused a NullPointerException to be logged on the console.

Added clarifications on licensing matters in the docs.

4.2.0 build 1306
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 20 Dec 2017

Changed the internal folder from sdk_client_java_se_unified to sdk_client_java_se.

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY, to inform the application when a recovery attempt is being performed; hence, onStatusChange and getStatus can provide the new status. COMPATIBILITY NOTE: Existing code that uses the status names received via onStatusChange or getStatus may have to be aligned.

Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval" property. Now, it will also allow the Server to detect when a client has abandoned a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 4.0.0, setting a value for the "ReverseHeartbeatInterval" property could have even caused the connection interruption.

Added a new dependency from a third-party library.

Added the new Server error code 71 to onServerError and clarified the difference with error code 60.

Fixed the documentation of getServerSocketName, whose behavior has slightly changed since version 4.0.0.

Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.

Fixed the javadocs, by removing some class member variables that were not supposed to be documented.

Aligned the documentation to comply with current licensing policies.

4.1.7 build 1290.10
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 6 Dec 2017

Added the method LightstreamerClient.setTrustManagerFactory, which provides a mean to control the way TLS certificates are evaluated, with the possibility to accept untrusted ones.

4.1.6 build 1290.9
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 24 Nov 2017

Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter ConnectionOptions.setRetryDelay.

4.1.5 build 1290.8
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 23 Nov 2017

Improved WebSocket transport implementation.

4.1.4 build 1290.2
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version
Released on 26 Sep 2017

Fixed a bug, introduced in version 4, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to onServerError would carry code 61 (internal error) instead of the specified custom code.

4.1.3 build 1290.1
Compatible with Lightstreamer Server since 6.1.
May not be compatible with code developed with the previous version; see compatibility notes below.
Released on 6 Jul 2017

Fixed the reconnection algorithm, which could have caused a tight reconnection loop in particular conditions when the server is not available.

Added the null annotations (according to JSR 305) in the class files of public classes, to better support library use with Kotlin and any other language which leverages JSR 305. COMPATIBILITY NOTE: Existing code written in Kotlin and similar languages may no longer compile and should be aligned with the new method signatures. No issues are expected for existing Java code.

4.1.1 build 1289
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version.
Released on 29 May 2017

Fixed a bug introduced in the previous release, as unnecessary encoding of characters in the requests was saved. The bug caused any '+' characters in the requests (for instance, in group/schema names and in client messages) to be handled incorrectly.

Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.

4.1.0 build 1288
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version.
Released on 25 May 2017

Fixed the support for proxies, which could have caused connections to fail in case a public DNS were not available from the client host.

Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused onSubscriptionError with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.

Revised the support for cookies:

Improved the efficiency by avoiding unnecessary encoding of characters in the request (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.

Introduced a configuration property to choose whether multiple instances of LightstreamerClient should use dedicated threads for their internal operations instead of sharing a single one. See the Javadoc comment for the LightstreamerClient class for details.

Fixed spurious entries in the Javadoc of the Subscription class.

4.0.1 build 1283
Compatible with Lightstreamer Server since 6.1.
Compatible with code developed with the previous version.
Released on 2 Feb 2017

Fixed a bug in TLS management for the newly introduced support of WebSockets, whereby, when the EarlyWSOpenEnabled property was true, the WebSocket connections was open without performing the TLS certificate check. However, in case of an untrusted certificate, still no request could be sent to the Server and no session could be opened.

Improved the management of retries upon unsuccessful control requests.

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:

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:

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.1.1 build 1058 (dll version 3.1.6640.22649 - Strong Name dll version 3.1.6640.22657)
Compatible with Lightstreamer Server since 7.0.
Compatible with code developed with the previous version.
Released on 7 Mar 2018

Just fixed the deployment page on NuGet.

3.1.1 build 1057 (dll version 3.1.6627.21365 - Strong Name dll version 3.1.6627.21367)
Compatible with Lightstreamer Server since 7.0 b2.
Compatible with code developed with the previous version.
Released on 22 Feb 2018

Added two new properties to ConnectionInfo (namely ConnectTimeoutMillis and ReadTimeoutMillis), to enforce timeouts for the socket connection and socket read tasks.
This also fixes the documentation of OpenConnection and related methods in LSClient, where it was described a different way to set such timeouts. Actually, this feature was available only in the old .NET SDK and was removed upon the move to the .NET PCL SDK.

Removed the API-reference folder under doc, which referred to version 3.0.0 and should have been removed since version 3.1.0.

Added clarifications on licensing matters in the docs.

3.1.0 build 1055 (dll version 6549.21391 - Strong Name dll version 6549.21393)
Compatible with Lightstreamer Server since 7.0 b2.
May not be compatible with code developed with the previous version; see the compatibility notes below.
Released on 20 Dec 2017

Added automatic recovery of sessions upon unexpected socket interruption during streaming or long polling. Now the library will perform an attempt to resume the session from the interruption point. The attempt may or may not succeed, also depending on the Server configuration of the recovery capability; so, note that an interruption followed by a failed recovery attempt may not be notified by a PushConnException, but by a different exception.
Added the RecoveryTimeoutMillis property in ConnectionInfo to regulate recovery attempts.
Extended the scope of the OnActivityWarning notification on IConnectionListener to include the period in which a recovery attempt is in place. COMPATIBILITY NOTE: If an existing client takes decisions based on OnActivityWarning, it should be considered that the time elapsed after the warning may now be longer than ProbeTimeoutMillis, depending on RecoveryTimeoutMillis.

Fixed a bug introduced in 3.0.0 which caused the PollingMillis setting to be ignored. If pure synchronous polling was used (i.e. if combined with a setting of 0 for PollingIdleMillis), this could have caused a tight loop of requests to the Server (unless the latter was protected with <min_interpoll_millis>).

Extended the invocations of OnNewBytes in the ConnectionListener to also report the reception of a Server keepalive. In such cases, the "bytes" argument will be 0. COMPATIBILITY NOTE: If an existing client leans on the fact that it never receives 0 from OnNewBytes, it should be revised. But note that a 0 value from OnNewBytes was not explicitly excluded by the previous interface contract.

Aligned the documentation to comply with current licensing policies.

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:

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.1.0 build 1859
Compatible with Server since 7.0.
May not be compatible with custom clients based on the previous version; see compatibility notes below.
May not be compatible with custom clients sticking to the previous version; see compatibility notes below.
Released on 28 Feb 2018

Added session error code 21 and control error code 11, that can be received instead of, respectively, session error code 20 and control error code 20, to inform that not only a specified session was not found but it is also likely that the request was routed to the wrong Server instance. COMPATIBILITY NOTE: Existing clients using version 2.0.0 and handling error code 20, in order to upgrade to 2.1.0, should ensure that the new error codes are also handled properly. COMPATIBILITY NOTE: Existing clients using version 2.1.0 build 1851 and handling error code 20 should ensure that the new error codes are also handled properly.

Extended the scope of REQERR code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused a ERROR response with code 68.

Clarified in the documentation the use of percent encoding.

Clarified in the documentation how to distinguish notifications that carry snapshot information from real-time updates.

Added clarifications on licensing matters in the documentation.

2.1.0 build 1851
Compatible with Server since 7.0 b2.
May not be compatible with custom clients based on the previous version; see compatibility notes below.
May not be compatible with custom clients sticking to the previous version; see compatibility notes below.
Released on 20 Dec 2017

Introduced the support for Mobile Push Notifications. It consists in:

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 Server at time of activation.
The notifications are managed by third-party services supported by the Server, which determine the notification characteristics and the supported devices. See the protocol documentation for details.
However, the support for Mobile Push Notifications by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.

Added the support for recovery of sessions upon unexpected socket interruption during streaming or long polling. This involves an extension of the bind_session command (see LS_recovery_from), with a new error code (4) for CONERR, and a new Server notification (PROG). See the revised "Session Life Cycle" paragraph and the related "Session Recovery" example in chapter 6 for details.

Introduced the "heartbeat" pseudo-request to probe sockets and keep them alive.
Added the "LS_inactivity_millis" request parameter to create_session and bind_session to leverage Server-side checks of client activity and heartbeats.

Removed redundant uses of the SERVNAME and CLIENTIP notifications, by allowing them to be omitted on Session rebinds when unchanged with respect to the previous time. COMPATIBILITY NOTE: Existing clients using version 2.0.0 and managing SERVNAME and/or CLIENTIP, in order to upgrade to 2.1.0, should ensure that they keep the previous value upon each rebind; in particular, they cannot expect SERVNAME and/or CLIENTIP to be always received on rebind.

Added the new Server error code 71 to the session error codes.

Clarified the syntax documentation to detail how requests can be mapped onto the various transports (HTTP POST, WS messages, and the added case of HTTP GET).
Also clarified the requirements in terms of percent-encoding in the various cases, by specifying for which characters the encoding is mandatory (whereas for all other characters it is optional). Improved the provided examples accordingly, by removing unnecessary encoding.

Restricted various syntax checks on the requests to become case-sensitive. This is not meant as a change of the TLCP protocol specifications, which always specify the correct case for the keywords. However, some examples in the protocol documentation reported the LS_reqId parameter with a wrong case and have now been fixed. COMPATIBILITY NOTE: Existing clients using version 2.0.0 in which incorrect case is used, perhaps because inspired by some of the provided examples, have to be fixed.

2.0.0 build 1809
Compatible with Server since 6.1.
Not compatible with custom clients based on the previous version.
Compatible with custom clients sticking to 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:

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 the 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).