---
source_url: https://www.pubnub.com/docs/sdks/windows-c/changelog
title: Changelog for Windows C SDK
updated_at: 2026-05-18T12:51:58.114Z
sdk_name: PubNub Windows C SDK
---

> Documentation Index
> For a curated overview of PubNub documentation, see: https://www.pubnub.com/docs/llms.txt
> For the full list of all documentation pages, see: https://www.pubnub.com/docs/llms-full.txt


# Changelog for Windows C SDK

PubNub Windows C SDK

:::note
## v7.2.2

*May 14, 2026*

| Type | Changes |
|------|----------|
| **Fixed** | • Replace inline `select()`/`FD_SET` with `poll()` on non-Windows platforms in `pbpal_check_connect()`. On Linux and macOS `FD_SET` writes to a fixed 1024-bit bitmap and corrupts the stack when a socket fd value exceeds `FD_SETSIZE`. `poll()` has no fd-value limitation. Windows retains `select()` because its `fd_set` is array-based and safe. |
| **Modified** | • Add `pbpal_ntf_callback_poller_poll_unit_test.c` covering init/deinit, save/remove, watch events, poll detection of readable and writable sockets, multiple sockets, socket update, and a high fd number test case (fd=1500) that validates the fix for the `FD_SETSIZE` overflow. |

## v7.2.1

*May 6, 2026*

| Type | Changes |
|------|----------|
| **Fixed** | • Initialise logger request/response buffers in pbcc_init to make sure that the loggers doesn't receive junked data when cancelation occurs before request preparation.<br/>• Fixed data race in situation when one logger used via logger_manager is being called from two different contexts. |

## v7.2.0

*April 22, 2026*

| Type | Changes |
|------|----------|
| **Added** | • Allow users to select if they want to cache or consume the value of the cypher key depending on their crypto module implementation. |

## v7.1.3

*April 16, 2026*

| Type | Changes |
|------|----------|
| **Modified** | • Add Windows async DNS resolution via `DnsQueryEx` and improve IPv6 fallback. |

## v7.1.2

*March 18, 2026*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix ABI mismatch where posix/windows sources picked the local `pubnub_internal.h` (wrong struct pubnub_pal size) on OpenSSL builds, so timeout fields were read as 0 and triggered an assertion. Use #include &lt;pubnub_internal.h> so the include path selects the correct header per build.<br/>• Add missing `pubnub_uagent()` function implementation for OpenSSL platform as declared in `pubnub_version.h`. Update `pubnub_uname()` format to match Windows and POSIX implementations and add `PUBNUB_SDK_VERSION_SUFFIX` support. |

## v7.1.1

*March 12, 2026*

| Type | Changes |
|------|----------|
| **Fixed** | • Move `offset_buf` declaration outside the `if` block so it remains in scope when `ENCODE_URL_PARAMETERS` reads the stored pointer.<br/>• Initialize `part_sign` to `NULL` instead of `(char*)""` to avoid undefined behavior when `free()` is called in non-crypto builds.<br/>• Each DNS query now gets a random 16-bit transaction ID via `rand()`, seeded once with `time(NULL)`. IDs are stored in `dns_queries_tracking` and validated on response to ensure concurrent A and AAAA queries have distinct IDs per RFC 5452.<br/>• Filter DNS server addresses with first `octet >= 224` in `is_valid_ipv4`. Multicast, reserved/Class E, and broadcast ranges are not valid DNS server addresses.<br/>• Release `ee->mutw` before calling PubNub APIs or `pbcc_ee_handle_event` to prevent lock-order inversion with the IO callback thread in both subscribe and unsubscribe paths. Add deadlock regression test covering all unsubscribe paths.<br/>• Move `m_lock` acquisition after `pbcc_deinit()`/`pbpal_free()` because they don't need the global allocator lock and `pbcc_subscribe_ee_free` re-locks the non-recursive `m_lock` via `pubnub_register_callback` → `pb_valid_ctx_ptr`, causing self-deadlock on the same thread.<br/>• Entity can outlive its parent `pubnub_t` context, so logging through `_entity->pb` is a use-after-free.<br/>• Replace header-only probe (`QDCOUNT=0`) with a proper A-query for `example.com` and validate response transaction ID, fixing false negatives on resolvers that silently drop malformed packets. |
| **Modified** | • Move `pubnub_internal.h` include above `windows.h` in `pbcc_logger_manager.c` so `winsock2.h` is included first, preventing redefinition errors in builds without `_WINSOCKAPI_` defined.<br/>• Use `%u` instead of `%d` for `unsigned int` `count` in `snprintf` to match the actual type.<br/>• Add buffer edge cases, result stability, broadcast/multicast filtering, no-DNS adapter handling, adapter flapping stress test, and multiple DNS per adapter phases. Extend baseline with multicast check and IPv6 with duplicate detection. |

## v7.1.0

*March 3, 2026*

| Type | Changes |
|------|----------|
| **Added** | • Add new logger API methods to C++ `pubnub::context`, Qt `pubnub_qt`, and Qt `pubnub::context` classes, guarded by `PUBNUB_USE_LOGGER`. |
| **Modified** | • Change `PUBNUB_LOG_MAP_SET_BOOL` to `PUBNUB_LOG_MAP_SET_NUMBER` for `opt.limit` and `opt.offset` (both `unsigned`) in `pubnub_here_now_ex` and `pubnub_global_here_now_ex` so the actual numeric values are logged instead of being truncated to `true`/`false`.<br/>• Use `pbms_start`/`pbms_elapsed` and `pb_sleep_ms` in `pubnub_free_with_timeout` to avoid a CPU-spinning loop and to fix portability issues with `clock()` on some platforms.<br/>• Add `PUBNUB_LOG_DEBUG` messages for hostname resolution, selected DNS server, resolved addresses, and address family across POSIX/Windows sockets, FreeRTOS, and Microchip Harmony platforms, and promote existing connect-address logs from `TRACE` to `DEBUG`.<br/>• Adjust log levels for missing DNS record messages to better match the severity of each event. |

## v7.0.2

*February 27, 2026*

| Type | Changes |
|------|----------|
| **Modified** | • Relocate debug log from `pubnub_enforce_api` setter to `pubnub_init` config output under runtime selection guards. |

## v7.0.1

*February 26, 2026*

| Type | Changes |
|------|----------|
| **Fixed** | • Add `pubnub_internal.h` and `pubnub_logger_internal.h` includes to `pbcc_subscribe_event_engine_events.c` and `pbcc_crypto.c` for logger macro availability.<br/>• Move `set->ee` assignment before `pubnub_subscription_set_add` calls to prevent crash on uninitialized `set->ee->pb` dereference. |

## v7.0.0

*February 26, 2026*

| Type | Changes |
|------|----------|
| **Added** | • BREAKING CHANGES: Added support for extendable logging, which can log structured data and allow to register customer loggers.<br/>• Added default logger for POSIX/Windows (`stdio`), and separate for FreeRTOS and Harmony.<br/>• Now request / response is logged as single log entries.<br/>• Added mechanism to drastically reduce the amount of logs generated with `sync` await interface.<br/>• Added way to set pn_sdk in runtime. |
| **Fixed** | • Fix issue because of which `pubnub_unsubscribe_with_subscription` and `pubnub_unsubscribe_with_subscription_set` nullified passed pointer even if 'user' code still owns it.<br/>• Save mutex to local variable before freeing subscription and subscription_set to avoid dereferencing freed memory on unlock/destroy.<br/>• Unregister PubNub callback in `pbcc_subscribe_ee_free()` so late async completions do not invoke it with freed `ee` as user_data.<br/>• `pbarray_remove()` uses pointer equality; match by (callback, user_data) and remove by index with `pbarray_remove_element_at()` so the intended listener is actually removed.<br/>• Move NULL check for `cryptor_header` before the first dereference in `pbcc_cryptor_header_v1_to_alloc_block` and remove the redundant check.<br/>• Guard `subs` dereference in `pubnub_subscription_set_union` and `pubnub_subscription_set_subtract` with a NULL check before the loop.<br/>• Fix adding long message actions by disabling Gzip compression.<br/>• Access `.ipv4` member when assigning parsed address to `dns_bytes`.<br/>• Use `getsockname()` to verify a Global Unicast source (2000::/3) instead of trusting `connect()`. |
| **Modified** | • Fixed issues because of which TLS read returned right away to the state machine without even waiting for `select`. |

## v6.2.0

