## Appendix - Release Notes

### RCF 2.0.0.2682 - 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.
- Allow compile-time linking to zlib, by defining `RCF_ZLIB_STATIC` in build.
- `ThreadPool` refactored, with simpler constructors and get / set methods.
- Classes renamed: `I_Endpoint` to `Endpoint`, `I_ServerTransport` to `ServerTransport`, `I_ClientTransport` to `ClientTransport`, `I_SessionState` to `SessionState`, `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 `boost::function<bool(OpenSslEncryptionFilter &)>` and `boost::function<bool(SspiFilter &)>` , to `boost::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.
- Downloads:
  - RCF-2.0.0.2682.zip
  - RCF-2.0.0.2682.tar.gz

### RCF 2.0.0.2679 - 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.
- Downloads:
  - RCF-2.0.0.2679.zip
  - RCF-2.0.0.2679.tar.gz

### RCF 2.0.0.2678 - 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.
- Downloads:
  - RCF-2.0.0.2678.zip
  - RCF-2.0.0.2678.tar.gz

### RCF 2.0.0.2675 - 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`.
- Downloads:
  - RCF-2.0.0.2675.zip
  - RCF-2.0.0.2675.tar.gz

### RCF 2.0.0.2673 - 2012-10-28

- Fix bug with `ClientStub::setEnableCompression()` not applying compression in some circumstances.
- Downloads:
  - RCF-2.0.0.2673.zip
  - RCF-2.0.0.2673.tar.gz

### RCF 2.0.0.2672 - 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.
- Downloads:
  - RCF-2.0.0.2672.zip
  - RCF-2.0.0.2672.tar.gz

### RCF 2.0.0.2670 - 2012-10-16

- Fix compiler error occuring on gcc 4.7+.
- Fix compiler error occuring on clang.
- Downloads:
  - RCF-2.0.0.2670.zip
  - RCF-2.0.0.2670.tar.gz

### RCF 2.0.0.2668 - 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.
- Downloads:
  - RCF-2.0.0.2668.zip
  - RCF-2.0.0.2668.tar.gz

### RCF 2.0.0.2665 - 2012-09-29

- Configuration of RCF logging (see Appendix - Logging).
- Disable `SIGPIPE` signals on non-Windows platforms.
- Downloads:
  - RCF-2.0.0.2665.zip
  - RCF-2.0.0.2665.tar.gz

### RCF 2.0.0.2664 - 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`.
- Downloads:
  - RCF-2.0.0.2664.zip
  - RCF-2.0.0.2664.tar.gz

### RCF 2.0.0.2661 - 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 oneway calls.
- Fix possible busy loop in `RCF_VERIFY()` macro.
- Downloads:
  - RCF-2.0.0.2661.zip
  - RCF-2.0.0.2661.tar.gz

### RCF 2.0.0.2648 - 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.
- Downloads:
  - RCF-2.0.0.2648.zip
  - RCF-2.0.0.2648.tar.gz

### RCF 1.3.1

- This is a bug-fix release for RCF 1.3.
- Fix for compiler error when using `signed char` in RCF method signatures.
- Fix performance problem when using `RCF::SspiFilter`. Multiple small message chunks are now merged into a single larger chunk to improve network performance.
- Improve SF serialization performance. Only call `typeid()` when necessary.
- Reduced SF archive sizes. Encode small integers using a single byte rather than 4 bytes.
- Fix excessive CPU usage when using multithreaded thread pools with Boost.Asio based transports.
- Fix for `boost::any` serialization. Empty `boost::any` instances were causing an exception to be thrown.
- Fix bug in client-side timeout logic when polling network connection using Windows `MsgWaitForMultipleObjects()` function.
- Services can no longer be added or removed while an `RcfServer` is running.
- Fix potential null pointer crash in marshaling logic.
- Rename variables named signals and slots in order not to interfere with QT preprocessor.
- Fix preprocessor redefinition which was causing a compiler warning on OSX.
- Downloads:
  - RCF-1.3.1.zip
  - RCF-1.3.1.tar.gz

### RCF 1.3

- Support for IPv6.
- IP-based access rules, to grant or deny access to IP-based servers.
- IP-based client transports able to bind to a specific local interface.
- Client able to query for size of its latest request and response messages.
- User data fields in request and response headers.
- Running multiple server transports on the same thread pool.
- Server-side caching of application objects.
- Default max max message length changed from 10Kb to 1Mb.
- Maximum number of methods in an RCF interface increased from 35 to 100.
- Extended auto-versioning to negotiate archive version as well as runtime version.
- SF serialization
  - Support for `tr1` containers and `tr1` smart pointers.
  - Support for `boost::intrusive_ptr<>`.
  - Serialization of `std::wstring` changed, to use UTF-8.
