This is the LSEG Real-Time SDK. This SDK encompasses a couple of APIs: Enterprise Message API (EMA) and the Enterprise Transport API (ETA).
The Enterprise Message API (EMA) is an ease of use, open source, OMM API. EMA is designed to provide clients rapid development of applications, minimizing lines of code and providing a broad range of flexibility. It provides flexible configuration with default values to simplify use and deployment. EMA is written on top of the Enterprise Transport API (ETA) utilizing the Value Added Reactor and Watchlist.
The Enterprise Transport API (ETA) is an open source LSEG low-level Transport and OMM encoder/decoder API. It is used by the LSEG Real-Time Distribution Systems and LSEG Real-Time for the optimal distribution of OMM/RWF data and allows applications to achieve the highest performance, highest throughput, and lowest latency. ETA fully supports all OMM constructs and messages. Applications may be written to core ETA (RSSL), to ValueAdd/Reactor layer or to Watchlist layer.
Copyright (C) 2019-2024 LSEG. All rights reserved.
Please refer to the CHANGELOG file in this section to see what is new in this release of Real-Time SDK - C/C++ Edition. Also in CHANGELOG is a list of issues fixed in this release and a history of features and fixes introduced per released version.
External modules used by this version of RTSDK C/C++:
Dependency Version
---------- -------
openSSL 1.0.1e
openSSL 1.1.1a
openSSL 3.0.X *
openSSL 3.1.X **
ccron 2.0.0
cJSON 1.7.18
curl 8.9.1
googletest 1.8.1 (for older than Linux7) and 1.12.1
l8w8jwt 2.3.4
libxml2 2.13.3
lz4 1.9.4 (for older than Linux7) and 1.10.0
zlib 1.3.1
* Tested on supported Linux and Windows platforms; ** Tested on supported Windows platform
NOTES:
- curl and openSSL are dynamically loaded at runtime.
- Above mentioned version of openSSL was used in test. Please note that the RTSDK package does not build openSSL, and we recommend that all installed versions of openSSL are patched to the latest version available.
- Default curl libraries and CMake build scripting provided in the RTSDK package are built against the default openSSL version provided by the Linux distribution (Oracle Linux 7, RedHat 8, RedHat 9). If the application is using a different version of openSSL than the distribution, one must obtain a version of Curl that links against the same major and minor version of openSSL as the application and rebuild to ensure that one version of openSSL is used. For Windows, the RTSDK package Curl build, links against the Windows schannel library, and does not have the possibility of a version incompatability issue with openSSL.
- openSSL 1.1.1 and higher are required for TLS 1.3
- Cipher suite is configurable with TLS 1.2 and it is recommended that customers use best available ciphers. With TLS 1.3, cipher suite is not yet configurable; however, default ciphers are best available.
- Check installation guide for details regarding including external dependencies for build
Windows system libraries used by RTSDK C/C++:
Dependency
----------
wininet.lib
ws2_32.lib
crypt32.lib
cryptui.lib
bcrypt.lib
Iphlpapi.lib
Linux system libraries used by RTSDK C/C++:
Dependency
----------
rt
dl
pthread
m
stdc++
-
HP Intel PC or AMD Opteron (64-bit)
-
CPUs must have high resolution timer frequencies greater than 1GHz.
-
Oracle Linux Server 7.X Release 64-bit
-
Red Hat Enterprise Server 7.X Release 64-bit
-
Red Hat Enterprise Server 8.X Release 64-bit
-
Red Hat Enterprise Server 9.X Release 64-bit
-
Ubuntu 20.04 Release 64-bit
-
TCP/IP networking support installed if using TCP Socket connection types
-
UDP Multicast networking support if using Reliable Multicast connection type
-
Appropriate system access permissions when using Unidirectional Shared Memory connection types
- For best performance, ensure that machines and network switches are configured appropriately. See specific OS and hardware documentation for more information.
Users are welcome to migrate open source code to the platforms they prefer, however support for the included libraries is only provided on platforms listed below.
Platforms:
Microsoft Windows Server 2016 Standard Edition or later 64-bit
Microsoft Windows Server 2019 Standard Edition or later 64-bit
Microsoft Windows Server 2022 Standard Edition or later 64-bit
Microsoft Windows 10 Professional 64-bit
Compilers (only on OSs supported by Microsoft):
Microsoft Visual Studio 14.0 (2015) 64-bit
Microsoft Visual Studio 14.1 (2017) 64-bit
Microsoft Visual Studio 14.2 (2019) 64-bit
Microsoft Visual Studio 14.3 (2022) 64-bit
Notes:
- User has the option to use pre-built libraries for the compilers listed above and use them on different Windows operating systems that have support for those compilers to build their applications. User may also choose to build source and applications.
- CMake supports VS 2013 build although libraries are no longer shipped. If closed source from BinaryPack is required to build, please use a BinaryPack prior to Real-Time-SDK-2.0.3.L1 to build these deprecated Visual Studio versions at your own risk as changes to BinaryPacks will not be available for deprecated compilers.
- For V2 authentication with RTO, RTSDK introduced the l8w8jwt library. When building with Visual Studio 2019 or above, this library only works with Windows 10 SDK for October 2018 Update, version 1809 or later.
Platforms & Compilers:
GCC compiler suite version 4.8.2 or higher for Oracle Linux 7.X, 64-bit, Native build
GCC compiler suite version 8.3.1 or higher for Red Hat Enterprise Server 8.X, 64-bit, Native build
Clang compiler version 9.0.1 for Linux 8 64-bit, qualification with RH8 library build
GCC compiler suite version 9.3.0 or higher for Ubuntu 20.04, 64-bit, qualification with RH8 library build
GCC compiler suite version 11.4.1 or higher for Red Hat Enterprise Server 9.X, 64-bit, Native build
- Eta VACache library built
NOTE: User has the option to use pre-built libraries or build source natively on a platform of choice. Pre-built libraries for Red Hat 9, Red Hat 8 and Oracle Linux 7 are available in release packages available on LSEG Developer Portal.
This release has been tested with supported valid OS/compiler combinations.
This release has been tested with the following on supported platform/OS combinations. Please note that the list of tested platforms and compiler combination below reflects test of two use cases: using pre-built libraries to build applications and natively building source and using those libraries to build applications.
OS GCC Version Use-Prebuilt Library Use-Natively Build Library
-------------------------------- ------------ -------------------- ----------------------------
Oracle Linux Server 7.7 64-bit GCC 4.8.5 OL7_64_GCC482 OL7_64_GCC485
Red Hat Enterprise Linux Server 7.7 64-bit GCC 4.8.5 OL7_64_GCC482 RHEL7_64_GCC485
Oracle Linux Server 7.7 64-bit GCC 7.4.0 n/a OL7_64_GCC740
Red Hat Enterprise Linux Server 7.7 64-bit GCC 7.4.0 n/a RHEL7_64_GCC740
Red Hat Enterprise Linux Server 8.X 64-bit GCC 8.3.1 RHEL8_64_GCC831 RHEL8_64_GCC831
Red Hat Enterprise Linux Server 8.X 64-bit GCC 9.2.1 RHEL8_64_GCC831 RHEL8_64_GCC921
Ubuntu 20.04 64-bit GCC 9.4.0 RHEL8_64_GCC831 RHEL8_64_GCC831
Red Hat Enterprise Linux Server 9.2 64-bit GCC 11.4.1 RHEL9_64_GCC1141 RHEL9_64_GCC1141
Red Hat Enterprise Linux Server 9.2 64-bit GCC 12.2.1 RHEL9_64_GCC1141 RHEL9_64_GCC1221
n/a = This is not a tested combination
Proxies:
- Microsoft's Forefront
- Free Proxy
Authentication Schemes:
- Basic
- NTLM
- NEGOTIATE/Kerberos ( Windows only )
This release supports encryption using TLS 1.2 and TLS 1.3.
NOTE: On windows TLS 1.3 is supported with OpenSSL.
RTSDK Cpp-C supports connectivity to the following platforms:
- LSEG Real-Time Distribution System (RSSL/RWF connections): ADS/ADH all supported versions
- LSEG Real-Time: LSEG Real-Time Deployed
- LSEG Real-Time Hosted
- Real-Time - Optimized (RTO)
- Real-Time Direct
NOTE: Connectivity to Data Feed Direct (LDFD) is supported for Level 1 and Level 2 data.
This release has been tested with the following:
- ADS 3.8.0
- ADH 3.8.0
- DACS 7.12
Please refer to top level README.md and to Cpp-C/Eta/README.md or Cpp-C/Ema/README.md files to find more information. Sections Cpp-C/Eta/Docs/ and Cpp-C/Ema/Docs contain PDF/HTML documentation. In current directory, please find the test plan with test results: RTSDK-C-Edition_Test_Plan.xlsx
Please refer to Installation Guide for ETA or EMA for detailed instructions. In this section are some basic details.
There are 3 ways to install Real-Time SDK:
Obtain the source from this repository on GitHub. It will contain all of the required source to build RTSDK as detailed below. In addition, this repository depends on a Binary Pack found in the release assets section that is auto pulled by a build. The BinaryPack contains libraries for the closed source portions of the product, permitting users to build and link all dependent libraries to have a fully functional product.
Real-Time SDK package may also be downloaded from LSEG Developer Portal. In addition, these distributions depend on a Binary Pack found in the above downloads section. This will not be automatically pulled by the build, and must be downloaded and extracted into the ../RTSDK-BinaryPack directory(Same level as the Cpp-C directory in this package). The BinaryPack contains libraries for the closed source portions of the product, permitting users to build and link all dependent libraries to have a fully functional product.
Real-Time SDK package is also available for download on MyAccount. In addition, these distributions depend on a Binary Pack found in the above download location. This will not be automatically pulled by the build, and must be downloaded and extracted into the ../RTSDK-BinaryPack directory(Same level as the Cpp-C directory in this package). The BinaryPack contains libraries for the closed source portions of the product, permitting users to build and link all dependent libraries to have a fully functional product.
Using CMake:
Cmake is required to create the Linux Makefile files and Windows Solution and vcxproj files. To build examples or re-build libraries, user must download CMake version 3.14.7 (cmake_minimum_required) or later.
In addition, Python 3 is required. This can be installed either through yum or a windows installer.
Refer to RTSDK C/C++ Installation Guide located in Cpp-C/Eta/Docs or Cpp-C/Ema/Docs for more detailed CMake build instructions than what is described below.
For Linux:
Note: For Linux builds with RedHat based distributions(RHEL, Oracle Linux), the CMake scripts require lsb_release to be installed. For Red Hat Enterprise Linux and CentOS, this can be installed with the following command (this will require root access to the machine):
yum install redhat-lsb-core
At the same directory level as the resulting RTSDK directory, issue the following command to build the optimized Makefile files:
cmake -HsourceDir -BbuildDir
# sourceDir is is the directory in which the top-level CMake entry point (CMakeLists.txt) resides. By default, when you build using the Solution and vcxproj files, output is sent to directory specified in sourceDir.
# buildDir is the directory where all build output is placed. This directory is automatically created.
Issue the following command to build debug Makefile files:
cmake -HRTSDK -BbuildDir –DCMAKE_BUILD_TYPE=Debug
The cmake command builds all needed Makefile files (and related dependencies) in the buildDir directory. Go to the buildDir directory and type "make" or "gmake" to create the RTSDK libraries. Note that the libraries and sample application executables are sent to the RTSDK directory under sourceDir.
For Windows:
At the same directory level as the resulting RTSDK directory, issue the following command to build the Solution and vcxproj files:
cmake -HsourceDir -BbuildDir -G <VisualStudioVersion>
# sourceDir is is the directory in which the top-level CMake entry point (CMakeLists.txt) resides. By default, when you build using the Solution and vcxproj files, output is sent to directory specified in sourceDir.
# buildDir is the directory where all build output is placed. This directory is automatically created
# "VisualStudioVersion" is the visual studio version to use for build on windows.
# Valid values for VisualStudioVersion are
# "Visual Studio 17 2022" -A x64
# "Visual Studio 16 2019" -A x64
# "Visual Studio 15 2017 Win64"
# "Visual Studio 14 2015 Win64"
# Note: A list of visual studio versions can be obtained by typing "cmake -help".
# Note: CMake supports VS 2013 build although libraries are no longer shipped. If closed source from BinaryPack is required to build, please use a BinaryPack prior to Real-Time-SDK-2.0.3.L1 to build these deprecated Visual Studio versions at your own risk. Changes to BinaryPacks will not be available for deprecated compilers.
The cmake command builds all needed Solution and vcxproj files (and other related files) in the buildDir directory. User must open these files and build all libraries and examples in the same manner as with prior RTSDK versions. Note that the libraries and sample application executables are sent to an RTSDK directory under sourceDir.
Note that your installation of Visual Studio needs to be updated to add Microsoft Foundation Classes per Microsoft when encountering this build error: fatal error RC105: cannot open include file 'afxres.h'.
32 bit support:
CMake has build support for 32 bit platforms. This 32-bit support is available only for ETA core RSSL layer.
Linux: Add "-DBUILD_32_BIT_ETA=ON" to the cmake build
Windows: Do not add "Win64" or "-A x64" to the "VisualStudioVersion". Example, When specifying, "Visual Studio 14 2015", for a 64-bit build it would be "Visual Studio 14 2015 Win64". For a 32-bit build, it would be "Visual Studio 14 2015"
NOTE: Starting with SDK version 1.3.1, DACS libraries are available for 32-bits in the BinaryPack. NOTE: DACS libraries provided in BinaryPack for VS2019 is copied from VS 2017 as these build is not currently available.
The LSEG RDMFieldDictionary
and enumtype.def
files are present in this GitHub repo under Cpp-C/etc
. In addition, the most current version can be downloaded from MyAccount. Search for "Service Pack" and choose the latest version of LSEG Real-Time Template Service Pack.
If you discover any issues with this project, please feel free to create an Issue.
If you have coding suggestions that you would like to provide for review, please create a Pull Request.
We will review issues and pull requests to determine any appropriate changes.
In the event you would like to contribute to this repository, it is required that you read and sign the following:
Please email a signed and scanned copy to [email protected]. If you require that a signed agreement has to be physically mailed to us, please email the request for a mailing address and we will get back to you on where you can send the signed documents.
- For more details on each API, please see the corresponding readme file in their top level directory.
- This package/directory contains APIs that are subject to proprietary and open source licenses. Please make sure to read the readme files within each section for clarification.
- Please make sure to review the LICENSE.md file.