*December 10, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add working IPv6 route detection to decide the preferable connection interface.<br/>• When built with `PUBNUB_DNS_SERVERS_VALIDATION_TIMEOUT` set to delay in milliseconds, system DNS servers' discovery will make an actual DNS query, and the value will be used as a request timeout.<br/>• Add handling of the IPv6 proxy address provided by automated (or PAC) proxy discovery API. |
| **Fixed** | • Fix issue because of which `pubnub_await` wasn't waiting after `pubnub_cancel` has been called.<br/>• Fix `WinHttpGetProxyForUrl` usage with URL with schema instead of domain only.<br/>• Fix issue with `/etc/resolv.conf` parsing where untrimmed string produced wrong address.<br/>• Some Windows-related interfaces, because of different `pubnub_` struct layouts caused by different  `pubnub_config.h` type aliases and pre-processing macros, accessed and modified wrong fields.<br/>• Fix `set_from_url4proxy` for proper `lpszProxy` parsing. |
| **Modified** | • Add defaults for `PUBNUB_ADVANCED_KEEP_ALIVE` in all related `pubnub_config.h` files.<br/>• When built with IPv6 support, first try to use any of the user-provided IPv6 DNS servers before falling back to the user-provided IPv4 before falling back to the address provided by a well-known DNS provider.<br/>• When built with IPv6 support, SDK will send two queries to receive both records and decide which will be most suitable for currently available routing. |

## v6.1.0

*November 17, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Added SNI (Server Name Indication) support for TLS connections.<br/>• Added hostname verification for SSL/TLS certificates to prevent MITM attacks. |
| **Modified** | • Update bundled certificates (added Amazon Root CA 1) which is used for secured connection and peers verification.<br/>• Filter out DNS servers received from disconnected adapters, loopback, and APIPA addresses.<br/>• Added tests to test DNS server discovery in a controlled Windows environment (manual). |

## v6.0.0

*November 7, 2025*

| Type | Changes |
|------|----------|
| **Added** | • BREAKING CHANGES: Add `limit` and `offset` parameters to `pubnub_here_now_options` used in `pubnub_here_now_ex`. Set `limit` to be set to default (`1000`) for `pubnub_here_now` (not ex) function. |
| **Modified** | • Try receiving DNS servers with `DnsQueryConfig` and fallback to the adapters with `GetAdaptersAddresses`. |

## v5.4.0

*October 21, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Provide interfaces (`pubnub_use_tcp_keep_alive`, `pubnub_dont_use_tcp_keep_alive`, `use_tcp_keep_alive`, and `dont_use_tcp_keep_alive`) to set up active TCP connection keep-alive packet sending. |
| **Fixed** | • Replace the Windows API, which in a multithreaded environment became a reason for crashes during the DNS resolution process.<br/>• Fix the issue because of which client created a secondary connection when built with `PUBNUB_USE_IPV6` support. |

## v5.3.2

*September 23, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix the issue because of which `poll` always returned immediately without waiting for the actual event (TLS handshake flow uses proper watcher now). |

## v5.3.1

*September 17, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Add fix to CPP wrapper to fix guard crash that could happen during freeing context. |

## v5.3.0

*September 2, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add a field that lets the user specify a timetoken for catch-up or `0` to make an initial / handshake subscription. |
| **Fixed** | • Fix subscribe v2 types visibility when `USE_SUBSCRIBE_V2` not set. |

## v5.2.0

*August 19, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Expose functions through the C++ interface to enable or disable system SSL certificate usage when establishing a secure connection. |

## v5.1.6

*August 5, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed deadlock for sync polling via `last_result`. |

## v5.1.5

*July 28, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Define sleep function for Windows builds. |
| **Modified** | • Guard `unistd` inclusion with platform check. |

## v5.1.4

*July 22, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix bug that UTF8 characters used in some end points were breaking the request format. |

## v5.1.3

*July 15, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed memory leak when calling pubnub_free on an initialized PubNub object.<br/>• Fixed socket leak when calling pubnub_free on a PubNub object with an open connection.<br/>• Fixed socket leak when publishing using a context with use_http_keep_alive = 0.<br/>• Fixed crash due to double-free when calling pubnub_free after pbpal_handle_socket_condition encounters a socket error. |

## v5.1.2

*July 8, 2025*

| Type | Changes |
|------|----------|
| **Modified** | • Use recursive semaphore for `mutex` lock and unlock in `pbpal_mutex.h`. |

## v5.1.1

*June 26, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix issue because of which it was impossible for sync PubNub context version to cancel operation awaited in secondary thread. |
| **Modified** | • Fix the code for which the compiler emitted warnings during the build for `mbedTLS` and `ESP_PLATFORM=1`. |

## v5.1.0

*June 19, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add functions which allow to enable and disable 'smart heartbeat' behavior for automatic heartbeat: `pubnub_enable_smart_heartbeat` and `pubnub_disable_smart_heartbeat`.<br/>• Add `pubnub_last_publish_timetoken` function to retrieve recently published message high precision timetoken. |
| **Fixed** | • Fix issue which caused deadlock on secondary thread and as result heartbeat stop.<br/>• Fix signature of `pbntf_init_callback` and its usage in Windows dedicated code. |

## v5.0.3

*June 17, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed wrong string copy if multiple channels(groups) are provided for `pubnub_set_state`. Note that using `memcpy` instead of `strncpy` is used intentionally because of the ESP support.<br/>• Fixed crash when double comma is provided to `pubnub_set_state` as a channels(groups).<br/>• Fixed wrong check if the reallocation is required in `pubnub_set_state`.<br/>• Removed additional allocation of memory for temporary data.<br/>• Changed the amount of bytes allocated based on the provided parameters instead of hardcoded values. |

## v5.0.2

*June 2, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix `pubnub_reconnect` and `pubnub_disconnect` not to print an error when called within incorrect subscription state. Warning will be printed instead and function won't execute further. |

## v5.0.1

*May 26, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix crashes that could sometimes happen during unsubscribe due to calling `strlen` on null pointers.<br/>• Fix `pubnub_fetch_history` function when used with crypto api. Change `PUBNUB_MAX_URL_PARAMS` to 12.<br/>• Fix the issue that was causing memory fragmentation fault at the moment of the next automated heartbeat call. |

## v5.0.0

*April 3, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add `PUBNUB_NTF_RUNTIME_SELECTION` flag that allows to select API type at runtime.<br/>• Introduce `void*` parameter for user data in listeners to let callbacks keep context on demand. |

## v4.19.1

*April 2, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix the issue that there was an assertion when using App Context functions with `limit` set to 100. |

## v4.19.0

*March 19, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add the ability to set `timetoken` (for message catchup) in `pubnub_subscribe_v2_options` which is used with `pubnub_subscribe_v2`. |
| **Fixed** | • Fix issue which was source of segmentation fault when tried to access memory after it has been freed. |

## v4.18.1

*February 11, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix issue because of which `signature` value in query has been truncated. |

## v4.18.0

*February 6, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add `status` and `type` support for channel and uuid metadata objects state update API. |

## v4.17.0

*January 16, 2025*

| Type | Changes |
|------|----------|
| **Added** | • Add possibility to replace default log function with a callback provided by the user. |

## v4.16.1

*January 9, 2025*

| Type | Changes |
|------|----------|
| **Fixed** | • Remove the `user_id` length restriction for dynamically allocated memory for it. |
| **Modified** | • Configure `try_compile` when building a static library. |

## v4.16.0

*December 25, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Additional flags for C/CPP can be set with: `USER_C_FLAGS` / `USER_CXX_FLAGS`. |
| **Fixed** | • Fix because of which one of the source files has been missed for Windows.<br/>• Fix issue with unsupported concatenation of sources files / definitions (`+=`). |
| **Modified** | • Refactor our `Makefiles` from different folders and platforms to use `include` directives to include shared definitions, flags, source files. |

## v4.15.0

*November 25, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Add custom message type support for the following APIs: publish, signal, share file, subscribe and history.<br/>• Add `pubnub_set_ipv4_connectivity` and `pubnub_set_ipv6_connectivity` to `pubnub_coreapi` to switch preferred connectivity protocol. |
| **Fixed** | • Make sure that in case of connection close (including because of error) proxy context object will be reset. |

## v4.14.1

*October 24, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix CMakeLists to build correctly on Windows. |
| **Modified** | • Prepare CMakeLists to support builds for Arm64 architecture. |

## v4.14.0

*October 15, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Add core Event Engine implementation with the required set of types and methods.<br/>• Add Subscribe Event Engine built atop of the core Event Engine implementation.<br/>• Add the following entities: channel, channel group, uuid and channel metadata objects.<br/>• Add objects to manage subscriptions and provides interface for update listeners.<br/>• Add new event listeners, which make it possible to add listeners to a specific entity or group of entities (though subscription and subscription set).<br/>• Added ability to configure automated retry policies for failed requests. |

## v4.13.1

*September 5, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Removed additional null byte character. |

## v4.13.0

*August 9, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Add `delete message` API support to the advanced history module. |

## v4.12.3

*August 5, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Add the missing `ttl` parameter to the `pubnub_publish_options` for extended `publish` configuration. |

## v4.12.2

*August 5, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed custom `bool` type for CMake builds. |

## v4.12.1

*August 5, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix query values for boolean flags for history endpoint (`include meta`, `include uuid`, `include message type` and `reverse`). |

