Remote Call Framework 3.4
Release Notes

RCF 3.4.487 - 2023-08-27

  • Fix potential dangling reference to server objects in RCF::ServerObjectService.
  • Add Globals::setOnExceptionCallback() so user code can intercept any RCF exceptions being thrown.
  • Fix bug with file transfers failing for files that have a last-modified timestamp before 1970.
  • Fix static linking against OpenSSL 3, for RCF builds with RCF_OPENSSL_STATIC defined.
  • Fix bug with thread-local OpenSSL errors not being cleared, causing other OpenSSL contexts to erroneusly report errors.

RCF 3.3.470 - 2022-06-09

  • Added RcfServer::setHealthCheckResponse(), to configure how a RcfServer responds to load balancer health checks (HTTP GET on /).
  • Added ClientStub::setHttpConnectionCloseHeader(), to set the HTTP Close header on the next request.
  • Fixed bug with transferring files with 64 bit sizes.
  • Fixed bug with using Zlib compression on HTTP connections.
  • Fixed bug with server-side termination of a HTTP publish/subscribe connection.
  • Schannel - support for TLS 1.3.
  • OpenSSL - support for OpenSSL 3.
  • Support for C++20 compilers.
  • Tested against following compilers:
    • Visual Studio 2022
    • gcc 11.2
    • clang 14.0

RCF 3.2.413 - 2020-07-12

  • Improvements to HTTP/HTTPS tunneling.
  • Schannel
    • Schannel - Fixed bug in Schannel credential management causing server to load server certificate multiple times.
    • Schannel - Support for TLS session resumption.
    • Schannel - Support for TLS SNI extension.
    • Schannel - Servers and clients to use TLS 1.3, if available.
  • OpenSSL
    • Upgraded OpenSSL support to latest OpenSSL libraries. Tested against OpenSSL 1.1.1c.
  • File transfers
  • Use asio system_timer class for timeouts, to avoid erroneous timeouts when the system clock changes.

RCF 3.1.328 - 2019-05-11

RCF 3.0.251 - 2018-05-13

RCF - 2016-04-13

  • Fix clock skew issues on Linux by using CLOCK_MONOTONIC. Only enabled if RCF_USE_CLOCK_MONOTONIC is defined.
  • Add support for IPv6 UDP multicasting.
  • Add support for Basic and NTLM proxy authentication when using HTTPS. NTLM authentication is only supported in Windows builds.
  • Fix various other bugs reported by email and on forums.
  • Fix compatibility issues with Visual Studio 2015.
  • Fix compatibility issues with Boost 1.60.0.

RCF - 2015-06-01

  • Significant improvements to HTTP/HTTPS support, including
    • Support for HTTP reverse proxies.
    • Maintaining RCF sessions across multiple HTTP connections.
  • Publish/subscribe now supported over HTTP and HTTPS.
  • Fix for performance issue with asio deadline_timer objects being associated with the wrong io_service object.
  • UdpClientTransport - disconnect() should close the local socket, so subsequent calls use a new socket and port.
  • UdpServerTransport - fix for thread init functors not being called.
  • Schannel-based SSL - change default protocol from SSL 3.0 to TLS 1.0 .

RCF - 2014-09-06

  • Fix default settings of RCF_FEATURE_SF and RCF_FEATURE_BOOST_SERIALIZATION config macros, to respect legacy RCF_USE_SF_SERIALIZATION and RCF_USE_BOOST_SERIALIZATION macros.
  • Fix compiler error when deriving custom class from RcfClient<>.
  • Fix compiler warnings appearing in Visual Studio 2013 Update 3, about deprecated functions in Winsock.

RCF - 2014-04-24

  • Fix potential busy loop for multithreaded UDP servers.
  • Expose RcfServer::getFilterService() for code using legacy custom filters.
  • Fix for RCF_USE_PROTOBUF define not working.
  • Fix potential handle leak in Windows thread implementation (win_thread.hpp).
  • Fix for thread joining in Windows thread implementation (win_thread::join()) - contributed by acDev on support forums.
  • Fix bug in shutdown order for RcfServer.
  • Implement RCF_OPENSSL_STATIC define, to allow static linking to OpenSSL.
  • Explicitly unload zlib and OpenSSL DLL's, when deinitializing RCF.
  • Implement serialization for various QT classes - see SF/Q*.hpp. Contributed by acDev on support forums.
  • Fix serialization for std::vector<bool>.
  • Implement serialization for std::bitset<>.
  • Implement SF_SERIALIZE_ENUM_CLASS macro, to simplify serialization of C++11 enum classes.
  • Fix compiler error when serializing shared_ptr<const T>.
  • Publish/subscribe - published messages are now sent asynchronously and concurrently on all subscriber connections.
  • Implement Publisher::getSubscriberCount(), to return number of subscriptions for a publisher.

RCF - 2013-07-17

  • More informative error messages upon certificate validation failure, when using OpenSSL.
  • Fix for thread local cache leaks reported by Visual Leak Detector.
  • Fix order of destruction issue in RcfServer destructor, when using multiple server transports.

RCF - 2013-06-18

  • Allow compile-time linking to zlib, by defining RCF_ZLIB_STATIC in build.