- Boost.Serialization serialization of `RCF::Exception` now includes error arguments as well as the error message.
- Fix byte ordering of fast vector serialization, for big-endian platforms.
- Improved efficiency of Boost.Asio based server transports - no memory allocations when reading or writing network data.
- For Boost.Asio based server transports, added `AsioServerTransport::getIoService()` to expose the internal `boost::asio::io_service` object.
- Added complete example of server-to-client callbacks, to User Guide.
- Added FAQ on server-side detection of client disconnection.
- Compatibility
  - Support for Visual Studio 2010 compiler.
  - Dropped support for mingw gcc 3.2 & 3.3.
  - Dropped support for Borland C++ Builder 2006.
  - Tested against Boost versions up to 1.45.0.
- Downloads:
  - RCF-1.3.zip
  - RCF-1.3.tar.gz

### RCF 1.2

- Support use of Protocol Buffers-generated classes, in RCF interfaces.
- Support Protocol Buffers-based marshaling protocol.
- Support for batched oneway calls.
- Improved error messages, with context-specific arguments.
- Improvements to versioning - SF archive version now passed in message header.
- Signature of SF serialization functions changed, to remove redundant version parameter.
- Calling `serializeParent()` no longer requires type registration.
- `serializeParent()` moved into `SF` namespace.
- Added configuration macro to control behavior on assert (`RCF_ALWAYS_ABORT_ON_ASSERT`).
- Fix serialization of `RemoteException`, when using Boost.Serialization.
- Fix several regressions introduced in 1.1.
  - Fix for thread-safety issue with pingback functionality.
  - Fix for subsecond timeouts on Unix platforms.
  - Fix compilation errors on Windows, if `_WIN32_WINNT <= 0x0500`.
- Tested against Boost versions up to 1.42.0.
- Dropped support for gcc 2.95.
- Updates to the RCF User Guide:
  - Added documentation for publish/subscribe topics.
  - Added documentation for Protocol Buffer support.
  - Rewrote section on Versioning.
  - Documented workaround for internal compiler error with Borland C++Builder 2007.
  - Added release notes.
- Downloads:
  - RCF-1.2.zip
  - RCF-1.2.tar.gz

### RCF 1.1

- Ping function added to `RCF::ClientStub`.
- Server-to-client pingbacks, for maintaining connectivity during long-running calls (`RCF::PingBackService`).
- Server-to-client callbacks.
- Dynamic thread pool grows and shrinks, to accommodate client load. User level code no longer needs to call `ThreadManager::notifyBusy()`.
- Progress callbacks on all transports.
- Schannel-based transport filter, for SSL encryption on Windows platforms (`RCF::SchannelFilter`).
- Support for `__attribute__(visibility())` when exporting RCF from shared libraries with GCC 4.x.
- Memory usage optimizations.
- Tested against Boost versions up to 1.39.0.
- Downloads:
  - RCF-1.1.zip
  - RCF-1.1.tar.gz

### RCF 1.0

- Support for more compilers (Intel C++ 9 and 10.1 for Windows, GCC 4.3)
- Support for more platforms (FreeBSD and OS X).
- Supports use of UNIX domain sockets as transport (`RCF::UnixLocalEndpoint`).
- Tested against Boost versions up to 1.37.0.
- Downloads:
  - RCF-1.0.zip
  - RCF-1.0.tar.gz

### RCF 0.9d

- Win32 named pipe transport implementations (`RCF::Win32NamedPipeEndpoint`).
- Boost.Thread no longer required.
- UDP multicasting and broadcasting.
- SF serialization for `boost::tuple`, `boost::variant`, and `boost::any`.
- Support for exporting RCF from a DLL.
- Tested against Boost versions up to 1.35.0 and Boost.Asio versions from 0.3.8.
- Downloads:
  - RCF-0.9d.zip
  - RCF-0.9d.tar.gz

### RCF 0.9c

- Zero-copy, zero-heap allocation core for fast and scalable performance.
- Kerberos and NTLM authentication and encryption on Windows platforms.
- OpenSSL filter, for SSL authentication and encryption.
- Server-side multithreading.
- Server-side session objects.
- Built-in runtime versioning, for backward and forward runtime compatibility.
- Robust publish/subscribe functionality.
- Support for legacy compilers, in particular, Visual C++ 6, Borland C++ Builder 6, and GCC 2.95.
- Support for 64-bit compilers.