## v4.12.0

*July 29, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Added `filter` and `sort` parameters to be closer to the other SDKs with object API.<br/>• Configurable `bool` type. |
| **Fixed** | • Missing features needed for grant token API in CMakeLIsts.txt. |

## v4.11.2

*July 15, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Added missing subscribe v2 crypto implementation. |

## v4.11.1

*June 28, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed `cmake` build for not ESP32 builds. |

## v4.11.0

*June 27, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Provided support for ESP32 devices via ESP-IDF framework.<br/>• Provided support for MBedTLS library used within esp32 platform. |
| **Modified** | • Replace `strncpy` with `strcpy` in blocks where it is safer to be used. |

## v4.10.0

*June 14, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Added possibility to use strings in actions API. |
| **Modified** | • `pubnub_action_type` enum has been deprecated. |

## v4.9.1

*March 26, 2024*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix too small amount of memory allocated for aes cbc algorithm in some cases. |
| **Modified** | • Add possibility to include address sanitizer in build via CMake. |

## v4.9.0

*January 8, 2024*

| Type | Changes |
|------|----------|
| **Added** | • Provide CMake support.<br/>• Adjust `build.cs` unreal engine file for CMake build. |

## v4.8.0

*December 7, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Add `#if` switches into files that are related to PubNub features to not rely only on makefiles. [Be careful when update. It's not a breaking change at all but might fail build for custom makefiles!]. |

## v4.7.1

*November 23, 2023*

| Type | Changes |
|------|----------|
| **Fixed** | • Handle unencrypted message while getting messages with crypto. |

## v4.7.0

*November 20, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Provided `PUBNUB_EXTERN` macro to extern C functions. |

## v4.6.2

*November 14, 2023*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix `pubnub_free()` function on not initialised PubNub that can cause exceptions/undefined behaviours. |

## v4.6.1

*November 8, 2023*

| Type | Changes |
|------|----------|
| **Fixed** | • Provide missing `publish()` function overload for QT wrapper that allows set publish related options. |

## v4.6.0

*October 30, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Add the `PUBNUB_QT_MOVE_TO_THREAD` flag as default to give users the opportunity to manage threads by themselves. |
| **Fixed** | • Move `pubnub_qt` into QT main thread by default to be sure that timers will be run in it. |

## v4.5.0

*October 16, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Update the crypto module structure and add enhanced AES-CBC cryptor. |
| **Fixed** | • Improved security of crypto implementation by increasing the cipher key entropy by a factor of two.<br/>• Fixed missing return from failed `pbaes256_decrypt_alloc()` function. |

## v4.4.0

*September 28, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Provide module files to integrate SDK with Unreal Enigne. |

## v4.3.0

*July 24, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Add `publisher` field into `pubnub_v2_message`. |
| **Fixed** | • Fixed `flags` and `region` values that always equaled `0`. |

## v4.2.2

*May 24, 2023*

| Type | Changes |
|------|----------|
| **Fixed** | • Conditionally use of using newest openssl API Ipv4 parsing is needed for working with proxy. Include object file with that function for proxy builds. |
| **Modified** | • Use newest openssl API. |

## v4.2.1

*April 26, 2023*

| Type | Changes |
|------|----------|
| **Modified** | • Conditionally use `sha256` when build is linked with OpenSSL 3+ version. |

## v4.2.0

*February 7, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Updated QT to version `6.*`. |
| **Fixed** | • Fixed not building QT module.<br/>• Align QT module with current SDK state. |
| **Modified** | • Removed some states, classes and structs that aren't currently used. |

## v4.1.0

*January 16, 2023*

| Type | Changes |
|------|----------|
| **Added** | • Added pubnub_set_state_ex to support heartbeat. |
| **Fixed** | • Removed state param from subscribe request.<br/>• Added state param to hearbeat request. |

## v4.0.6

*December 14, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed hanging allocated memory after error in `parse_token` by cleaning the result memory on `cbor` error. |
| **Modified** | • Implemented more tests for `pubnub_token_parse` function to increase confidence about that function.<br/>• Refactored implementation of some tests' setups. |

## v4.0.5

*December 2, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed compilation error for MSVC in `pubnub_parse_token` function. |

## v4.0.4

*November 25, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed crashing parsing token for not valid values by logging an error and returning `NULL`. |

## v4.0.3

*November 17, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Fixed wrong pointer reallocation in string concatenation.<br/>• Fixed allocation counter that was not taking to the account recursed allocations. |

## v4.0.2

*November 15, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Improved accuracy of the base64 encoding size what fixes buffer underflow in encryption module.<br/>• Fixed undefined behaviours in `pubnub_encrypt_decrypt_iv_sample.c` by including some additional checks and variable initialisations. |
| **Modified** | • Made same base for encrypt functions what makes codes easier to understand and maintain. |

## v4.0.1

*November 8, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • `ERR_load_BIO_strings()` is deprecated in OpenSSL 3.0. Low-level encoding primitives are also deprecated. `EVP_EncodeBlock()` is available in all currently supported OpenSSL releases. |

## v4.0.0

*November 2, 2022*

| Type | Changes |
|------|----------|
| **Added** | • Add `user_id` configuration option that deprecates `uuid` ones.<br/>• BREAKING CHANGES: now `user_id` (old `uuid`) is a required property!. |

## v3.5.2

*October 11, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix memory leak in cpp `parse_token` method.<br/>• Fix buffer overflow in core `pubnub_parse_token` function for some cases.<br/>• Fix buffer overflow in core `pubnub_encrypt` function for randomized initial vector. |

## v3.5.1

*September 22, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix wrong parsing uuid in parse_token.<br/>• Fix case sensitive header check. |

## v3.5.0

*September 8, 2022*

| Type | Changes |
|------|----------|
| **Added** | • Implemented Fetch History. |

## v3.4.3

*July 5, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Removed extra parenthesis in get_dns_ip function code.<br/>• Added uuid query param to history, set/get state, wherenow, channel-group operations. |

## v3.4.2

*April 25, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Handle state for subscribe and resubscribe. |

## v3.4.1

*March 9, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Support system name servers in async DNS client.<br/>• Fix multiple memory safety and leak issues.<br/>• Fix slash char encoding for pnsdk. |

## v3.4.0

*January 11, 2022*

| Type | Changes |
|------|----------|
| **Added** | • Add token permissions revoke functionality. |
| **Fixed** | • Remove body from `signature` calculation for requests with DELETE HTTP method. |
| **Modified** | • Update `.pubnub.yml` file with access token revoke and secret key all access. |

## v3.3.2

*January 10, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Filter-expr query param typo. |

## v3.3.1

*January 5, 2022*

| Type | Changes |
|------|----------|
| **Fixed** | • Encode = (equal) sign for filter expression. |

## v3.3.0

*October 11, 2021*

| Type | Changes |
|------|----------|
| **Added** | • Implemented PAMv3 support. |
| **Fixed** | • Handle subscribe error for empty channel-group. |

## v3.2.0

*September 15, 2021*

| Type | Changes |
|------|----------|
| **Fixed** | • Error codes for missing subscribe timetoken. |

## v3.1.0

*June 14, 2021*

| Type | Changes |
|------|----------|
| **Added** | • Added PAMv3 Grant Token support. |

## v3.0.0

*May 24, 2021*

| Type | Changes |
|------|----------|
| **Added** | • BREAKING CHANGE - Added PUBNUB_RAND_INIT_VECTOR to support dynamic IV, default to true. |

## v2.14.0

*May 10, 2021*

| Type | Changes |
|------|----------|
| **Fixed** | • Handling Access Denied server error in Pubnub Access Manager requests. |

## v2.13.0

*April 20, 2021*

| Type | Changes |
|------|----------|
| **Added** | • Implemented Pubnub Access Manager Support.<br/>• Implemented Objects V2. Removed Objects V1. |

## v2.12.7

*January 20, 2021*

| Type | Changes |
|------|----------|
| **Added** | • Added support for Universal Windows(UWP). |

## v2.12.6

*October 3, 2020*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix DNS servers rotation during transaction origin DNS resolution timeout. |

## v2.12.5

*April 8, 2020*

| Type | Changes |
|------|----------|
| **Modified** | • Dynamically allocate memory for `uuid` in `pubnub_set_uuid` function. |

## v2.12.4

*January 31, 2020*

| Type | Changes |
|------|----------|
| **Fixed** | • Properly handle DNS retries and stale HTTP Kept-Alive connections |

## v2.12.3

*January 16, 2020*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix assertion failure while retrying timed out DNS queries with multiple contexts |

## v2.12.2

*December 5, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Add support for automatic sending of heartbeat messages with sync interface (POSIX and Windows) |

## v2.12.1

*November 22, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Add support for automatic sending of heartbeat messages on Windows, callback. |

## v2.12.0

*November 15, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Support automatic sending of heartbeat messages (only on POSIX, callback, for now). |

## v2.11.1

*October 25, 2019*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix Qt |

## v2.11.0

*October 20, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Introduce Actions API<br/>• Add 'include_meta' parameter to pubnub_history_ex() |
| **Fixed** | • Fix stopwatch not working after 25 days |

## v2.10.2

*October 18, 2019*

| Type | Changes |
|------|----------|
| **Fixed** | • Restore get/set connection timeout in C++ wrapper |

## v2.10.1

*October 2, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Retry if DNS server does not respond. Number of retries is a compile-time parameter. |
| **Fixed** | • In C++, fix transaction finishing before user starts to wait for it to finish. |

## v2.10.0

*September 23, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Introduce Objects API |
| **Fixed** | • Fix high history (extended/full) handling of 'reverse' and other boolean parameters |

## v2.9.4

*September 10, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Introduce separate connection timer, to control/limit the duration of DNS resolving and connection establishment, which should be much shorter than full transaction timer, which has to be >5 min for subscribe |
| **Fixed** | • Fix high CPU load in callback interface when no context, thus socket, is executing a transaction |

## v2.9.3

*September 3, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Detect TCP/IP connect timeout in callback mode w/sockets - does not seem to work on Windows<br/>• Add set_proxy_none() to pubnub::context |

## v2.9.2

*August 28, 2019*

| Type | Changes |
|------|----------|
| **Fixed** | • Proxy admin functions (set, get) were not protected by mutex/monitor, so caused a race condition<br/>• Setting new proxy might have been ignored until the resolved DNS addresses of the previous proxy expire.<br/>• If all resolved addresses on file expire, we would report transaction failure instead of just asking for new ones. |

## v2.9.1

*August 25, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Improvements in sockets and DNS error reporting |

## v2.9.0

*August 9, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Introduce Signals support<br/>• Support subscribe V2 in C++ & Qt<br/>• Add pubnub_stop() for graceful shutdown when using callback interface |

## v2.8.4

*June 12, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Introduce minimal transaction timer duration<br/>• Use QTime for transaction timer duration |

## v2.8.3

*May 31, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Use TTL from DNS response (cache resolved addresses)<br/>• Better identification of the platform we run on<br/>• Detect authenticating proxy that works incorrectly |

## v2.8.2

*April 29, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Will try other address from (async) DNS response if first one fails<br/>• Will try secondary (async) DNS server if primary doesn't work |

## v2.8.1

*April 29, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Update pubnub_allooc_std.c to pubnub_cancel() changes |

## v2.8.0

*March 18, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Support Message Counts API |

## v2.7.0

*February 19, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Support IPv6 for DNS resolution (mostly for callback interface) |

## v2.6.4

*January 17, 2019*

| Type | Changes |
|------|----------|
| **Fixed** | • URL encode channel name(s) |

## v2.6.3

*January 8, 2019*

| Type | Changes |
|------|----------|
| **Modified** | • Update samples to changes in pubnub_cancel() and other interface changes<br/>• Update samples to use time() instead of clock() as clock() can measure CPU-only time instead of real time<br/>• Update Qt functional tests and make them reliable<br/>• UUID is now part of the Pubnub context (instead of a pointer to it). This makes handling its lifetime easier, yet does not incur much memory increase |
| **Fixed** | • C++ wrapper and Qt did not have proper multithreading support as they did not protect _their_ data. Now that is fixed. |

## v2.6.2

*December 20, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix memory leak regarding OpenSSL |

## v2.6.1

*December 2, 2018*

| Type | Changes |
|------|----------|
| **Modified** | • Publish can now be GZIPed (if done via POST) |
| **Fixed** | • Publish via POST encrypted could publish garbage and fail |

## v2.6.0

*November 20, 2018*

| Type | Changes |
|------|----------|
| **Modified** | • Publish can now be done via POST |
| **Fixed** | • Several smaller DNS en/de/coding issues fixed |

## v2.5.8

*November 8, 2018*

| Type | Changes |
|------|----------|
| **Modified** | • pubnub_await() in the sync interface now reports PNR_TIMEOUT on, well, (transaction) timeout |

## v2.5.7

*November 4, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • DNS en/de/coding could fail on some toolchains because of alignment issues. |

## v2.5.6

*November 2, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • TLS connection timeout was prone to errors due to time synchronisation and such. |

## v2.5.5

*November 1, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix wrong detection of PNR_TIMEOUT, by reset of TLS connect timer when connection is established. |

## v2.5.4

*October 18, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix DNS decoding |

## v2.5.3

*October 16, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Add support for pubnub_subscribe_v2() w/filter expressions<br/>• pubnub_cancel() returns is it done, or it just started the cancellation<br/>• Code that is only for TLS/SSL ifdef-ed out when not building w/TLS/SSL<br/>• Functional tests for C++ updated and now run on each commit |

## v2.5.2

*September 10, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Improved handling of lost connection while in HTTP Keep-Alive |
| **Added** | • pubnub_free() now implies pubnub_cancel()<br/>• pubnub_cancel() will now call pbnc_fsm() in the sync interface. Combined with previous, this makes it possible to call pubnub_free() in sync interface and have it succeed even if transaction is ongoing. |

## v2.5.1

*August 30, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Removed (unused) option to ignore TLS/SSL errors |

## v2.5.0

*August 28, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Support HTTPS CONNECT proxy<br/>• Can set proxy via IP address and `localhost`<br/>• Adhere to Connection&#58; close from server<br/>• Functional tests improved, can run concurrently |
| **Fixed** | • Possible pointer out of bounds fixed in JSON parser<br/>• MacOS build fixed |

## v2.4.3

*July 25, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Support OpenSSL 1.1.x with callback interface<br/>• Add support for filter expressions on subscribe<br/>• Enable receiving GZIP-ed reply |

## v2.4.2

*July 12, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Enable setting HTTP Keep-Alive use on/off for C++ and Qt |

## v2.4.1

*July 6, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Enable reading system DNS on Windows |
| **Fixed** | • Small fixes in system DNS reading/parsing |

## v2.4.0

*June 14, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Callback interface uses (our own) async DNS<br/>• Enable sending meta data when publishing<br/>• Enable setting `norep` (do not replicate) when publishing (with `store=false`, publish becomes "fire")<br/>• On MacOS, use SO_NOSIGPIPE to avoid SIGPIPE on the socket |
| **Fixed** | • Small fixes for async DNS<br/>• Bad handling of new transaction started in the callback and HTTP keep-alive was active<br/>• Bad handling of error (connection lost) when starting a new transaction on a HTTP kept-alive connection |

## v2.3.3

*April 11, 2018*

| Type | Changes |
|------|----------|
| **Added** | • On Linux, use MSG_NOSIGNAL to avoid SIGPIPE on send()<br/>• Add API to read proxy configuration<br/>• Send up-to-date version info in User-Agent HTTP header |
| **Fixed** | • Avoid (currently harmless) inconsistent locking order<br/>• Fix HTTP GET & CONNECT proxy w/HTTP Keep-Alive |

## v2.3.2

*March 10, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Unify default blocking I/O setting to block in sync and non-block in callback interface |

## v2.3.1

*March 8, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Read from OpenSSL in a loop, to handle more than one record received at a time<br/>• Fix minor race condition on timer expiry |

## v2.3.0

*March 5, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Use HTTP Keep-alive, where possible |

## v2.2.14

*February 6, 2018*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix removing the first context from the timer list |

## v2.2.13

*February 6, 2018*

| Type | Changes |
|------|----------|
| **Added** | • Support OpenSSL 1.1.0+ (BIO_(s|g)et_conn_ip -> BIO_(s|g)et_conn_address) |
| **Fixed** | • Handle chunks larger than http_buff<br/>• Fix receiving data longer than http_buff at a time |

## v2.2.12

*December 30, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Cleanups, fix build issue and warnings on Windows |

## v2.2.11

*October 30, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix resource leaks in C++ pubnub::futres on Windows |

## v2.2.10

*October 5, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix build issues on Mac |

## v2.2.9

*October 1, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix high CPU utilization when network out on Mac |

## v2.2.8

*September 25, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix off-by-one error |

## v2.2.7

*September 14, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix handling of recv() errrno on MacOS |

## v2.2.6

*September 10, 2017*

| Type | Changes |
|------|----------|
| **Added** | • Support OpenSSL 1.1.0+ (removed BIO_set_conn_port_int) |
| **Fixed** | • Some logging code was not using proper types |

## v2.2.5

*September 1, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix potential issue in interpreting UTF-8 char values |

## v2.2.4

*August 30, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix off-by-one error |

## v2.2.3

*March 9, 2017*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix handling of segmented messages |
| **Added** | • Improve exising and add new logging |

## v2.2.2

*October 12, 2016*

| Type | Changes |
|------|----------|
| **Added** | • Improve parsing of bad publish/subscribe key error<br/>• Add option to turn of SSL/TLS session reuse<br/>• PNR_TIMEOUT no longer resets the time token |
| **Fixed** | • Fixes and improvements of the console sample application |

## v2.2.1

*April 2, 2016*

| Type | Changes |
|------|----------|
| **Fixed** | • Fix C++ pubnub::futres destructor hanging up |

## v2.2.0

*February 22, 2016*

| Type | Changes |
|------|----------|
| **Added** | • First "core feature complete" release |
:::

### v7.2.2

May 14, 2026

| Fixed | Replace inline select()/FD_SET with poll() on non-Windows platforms in pbpal_check_connect(). On Linux and macOS FD_SET writes to a fixed 1024-bit bitmap and corrupts the stack when a socket fd value exceeds FD_SETSIZE. poll() has no fd-value limitation. Windows retains select() because its fd_set is array-based and safe. |
| --- | --- |
| Modified | Add pbpal_ntf_callback_poller_poll_unit_test.c covering init/deinit, save/remove, watch events, poll detection of readable and writable sockets, multiple sockets, socket update, and a high fd number test case (fd=1500) that validates the fix for the FD_SETSIZE overflow. |

### v7.2.1

May 6, 2026

| Fixed | Initialise logger request/response buffers in pbcc_init to make sure that the loggers doesn't receive junked data when cancelation occurs before request preparation., Fixed data race in situation when one logger used via logger_manager is being called from two different contexts. |
| --- | --- |

### v7.2.0

April 22, 2026

| Added | Allow users to select if they want to cache or consume the value of the cypher key depending on their crypto module implementation. |
| --- | --- |

### v7.1.3

April 16, 2026

| Modified | Add Windows async DNS resolution via DnsQueryEx and improve IPv6 fallback. |
| --- | --- |

### v7.1.2

March 18, 2026

| Fixed | Fix ABI mismatch where posix/windows sources picked the local pubnub_internal.h (wrong struct pubnub_pal size) on OpenSSL builds, so timeout fields were read as 0 and triggered an assertion. Use #include <pubnub_internal.h> so the include path selects the correct header per build., Add missing pubnub_uagent() function implementation for OpenSSL platform as declared in pubnub_version.h. Update pubnub_uname() format to match Windows and POSIX implementations and add PUBNUB_SDK_VERSION_SUFFIX support. |
| --- | --- |

### v7.1.1

March 12, 2026

| Fixed | Move offset_buf declaration outside the if block so it remains in scope when ENCODE_URL_PARAMETERS reads the stored pointer., Initialize part_sign to NULL instead of (char*)"" to avoid undefined behavior when free() is called in non-crypto builds., Each DNS query now gets a random 16-bit transaction ID via rand(), seeded once with time(NULL). IDs are stored in dns_queries_tracking and validated on response to ensure concurrent A and AAAA queries have distinct IDs per RFC 5452., Filter DNS server addresses with first octet >= 224 in is_valid_ipv4. Multicast, reserved/Class E, and broadcast ranges are not valid DNS server addresses., Release ee->mutw before calling PubNub APIs or pbcc_ee_handle_event to prevent lock-order inversion with the IO callback thread in both subscribe and unsubscribe paths. Add deadlock regression test covering all unsubscribe paths., Move m_lock acquisition after pbcc_deinit()/pbpal_free() because they don't need the global allocator lock and pbcc_subscribe_ee_free re-locks the non-recursive m_lock via pubnub_register_callback → pb_valid_ctx_ptr, causing self-deadlock on the same thread., Entity can outlive its parent pubnub_t context, so logging through _entity->pb is a use-after-free., Replace header-only probe (QDCOUNT=0) with a proper A-query for example.com and validate response transaction ID, fixing false negatives on resolvers that silently drop malformed packets. |
| --- | --- |
| Modified | Move pubnub_internal.h include above windows.h in pbcc_logger_manager.c so winsock2.h is included first, preventing redefinition errors in builds without _WINSOCKAPI_ defined., Use %u instead of %d for unsigned int count in snprintf to match the actual type., Add buffer edge cases, result stability, broadcast/multicast filtering, no-DNS adapter handling, adapter flapping stress test, and multiple DNS per adapter phases. Extend baseline with multicast check and IPv6 with duplicate detection. |

### v7.1.0

March 3, 2026

| Added | Add new logger API methods to C++ pubnub::context, Qt pubnub_qt, and Qt pubnub::context classes, guarded by PUBNUB_USE_LOGGER. |
| --- | --- |
| Modified | Change PUBNUB_LOG_MAP_SET_BOOL to PUBNUB_LOG_MAP_SET_NUMBER for opt.limit and opt.offset (both unsigned) in pubnub_here_now_ex and pubnub_global_here_now_ex so the actual numeric values are logged instead of being truncated to true/false., Use pbms_start/pbms_elapsed and pb_sleep_ms in pubnub_free_with_timeout to avoid a CPU-spinning loop and to fix portability issues with clock() on some platforms., Add PUBNUB_LOG_DEBUG messages for hostname resolution, selected DNS server, resolved addresses, and address family across POSIX/Windows sockets, FreeRTOS, and Microchip Harmony platforms, and promote existing connect-address logs from TRACE to DEBUG., Adjust log levels for missing DNS record messages to better match the severity of each event. |

### v7.0.2

February 27, 2026

| Modified | Relocate debug log from pubnub_enforce_api setter to pubnub_init config output under runtime selection guards. |
| --- | --- |

### v7.0.1

February 26, 2026

| Fixed | Add pubnub_internal.h and pubnub_logger_internal.h includes to pbcc_subscribe_event_engine_events.c and pbcc_crypto.c for logger macro availability., Move set->ee assignment before pubnub_subscription_set_add calls to prevent crash on uninitialized set->ee->pb dereference. |
| --- | --- |

### v7.0.0

February 26, 2026

| Added | BREAKING CHANGES: Added support for extendable logging, which can log structured data and allow to register customer loggers., Added default logger for POSIX/Windows (stdio), and separate for FreeRTOS and Harmony., Now request / response is logged as single log entries., Added mechanism to drastically reduce the amount of logs generated with sync await interface., Added way to set pn_sdk in runtime. |
| --- | --- |
| Fixed | Fix issue because of which pubnub_unsubscribe_with_subscription and pubnub_unsubscribe_with_subscription_set nullified passed pointer even if 'user' code still owns it., Save mutex to local variable before freeing subscription and subscription_set to avoid dereferencing freed memory on unlock/destroy., Unregister PubNub callback in pbcc_subscribe_ee_free() so late async completions do not invoke it with freed ee as user_data., pbarray_remove() uses pointer equality; match by (callback, user_data) and remove by index with pbarray_remove_element_at() so the intended listener is actually removed., Move NULL check for cryptor_header before the first dereference in pbcc_cryptor_header_v1_to_alloc_block and remove the redundant check., Guard subs dereference in pubnub_subscription_set_union and pubnub_subscription_set_subtract with a NULL check before the loop., Fix adding long message actions by disabling Gzip compression., Access .ipv4 member when assigning parsed address to dns_bytes., Use getsockname() to verify a Global Unicast source (2000::/3) instead of trusting connect(). |
| Modified | Fixed issues because of which TLS read returned right away to the state machine without even waiting for select. |

### v6.2.0

December 10, 2025

| Added | Add working IPv6 route detection to decide the preferable connection interface., When built with PUBNUB_DNS_SERVERS_VALIDATION_TIMEOUT set to delay in milliseconds, system DNS servers' discovery will make an actual DNS query, and the value will be used as a request timeout., Add handling of the IPv6 proxy address provided by automated (or PAC) proxy discovery API. |
| --- | --- |
| Fixed | Fix issue because of which pubnub_await wasn't waiting after pubnub_cancel has been called., Fix WinHttpGetProxyForUrl usage with URL with schema instead of domain only., Fix issue with /etc/resolv.conf parsing where untrimmed string produced wrong address., Some Windows-related interfaces, because of different pubnub_ struct layouts caused by different pubnub_config.h type aliases and pre-processing macros, accessed and modified wrong fields., Fix set_from_url4proxy for proper lpszProxy parsing. |
| Modified | Add defaults for PUBNUB_ADVANCED_KEEP_ALIVE in all related pubnub_config.h files., When built with IPv6 support, first try to use any of the user-provided IPv6 DNS servers before falling back to the user-provided IPv4 before falling back to the address provided by a well-known DNS provider., When built with IPv6 support, SDK will send two queries to receive both records and decide which will be most suitable for currently available routing. |

### v6.1.0

November 17, 2025

| Added | Added SNI (Server Name Indication) support for TLS connections., Added hostname verification for SSL/TLS certificates to prevent MITM attacks. |
| --- | --- |
| Modified | Update bundled certificates (added Amazon Root CA 1) which is used for secured connection and peers verification., Filter out DNS servers received from disconnected adapters, loopback, and APIPA addresses., Added tests to test DNS server discovery in a controlled Windows environment (manual). |

### v6.0.0

November 7, 2025

| Added | BREAKING CHANGES: Add limit and offset parameters to pubnub_here_now_options used in pubnub_here_now_ex. Set limit to be set to default (1000) for pubnub_here_now (not ex) function. |
| --- | --- |
| Modified | Try receiving DNS servers with DnsQueryConfig and fallback to the adapters with GetAdaptersAddresses. |

### v5.4.0

October 21, 2025

| Added | Provide interfaces (pubnub_use_tcp_keep_alive, pubnub_dont_use_tcp_keep_alive, use_tcp_keep_alive, and dont_use_tcp_keep_alive) to set up active TCP connection keep-alive packet sending. |
| --- | --- |
| Fixed | Replace the Windows API, which in a multithreaded environment became a reason for crashes during the DNS resolution process., Fix the issue because of which client created a secondary connection when built with PUBNUB_USE_IPV6 support. |

### v5.3.2

September 23, 2025

| Fixed | Fix the issue because of which poll always returned immediately without waiting for the actual event (TLS handshake flow uses proper watcher now). |
| --- | --- |

### v5.3.1

September 17, 2025

| Fixed | Add fix to CPP wrapper to fix guard crash that could happen during freeing context. |
| --- | --- |

### v5.3.0

September 2, 2025

| Added | Add a field that lets the user specify a timetoken for catch-up or 0 to make an initial / handshake subscription. |
| --- | --- |
| Fixed | Fix subscribe v2 types visibility when USE_SUBSCRIBE_V2 not set. |

### v5.2.0

August 19, 2025

| Added | Expose functions through the C++ interface to enable or disable system SSL certificate usage when establishing a secure connection. |
| --- | --- |

### v5.1.6

August 5, 2025

| Fixed | Fixed deadlock for sync polling via last_result. |
| --- | --- |

### v5.1.5

July 28, 2025

| Fixed | Define sleep function for Windows builds. |
| --- | --- |
| Modified | Guard unistd inclusion with platform check. |

### v5.1.4

July 22, 2025

| Fixed | Fix bug that UTF8 characters used in some end points were breaking the request format. |
| --- | --- |

### v5.1.3

July 15, 2025

| Fixed | Fixed memory leak when calling pubnub_free on an initialized PubNub object., Fixed socket leak when calling pubnub_free on a PubNub object with an open connection., Fixed socket leak when publishing using a context with use_http_keep_alive = 0., Fixed crash due to double-free when calling pubnub_free after pbpal_handle_socket_condition encounters a socket error. |
| --- | --- |

### v5.1.2

July 8, 2025

| Modified | Use recursive semaphore for mutex lock and unlock in pbpal_mutex.h. |
| --- | --- |

### v5.1.1

June 26, 2025

| Fixed | Fix issue because of which it was impossible for sync PubNub context version to cancel operation awaited in secondary thread. |
| --- | --- |
| Modified | Fix the code for which the compiler emitted warnings during the build for mbedTLS and ESP_PLATFORM=1. |

### v5.1.0

June 19, 2025

| Added | Add functions which allow to enable and disable 'smart heartbeat' behavior for automatic heartbeat: pubnub_enable_smart_heartbeat and pubnub_disable_smart_heartbeat., Add pubnub_last_publish_timetoken function to retrieve recently published message high precision timetoken. |
| --- | --- |
| Fixed | Fix issue which caused deadlock on secondary thread and as result heartbeat stop., Fix signature of pbntf_init_callback and its usage in Windows dedicated code. |

### v5.0.3

June 17, 2025

| Fixed | Fixed wrong string copy if multiple channels(groups) are provided for pubnub_set_state. Note that using memcpy instead of strncpy is used intentionally because of the ESP support., Fixed crash when double comma is provided to pubnub_set_state as a channels(groups)., Fixed wrong check if the reallocation is required in pubnub_set_state., Removed additional allocation of memory for temporary data., Changed the amount of bytes allocated based on the provided parameters instead of hardcoded values. |
| --- | --- |

### v5.0.2

June 2, 2025

| Fixed | Fix pubnub_reconnect and pubnub_disconnect not to print an error when called within incorrect subscription state. Warning will be printed instead and function won't execute further. |
| --- | --- |

### v5.0.1

May 26, 2025

| Fixed | Fix crashes that could sometimes happen during unsubscribe due to calling strlen on null pointers., Fix pubnub_fetch_history function when used with crypto api. Change PUBNUB_MAX_URL_PARAMS to 12., Fix the issue that was causing memory fragmentation fault at the moment of the next automated heartbeat call. |
| --- | --- |

### v5.0.0

April 3, 2025

| Added | Add PUBNUB_NTF_RUNTIME_SELECTION flag that allows to select API type at runtime., Introduce void* parameter for user data in listeners to let callbacks keep context on demand. |
| --- | --- |

### v4.19.1

April 2, 2025

| Fixed | Fix the issue that there was an assertion when using App Context functions with limit set to 100. |
| --- | --- |

### v4.19.0

March 19, 2025

| Added | Add the ability to set timetoken (for message catchup) in pubnub_subscribe_v2_options which is used with pubnub_subscribe_v2. |
| --- | --- |
| Fixed | Fix issue which was source of segmentation fault when tried to access memory after it has been freed. |

### v4.18.1

February 11, 2025

| Fixed | Fix issue because of which signature value in query has been truncated. |
| --- | --- |

### v4.18.0

February 6, 2025

| Added | Add status and type support for channel and uuid metadata objects state update API. |
| --- | --- |

### v4.17.0

January 16, 2025

| Added | Add possibility to replace default log function with a callback provided by the user. |
| --- | --- |

### v4.16.1

January 9, 2025

| Fixed | Remove the user_id length restriction for dynamically allocated memory for it. |
| --- | --- |
| Modified | Configure try_compile when building a static library. |

### v4.16.0

December 25, 2024

| Added | Additional flags for C/CPP can be set with: USER_C_FLAGS / USER_CXX_FLAGS. |
| --- | --- |
| Fixed | Fix because of which one of the source files has been missed for Windows., Fix issue with unsupported concatenation of sources files / definitions (+=). |
| Modified | Refactor our Makefiles from different folders and platforms to use include directives to include shared definitions, flags, source files. |

### v4.15.0

November 25, 2024

| Added | Add custom message type support for the following APIs: publish, signal, share file, subscribe and history., Add pubnub_set_ipv4_connectivity and pubnub_set_ipv6_connectivity to pubnub_coreapi to switch preferred connectivity protocol. |
| --- | --- |
| Fixed | Make sure that in case of connection close (including because of error) proxy context object will be reset. |

### v4.14.1

October 24, 2024

| Fixed | Fix CMakeLists to build correctly on Windows. |
| --- | --- |
| Modified | Prepare CMakeLists to support builds for Arm64 architecture. |

### v4.14.0

October 15, 2024

| Added | Add core Event Engine implementation with the required set of types and methods., Add Subscribe Event Engine built atop of the core Event Engine implementation., Add the following entities: channel, channel group, uuid and channel metadata objects., Add objects to manage subscriptions and provides interface for update listeners., Add new event listeners, which make it possible to add listeners to a specific entity or group of entities (though subscription and subscription set)., Added ability to configure automated retry policies for failed requests. |
| --- | --- |

### v4.13.1

September 5, 2024

| Fixed | Removed additional null byte character. |
| --- | --- |

### v4.13.0

August 9, 2024

| Added | Add delete message API support to the advanced history module. |
| --- | --- |

### v4.12.3

August 5, 2024

| Fixed | Add the missing ttl parameter to the pubnub_publish_options for extended publish configuration. |
| --- | --- |

### v4.12.2

August 5, 2024

| Fixed | Fixed custom bool type for CMake builds. |
| --- | --- |

### v4.12.1

August 5, 2024

| Fixed | Fix query values for boolean flags for history endpoint (include meta, include uuid, include message type and reverse). |
| --- | --- |

### v4.12.0

July 29, 2024

| Added | Added filter and sort parameters to be closer to the other SDKs with object API., Configurable bool type. |
| --- | --- |
| Fixed | Missing features needed for grant token API in CMakeLIsts.txt. |

### v4.11.2

July 15, 2024

| Fixed | Added missing subscribe v2 crypto implementation. |
| --- | --- |

### v4.11.1

June 28, 2024

| Fixed | Fixed cmake build for not ESP32 builds. |
| --- | --- |

### v4.11.0

June 27, 2024

| Added | Provided support for ESP32 devices via ESP-IDF framework., Provided support for MBedTLS library used within esp32 platform. |
| --- | --- |
| Modified | Replace strncpy with strcpy in blocks where it is safer to be used. |

### v4.10.0

June 14, 2024

| Added | Added possibility to use strings in actions API. |
| --- | --- |
| Modified | pubnub_action_type enum has been deprecated. |

### v4.9.1

March 26, 2024

| Fixed | Fix too small amount of memory allocated for aes cbc algorithm in some cases. |
| --- | --- |
| Modified | Add possibility to include address sanitizer in build via CMake. |

### v4.9.0

January 8, 2024

| Added | Provide CMake support., Adjust build.cs unreal engine file for CMake build. |
| --- | --- |

### v4.8.0

December 7, 2023

| Added | Add #if switches into files that are related to PubNub features to not rely only on makefiles. [Be careful when update. It's not a breaking change at all but might fail build for custom makefiles!]. |
| --- | --- |

### v4.7.1

November 23, 2023

| Fixed | Handle unencrypted message while getting messages with crypto. |
| --- | --- |

### v4.7.0

November 20, 2023

| Added | Provided PUBNUB_EXTERN macro to extern C functions. |
| --- | --- |

### v4.6.2

November 14, 2023

| Fixed | Fix pubnub_free() function on not initialised PubNub that can cause exceptions/undefined behaviours. |
| --- | --- |

### v4.6.1

November 8, 2023

| Fixed | Provide missing publish() function overload for QT wrapper that allows set publish related options. |
| --- | --- |

### v4.6.0

October 30, 2023

| Added | Add the PUBNUB_QT_MOVE_TO_THREAD flag as default to give users the opportunity to manage threads by themselves. |
| --- | --- |
| Fixed | Move pubnub_qt into QT main thread by default to be sure that timers will be run in it. |

### v4.5.0

October 16, 2023

| Added | Update the crypto module structure and add enhanced AES-CBC cryptor. |
| --- | --- |
| Fixed | Improved security of crypto implementation by increasing the cipher key entropy by a factor of two., Fixed missing return from failed pbaes256_decrypt_alloc() function. |

### v4.4.0

September 28, 2023

| Added | Provide module files to integrate SDK with Unreal Enigne. |
| --- | --- |

### v4.3.0

July 24, 2023

| Added | Add publisher field into pubnub_v2_message. |
| --- | --- |
| Fixed | Fixed flags and region values that always equaled 0. |

### v4.2.2

May 24, 2023

| Fixed | Conditionally use of using newest openssl API Ipv4 parsing is needed for working with proxy. Include object file with that function for proxy builds. |
| --- | --- |
| Modified | Use newest openssl API. |

### v4.2.1

April 26, 2023

| Modified | Conditionally use sha256 when build is linked with OpenSSL 3+ version. |
| --- | --- |

### v4.2.0

February 7, 2023

| Added | Updated QT to version 6.*. |
| --- | --- |
| Fixed | Fixed not building QT module., Align QT module with current SDK state. |
| Modified | Removed some states, classes and structs that aren't currently used. |

### v4.1.0

January 16, 2023

| Added | Added pubnub_set_state_ex to support heartbeat. |
| --- | --- |
| Fixed | Removed state param from subscribe request., Added state param to hearbeat request. |

### v4.0.6

December 14, 2022

| Fixed | Fixed hanging allocated memory after error in parse_token by cleaning the result memory on cbor error. |
| --- | --- |
| Modified | Implemented more tests for pubnub_token_parse function to increase confidence about that function., Refactored implementation of some tests' setups. |

### v4.0.5

December 2, 2022

| Fixed | Fixed compilation error for MSVC in pubnub_parse_token function. |
| --- | --- |

### v4.0.4

November 25, 2022

| Fixed | Fixed crashing parsing token for not valid values by logging an error and returning NULL. |
| --- | --- |

### v4.0.3

November 17, 2022

| Fixed | Fixed wrong pointer reallocation in string concatenation., Fixed allocation counter that was not taking to the account recursed allocations. |
| --- | --- |

### v4.0.2

November 15, 2022

| Fixed | Improved accuracy of the base64 encoding size what fixes buffer underflow in encryption module., Fixed undefined behaviours in pubnub_encrypt_decrypt_iv_sample.c by including some additional checks and variable initialisations. |
| --- | --- |
| Modified | Made same base for encrypt functions what makes codes easier to understand and maintain. |

### v4.0.1

November 8, 2022

| Fixed | ERR_load_BIO_strings() is deprecated in OpenSSL 3.0. Low-level encoding primitives are also deprecated. EVP_EncodeBlock() is available in all currently supported OpenSSL releases. |
| --- | --- |

### v4.0.0

November 2, 2022

| Added | Add user_id configuration option that deprecates uuid ones., BREAKING CHANGES: now user_id (old uuid) is a required property!. |
| --- | --- |

### v3.5.2

October 11, 2022

| Fixed | Fix memory leak in cpp parse_token method., Fix buffer overflow in core pubnub_parse_token function for some cases., Fix buffer overflow in core pubnub_encrypt function for randomized initial vector. |
| --- | --- |

### v3.5.1

September 22, 2022

| Fixed | Fix wrong parsing uuid in parse_token., Fix case sensitive header check. |
| --- | --- |

### v3.5.0

September 8, 2022

| Added | Implemented Fetch History. |
| --- | --- |

### v3.4.3

July 5, 2022

| Fixed | Removed extra parenthesis in get_dns_ip function code., Added uuid query param to history, set/get state, wherenow, channel-group operations. |
| --- | --- |

### v3.4.2

April 25, 2022

| Fixed | Handle state for subscribe and resubscribe. |
| --- | --- |

### v3.4.1

March 9, 2022

| Fixed | Support system name servers in async DNS client., Fix multiple memory safety and leak issues., Fix slash char encoding for pnsdk. |
| --- | --- |

### v3.4.0

January 11, 2022

| Added | Add token permissions revoke functionality. |
| --- | --- |
| Fixed | Remove body from signature calculation for requests with DELETE HTTP method. |
| Modified | Update .pubnub.yml file with access token revoke and secret key all access. |

### v3.3.2

January 10, 2022

| Fixed | Filter-expr query param typo. |
| --- | --- |

### v3.3.1

January 5, 2022

| Fixed | Encode = (equal) sign for filter expression. |
| --- | --- |

### v3.3.0

October 11, 2021

| Added | Implemented PAMv3 support. |
| --- | --- |
| Fixed | Handle subscribe error for empty channel-group. |

### v3.2.0

September 15, 2021

| Fixed | Error codes for missing subscribe timetoken. |
| --- | --- |

### v3.1.0

June 14, 2021

| Added | Added PAMv3 Grant Token support. |
| --- | --- |

### v3.0.0

May 24, 2021

| Added | BREAKING CHANGE - Added PUBNUB_RAND_INIT_VECTOR to support dynamic IV, default to true. |
| --- | --- |

### v2.14.0

May 10, 2021

| Fixed | Handling Access Denied server error in Pubnub Access Manager requests. |
| --- | --- |

### v2.13.0

April 20, 2021

| Added | Implemented Pubnub Access Manager Support., Implemented Objects V2. Removed Objects V1. |
| --- | --- |

### v2.12.7

January 20, 2021

| Added | Added support for Universal Windows(UWP). |
| --- | --- |

### v2.12.6

October 3, 2020

| Fixed | Fix DNS servers rotation during transaction origin DNS resolution timeout. |
| --- | --- |

### v2.12.5

April 8, 2020

| Modified | Dynamically allocate memory for uuid in pubnub_set_uuid function. |
| --- | --- |

### v2.12.4

January 31, 2020

| Fixed | Properly handle DNS retries and stale HTTP Kept-Alive connections |
| --- | --- |

### v2.12.3

January 16, 2020

| Fixed | Fix assertion failure while retrying timed out DNS queries with multiple contexts |
| --- | --- |

### v2.12.2

December 5, 2019

| Modified | Add support for automatic sending of heartbeat messages with sync interface (POSIX and Windows) |
| --- | --- |

### v2.12.1

November 22, 2019

| Modified | Add support for automatic sending of heartbeat messages on Windows, callback. |
| --- | --- |

### v2.12.0

November 15, 2019

| Modified | Support automatic sending of heartbeat messages (only on POSIX, callback, for now). |
| --- | --- |

### v2.11.1

October 25, 2019

| Fixed | Fix Qt |
| --- | --- |

### v2.11.0

October 20, 2019

| Modified | Introduce Actions API, Add 'include_meta' parameter to pubnub_history_ex() |
| --- | --- |
| Fixed | Fix stopwatch not working after 25 days |

### v2.10.2

October 18, 2019

| Fixed | Restore get/set connection timeout in C++ wrapper |
| --- | --- |

### v2.10.1

October 2, 2019

| Modified | Retry if DNS server does not respond. Number of retries is a compile-time parameter. |
| --- | --- |
| Fixed | In C++, fix transaction finishing before user starts to wait for it to finish. |

### v2.10.0

September 23, 2019

| Modified | Introduce Objects API |
| --- | --- |
| Fixed | Fix high history (extended/full) handling of 'reverse' and other boolean parameters |

### v2.9.4

September 10, 2019

| Modified | Introduce separate connection timer, to control/limit the duration of DNS resolving and connection establishment, which should be much shorter than full transaction timer, which has to be >5 min for subscribe |
| --- | --- |
| Fixed | Fix high CPU load in callback interface when no context, thus socket, is executing a transaction |

### v2.9.3

September 3, 2019

| Modified | Detect TCP/IP connect timeout in callback mode w/sockets - does not seem to work on Windows, Add set_proxy_none() to pubnub::context |
| --- | --- |

### v2.9.2

August 28, 2019

| Fixed | Proxy admin functions (set, get) were not protected by mutex/monitor, so caused a race condition, Setting new proxy might have been ignored until the resolved DNS addresses of the previous proxy expire., If all resolved addresses on file expire, we would report transaction failure instead of just asking for new ones. |
| --- | --- |

### v2.9.1

August 25, 2019

| Modified | Improvements in sockets and DNS error reporting |
| --- | --- |

### v2.9.0

August 9, 2019

| Modified | Introduce Signals support, Support subscribe V2 in C++ & Qt, Add pubnub_stop() for graceful shutdown when using callback interface |
| --- | --- |

### v2.8.4

June 12, 2019

| Modified | Introduce minimal transaction timer duration, Use QTime for transaction timer duration |
| --- | --- |

### v2.8.3

May 31, 2019

| Modified | Use TTL from DNS response (cache resolved addresses), Better identification of the platform we run on, Detect authenticating proxy that works incorrectly |
| --- | --- |

### v2.8.2

April 29, 2019

| Modified | Will try other address from (async) DNS response if first one fails, Will try secondary (async) DNS server if primary doesn't work |
| --- | --- |

### v2.8.1

April 29, 2019

| Modified | Update pubnub_allooc_std.c to pubnub_cancel() changes |
| --- | --- |

### v2.8.0

March 18, 2019

| Modified | Support Message Counts API |
| --- | --- |

### v2.7.0

February 19, 2019

| Modified | Support IPv6 for DNS resolution (mostly for callback interface) |
| --- | --- |

### v2.6.4

January 17, 2019

| Fixed | URL encode channel name(s) |
| --- | --- |

### v2.6.3

January 8, 2019

| Modified | Update samples to changes in pubnub_cancel() and other interface changes, Update samples to use time() instead of clock() as clock() can measure CPU-only time instead of real time, Update Qt functional tests and make them reliable, UUID is now part of the Pubnub context (instead of a pointer to it). This makes handling its lifetime easier, yet does not incur much memory increase |
| --- | --- |
| Fixed | C++ wrapper and Qt did not have proper multithreading support as they did not protect _their_ data. Now that is fixed. |

### v2.6.2

December 20, 2018

| Fixed | Fix memory leak regarding OpenSSL |
| --- | --- |

### v2.6.1

December 2, 2018

| Modified | Publish can now be GZIPed (if done via POST) |
| --- | --- |
| Fixed | Publish via POST encrypted could publish garbage and fail |

### v2.6.0

November 20, 2018

| Modified | Publish can now be done via POST |
| --- | --- |
| Fixed | Several smaller DNS en/de/coding issues fixed |

### v2.5.8

November 8, 2018

| Modified | pubnub_await() in the sync interface now reports PNR_TIMEOUT on, well, (transaction) timeout |
| --- | --- |

### v2.5.7

November 4, 2018

| Fixed | DNS en/de/coding could fail on some toolchains because of alignment issues. |
| --- | --- |

### v2.5.6

November 2, 2018

| Fixed | TLS connection timeout was prone to errors due to time synchronisation and such. |
| --- | --- |

### v2.5.5

November 1, 2018

| Fixed | Fix wrong detection of PNR_TIMEOUT, by reset of TLS connect timer when connection is established. |
| --- | --- |

### v2.5.4

October 18, 2018

| Fixed | Fix DNS decoding |
| --- | --- |

### v2.5.3

October 16, 2018

| Added | Add support for pubnub_subscribe_v2() w/filter expressions, pubnub_cancel() returns is it done, or it just started the cancellation, Code that is only for TLS/SSL ifdef-ed out when not building w/TLS/SSL, Functional tests for C++ updated and now run on each commit |
| --- | --- |

### v2.5.2

September 10, 2018

| Fixed | Improved handling of lost connection while in HTTP Keep-Alive |
| --- | --- |
| Added | pubnub_free() now implies pubnub_cancel(), pubnub_cancel() will now call pbnc_fsm() in the sync interface. Combined with previous, this makes it possible to call pubnub_free() in sync interface and have it succeed even if transaction is ongoing. |

### v2.5.1

August 30, 2018

| Added | Removed (unused) option to ignore TLS/SSL errors |
| --- | --- |

### v2.5.0

August 28, 2018

| Added | Support HTTPS CONNECT proxy, Can set proxy via IP address and localhost, Adhere to Connection: close from server, Functional tests improved, can run concurrently |
| --- | --- |
| Fixed | Possible pointer out of bounds fixed in JSON parser, MacOS build fixed |

### v2.4.3

July 25, 2018

| Added | Support OpenSSL 1.1.x with callback interface, Add support for filter expressions on subscribe, Enable receiving GZIP-ed reply |
| --- | --- |

### v2.4.2

July 12, 2018

| Added | Enable setting HTTP Keep-Alive use on/off for C++ and Qt |
| --- | --- |

### v2.4.1

July 6, 2018

| Added | Enable reading system DNS on Windows |
| --- | --- |
| Fixed | Small fixes in system DNS reading/parsing |

### v2.4.0

June 14, 2018

| Added | Callback interface uses (our own) async DNS, Enable sending meta data when publishing, Enable setting norep (do not replicate) when publishing (with store=false, publish becomes "fire"), On MacOS, use SO_NOSIGPIPE to avoid SIGPIPE on the socket |
| --- | --- |
| Fixed | Small fixes for async DNS, Bad handling of new transaction started in the callback and HTTP keep-alive was active, Bad handling of error (connection lost) when starting a new transaction on a HTTP kept-alive connection |

### v2.3.3

April 11, 2018

| Added | On Linux, use MSG_NOSIGNAL to avoid SIGPIPE on send(), Add API to read proxy configuration, Send up-to-date version info in User-Agent HTTP header |
| --- | --- |
| Fixed | Avoid (currently harmless) inconsistent locking order, Fix HTTP GET & CONNECT proxy w/HTTP Keep-Alive |

### v2.3.2

March 10, 2018

| Fixed | Unify default blocking I/O setting to block in sync and non-block in callback interface |
| --- | --- |

### v2.3.1

March 8, 2018

| Fixed | Read from OpenSSL in a loop, to handle more than one record received at a time, Fix minor race condition on timer expiry |
| --- | --- |

### v2.3.0

March 5, 2018

| Added | Use HTTP Keep-alive, where possible |
| --- | --- |

### v2.2.14

February 6, 2018

| Fixed | Fix removing the first context from the timer list |
| --- | --- |

### v2.2.13

February 6, 2018

| Added | Support OpenSSL 1.1.0+ (BIO_(s|g)et_conn_ip -> BIO_(s|g)et_conn_address) |
| --- | --- |
| Fixed | Handle chunks larger than http_buff, Fix receiving data longer than http_buff at a time |

### v2.2.12

December 30, 2017

| Fixed | Cleanups, fix build issue and warnings on Windows |
| --- | --- |

### v2.2.11

October 30, 2017

| Fixed | Fix resource leaks in C++ pubnub::futres on Windows |
| --- | --- |

### v2.2.10

October 5, 2017

| Fixed | Fix build issues on Mac |
| --- | --- |

### v2.2.9

October 1, 2017

| Fixed | Fix high CPU utilization when network out on Mac |
| --- | --- |

### v2.2.8

September 25, 2017

| Fixed | Fix off-by-one error |
| --- | --- |

### v2.2.7

September 14, 2017

| Fixed | Fix handling of recv() errrno on MacOS |
| --- | --- |

### v2.2.6

September 10, 2017

| Added | Support OpenSSL 1.1.0+ (removed BIO_set_conn_port_int) |
| --- | --- |
| Fixed | Some logging code was not using proper types |

### v2.2.5

September 1, 2017

| Fixed | Fix potential issue in interpreting UTF-8 char values |
| --- | --- |

### v2.2.4

August 30, 2017

| Fixed | Fix off-by-one error |
| --- | --- |

### v2.2.3

March 9, 2017

| Fixed | Fix handling of segmented messages |
| --- | --- |
| Added | Improve exising and add new logging |

### v2.2.2

October 12, 2016

| Added | Improve parsing of bad publish/subscribe key error, Add option to turn of SSL/TLS session reuse, PNR_TIMEOUT no longer resets the time token |
| --- | --- |
| Fixed | Fixes and improvements of the console sample application |

### v2.2.1

April 2, 2016

| Fixed | Fix C++ pubnub::futres destructor hanging up |
| --- | --- |

### v2.2.0

February 22, 2016

| Added | First "core feature complete" release |
| --- | --- |