RCF - 2013-06-01

  • Fix potential order of destruction problem in SessionTimeoutService.
  • Fix bool conversion compiler error in RcfSession::hasDefaultServerStub() (reported on gcc 4.6.3) .
  • Accumulate multiple ByteBuffer's in SSPI filter, to prevent potential fragmentation of network send operations.
  • ThreadPool refactored, with simpler constructors and get \/ set methods.
  • Classes renamed: I_Endpoint to Endpoint, I_ServerTransport to ServerTransport, I_ClientTransport to ClientTransport, I_NetworkSession to NetworkSession, I_RemoteAddress to RemoteAddress.
  • Removed NamedPipeEndpoint class. Code using NamedPipeEndpoint should use Win32NamedPipeEndpoint or UnixLocalEndpoint instead.
  • Refactoring and simplifications to SSL functionality:
    • Added RCF::setSslImplementation(), RcfServer::setSslImplementation() and ClientStub::setSslImplementation() , to configure whether RCF uses Schannel or OpenSSL.
    • Renamed setSslCertificate() to setCertificate(), and setSslCaCertificate() to setCaCertificate().
    • Merged certificate validation callback signature, from std::function<bool(OpenSslEncryptionFilter &)> and std::function<bool(SspiFilter &)> , to std::function<bool(I_Certificate *)>.
    • Merged setSchannelCertificateValidationCb() and setOpenSslCertificateValidationCb() , to setCertificateValidationCallback().
    • Renamed setSchannelDefaultCertificateValidation() to setEnableSchannelCertificateValidation().
    • Added Win32Certificate::getCertificateName(), Win32Certificate::getIssuerName(), X509Certificate::getCertificateName(), and X509Certificate::getIssuerName() functions.
    • Referencing arbitrary Windows stores from PfxCertificate::addToStore() and StoreCertificate::StoreCertificate() , using the Win32CertificateLocation and Win32CertificateStore enums.
    • Added StoreCertificateIterator class, for iterating through certificates in a Windows store.

RCF - 2013-03-27

  • Add dummy parameters to RCF::init() and RCF::RcfInitDeinit::RcfInitDeinit(), to trap compiler define mismatches when building RCF as a DLL.
  • Server throws an exception immediately, if a client specifies a ping-back interval that is less than the minimum ping-back interval of the server.

RCF - 2013-03-07

  • Fix compatibility with Boost 1.53.0, by removing usages of boost::shared_static_cast<>.
  • Increase the maximum number of RCF methods in a RCF interface, from 100 to 200. If you need more than 100 methods, define RCF_MAX_METHOD_COUNT=200 in your build.
  • zlib and OpenSSL libraries are now loaded dynamically at runtime, rather than linked. This means that if you are building RCF with RCF_USE_ZLIB or RCF_USE_OPENSSL, you no longer need to link to zlib and OpenSSL. RCF will load the zlib and OpenSSL libraries at runtime, on the first execution of any compression code, or OpenSSL-based encryption code.
  • Changed Visual Studio demo solution, to build and use a RCF DLL.
  • Changed cmake demo projects, to link against pthread and dl on non-Windows platforms.

RCF - 2013-01-03

  • Trigger compiler error if user defines UNICODE or _UNICODE when building RCF on non-Windows platforms.
  • Fix compiler error when using RCF_USE_BOOST_FILESYSTEM together with RCF_USE_BOOST_SERIALIZATION.

RCF - 2012-10-28

  • Fix bug with ClientStub::setEnableCompression() not applying compression in some circumstances.

RCF - 2012-10-23

  • Add demo solution for Visual Studio 2012.
  • Add workaround for IOCP bug in Windows 8 and Windows Server 2012.
  • Add SF serialization for various C++0x types: std::unique_ptr<>, std::tuple<>, std::shared_ptr<>, std::array<>. See Serialization.
  • Add PDF version of RCF User Guide.

RCF - 2012-10-16

  • Fix compiler error occuring on gcc 4.7+.
  • Fix compiler error occuring on clang.

RCF - 2012-10-15

  • Fix compiler error when RCF_USE_BOOST_SERIALIZATION is defined but not RCF_USE_SF_SERIALIZATION.
  • Improve JSON-RPC response message from server, when server fails to parse JSON-RPC request.

RCF - 2012-09-29

  • Configuration of RCF logging (see Appendix - Logging).
  • Disable SIGPIPE signals on non-Windows platforms.

RCF - 2012-09-24

  • Reinstate support for UNIX domain socket transports.
  • Preserve last file modification timestamps, when transferring files.
  • Add I_ServerTransport::getInitialNumberOfCOnnections() / I_ServerTransport::setInitialNumberOfCOnnections() to get and set the initial number of listening connections that are created when a server transport starts. Default value is 1.
  • Fix Winsock compiler errors in Visual Studio 2003 demo projects, by defining WIN32_LEAN_AND_MEAN.

RCF - 2012-09-02

  • Introduce RCF_USE_BOOST_ASIO configuration macro, to build RCF against the version of Asio that is in Boost. If RCF_USE_BOOST_ASIO is not defined, RCF will be built against the version of Asio that is included in RCF.
  • Fix compiler errors when building on Cygwin. For Cygwin builds, RCF_USE_BOOST_ASIO is defined automatically.
  • Fix bug with asynchronous call dispatching, when used with one-way calls.
  • Fix possible busy loop in RCF_VERIFY() macro.

RCF - 2012-08-19

  • RCF 2.0 is a major upgrade of RCF, with signficant under-the-hood changes and a number of new features. This is a summary of the major changes.
  • New Feature: Asynchronous Remote Calls
  • New Feature: File Transfers
  • New Feature: JSON-RPC Support
  • New Feature: HTTP/HTTPS Tunneling
  • Simplified configuration of transport protocols.
  • Simplified configuration of publish/subscribe.
  • Simplified configuration of server-to-client callbacks.
  • Access controls for servant bindings.
  • Improved support for creating server-side session objects.
  • Deprecated server-side dynamic binding and session binding.
  • RCF_SINGLE_THREADED no longer supported.
  • Visual C++ 6.0 no longer supported.
  • Temporarily not supporting UNIX named pipe transports. This will be reinstated as soon as possible.