diff --git a/README.md b/README.md
index 41b872db..cabed7a7 100644
--- a/README.md
+++ b/README.md
@@ -2,10 +2,12 @@
-# cpp_redis [](https://travis-ci.org/Cylix/cpp_redis) [](https://ci.appveyor.com/project/Cylix/cpp-redis)
+# cpp_redis
`cpp_redis` is a C++11 Asynchronous Multi-Platform Lightweight Redis Client, with support for synchronous operations, pipelining, sentinels and high availability.
+This fork supports TLS encrypted connections (Windows client only) when using the referenced fork of the tacopie network module.
+
## Requirement
`cpp_redis` has **no dependency**. Its only requirement is `C++11`.
diff --git a/includes/cpp_redis/core/client.hpp b/includes/cpp_redis/core/client.hpp
index e3ac14e0..6e46d0b7 100644
--- a/includes/cpp_redis/core/client.hpp
+++ b/includes/cpp_redis/core/client.hpp
@@ -111,6 +111,7 @@ namespace cpp_redis {
* @param timeout_ms maximum time to connect
* @param max_reconnects maximum attempts of reconnection if connection dropped
* @param reconnect_interval_ms time between two attempts of reconnection
+ * @param use_encryption enables TLS when set to true
*
*/
void connect(
@@ -119,7 +120,8 @@ namespace cpp_redis {
const connect_callback_t &connect_callback = nullptr,
std::uint32_t timeout_ms = 0,
std::int32_t max_reconnects = 0,
- std::uint32_t reconnect_interval_ms = 0);
+ std::uint32_t reconnect_interval_ms = 0,
+ bool use_encryption = false);
/**
* Connect to redis server
@@ -136,7 +138,8 @@ namespace cpp_redis {
const connect_callback_t &connect_callback = nullptr,
std::uint32_t timeout_ms = 0,
std::int32_t max_reconnects = 0,
- std::uint32_t reconnect_interval_ms = 0);
+ std::uint32_t reconnect_interval_ms = 0,
+ bool use_encryption = false);
/**
* @return whether we are connected to the redis server
@@ -321,9 +324,10 @@ namespace cpp_redis {
* @param host sentinel host
* @param port sentinel port
* @param timeout_ms maximum time to connect
+ * @param use_encryption enables TLS when set to true
*
*/
- void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms = 0);
+ void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms = 0, bool use_encryption = false);
/**
* retrieve sentinel for current client
@@ -2321,6 +2325,11 @@ namespace cpp_redis {
std::uint32_t m_reconnect_interval_ms = 0;
/**
+ * use encryption
+ *
+ */
+ bool m_use_encryption = false;
+ /**
* reconnection status
*
*/
diff --git a/includes/cpp_redis/core/consumer.hpp b/includes/cpp_redis/core/consumer.hpp
index e6c71022..e57e2b89 100644
--- a/includes/cpp_redis/core/consumer.hpp
+++ b/includes/cpp_redis/core/consumer.hpp
@@ -82,6 +82,7 @@ namespace cpp_redis {
* @param timeout_ms maximum time to connect
* @param max_reconnects maximum attempts of reconnection if connection dropped
* @param reconnect_interval_ms time between two attempts of reconnection
+ * @param use_encryption enables TLS when set to true
*/
void connect(
const std::string &host = "127.0.0.1",
@@ -89,7 +90,8 @@ namespace cpp_redis {
const connect_callback_t &connect_callback = nullptr,
std::uint32_t timeout_ms = 0,
std::int32_t max_reconnects = 0,
- std::uint32_t reconnect_interval_ms = 0);
+ std::uint32_t reconnect_interval_ms = 0,
+ bool use_encryption = false);
void auth(const std::string &password,
const reply_callback_t &reply_callback = nullptr);
diff --git a/includes/cpp_redis/core/sentinel.hpp b/includes/cpp_redis/core/sentinel.hpp
index 21d9190c..4c4c0124 100644
--- a/includes/cpp_redis/core/sentinel.hpp
+++ b/includes/cpp_redis/core/sentinel.hpp
@@ -152,7 +152,7 @@ namespace cpp_redis {
* @return current instance
*
*/
- sentinel &add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms = 0);
+ sentinel &add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms = 0, bool use_encryption = false);
/**
* clear all existing sentinels.
@@ -198,13 +198,14 @@ namespace cpp_redis {
* @param port port to be connected to
* @param timeout_ms maximum time to connect
* @param disconnect_handler handler to be called whenever disconnection occurs
+ * @param use_encryption enables TLS when set to true
*
*/
void connect(
const std::string &host,
std::size_t port,
const sentinel_disconnect_handler_t &disconnect_handler = nullptr,
- std::uint32_t timeout_ms = 0);
+ std::uint32_t timeout_ms = 0, bool use_encryption = false);
/**
* Used to find the current redis master by asking one or more sentinels. Use high availability.
@@ -264,8 +265,8 @@ namespace cpp_redis {
* ctor
*
*/
- sentinel_def(std::string host, std::size_t port, std::uint32_t timeout_ms)
- : m_host(std::move(host)), m_port(port), m_timeout_ms(timeout_ms) {}
+ sentinel_def(std::string host, std::size_t port, std::uint32_t timeout_ms, bool use_encryption)
+ : m_host(std::move(host)), m_port(port), m_timeout_ms(timeout_ms), m_use_encryption(use_encryption) {}
/**
* dtor
@@ -303,7 +304,22 @@ namespace cpp_redis {
void
set_timeout_ms(std::uint32_t timeout_ms) { m_timeout_ms = timeout_ms; }
- private:
+ /**
+ * @return use_encryption for sentinel
+ *
+ */
+ bool
+ get_use_encryption() const { return m_use_encryption; }
+
+ /**
+ * set use_encryption for sentinel
+ * @param use_encryption new value
+ *
+ */
+ void
+ set_use_encryption(bool use_encryption) { m_use_encryption = use_encryption; }
+
+ private:
/**
* sentinel host
*
@@ -321,7 +337,12 @@ namespace cpp_redis {
*
*/
std::uint32_t m_timeout_ms;
- };
+ /**
+ * use_encryption config
+ *
+ */
+ bool m_use_encryption;
+ };
public:
/**
diff --git a/includes/cpp_redis/core/subscriber.hpp b/includes/cpp_redis/core/subscriber.hpp
index 6b46e1ab..82bddc23 100644
--- a/includes/cpp_redis/core/subscriber.hpp
+++ b/includes/cpp_redis/core/subscriber.hpp
@@ -89,6 +89,7 @@ namespace cpp_redis {
* @param timeout_ms maximum time to connect
* @param max_reconnects maximum attempts of reconnection if connection dropped
* @param reconnect_interval_ms time between two attempts of reconnection
+ * @param use_encryption enables TLS when set to true
*
*/
void connect(
@@ -97,7 +98,8 @@ namespace cpp_redis {
const connect_callback_t &connect_callback = nullptr,
std::uint32_t timeout_ms = 0,
std::int32_t max_reconnects = 0,
- std::uint32_t reconnect_interval_ms = 0);
+ std::uint32_t reconnect_interval_ms = 0,
+ bool use_encryption = false);
/**
* @brief Connect to redis server
@@ -106,6 +108,7 @@ namespace cpp_redis {
* @param timeout_ms maximum time to connect
* @param max_reconnects maximum attempts of reconnection if connection dropped
* @param reconnect_interval_ms time between two attempts of reconnection
+ * @param use_encryption enables TLS when set to true
*
*/
void connect(
@@ -113,7 +116,8 @@ namespace cpp_redis {
const connect_callback_t &connect_callback = nullptr,
std::uint32_t timeout_ms = 0,
std::int32_t max_reconnects = 0,
- std::uint32_t reconnect_interval_ms = 0);
+ std::uint32_t reconnect_interval_ms = 0,
+ bool use_encryption = false);
/**
* @brief determines client connectivity
@@ -245,7 +249,7 @@ namespace cpp_redis {
* @param timeout_ms maximum time to connect
*
*/
- void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms = 0);
+ void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms, bool use_encryption);
/**
* retrieve sentinel for current client
@@ -467,6 +471,10 @@ namespace cpp_redis {
*
*/
std::uint32_t m_reconnect_interval_ms = 0;
+ /**
+ * use encryption
+ */
+ bool m_use_encryption = false;
/**
* reconnection status
diff --git a/includes/cpp_redis/network/redis_connection.hpp b/includes/cpp_redis/network/redis_connection.hpp
index 9714aecb..a6d58a86 100644
--- a/includes/cpp_redis/network/redis_connection.hpp
+++ b/includes/cpp_redis/network/redis_connection.hpp
@@ -102,6 +102,8 @@ namespace cpp_redis {
* @param disconnection_handler handler to be called in case of disconnection
* @param reply_callback handler to be called once a reply is ready
* @param timeout_ms max time to connect (in ms)
+ * @param use_encryption enables TLS when set to true
+ *
*
*/
void connect(
@@ -109,7 +111,7 @@ namespace cpp_redis {
std::size_t port = 6379,
const disconnection_handler_t &disconnection_handler = nullptr,
const reply_callback_t &reply_callback = nullptr,
- std::uint32_t timeout_ms = 0);
+ std::uint32_t timeout_ms = 0, bool use_encryption = false);
/**
* disconnect from redis server
diff --git a/includes/cpp_redis/network/tcp_client.hpp b/includes/cpp_redis/network/tcp_client.hpp
index ad5fcc9b..597e45db 100644
--- a/includes/cpp_redis/network/tcp_client.hpp
+++ b/includes/cpp_redis/network/tcp_client.hpp
@@ -55,9 +55,10 @@ class tcp_client : public tcp_client_iface {
* @param addr host to be connected to
* @param port port to be connected to
* @param timeout_ms max time to connect in ms
+ * @param use_encryption enables TLS when set to true
*
*/
- void connect(const std::string& addr, std::uint32_t port, std::uint32_t timeout_ms) override;
+ void connect(const std::string& addr, std::uint32_t port, std::uint32_t timeout_ms, bool use_encryption) override;
/**
* stop the tcp client
diff --git a/includes/cpp_redis/network/tcp_client_iface.hpp b/includes/cpp_redis/network/tcp_client_iface.hpp
index 332f257a..549014b3 100644
--- a/includes/cpp_redis/network/tcp_client_iface.hpp
+++ b/includes/cpp_redis/network/tcp_client_iface.hpp
@@ -55,9 +55,9 @@ class tcp_client_iface {
* @param addr host to be connected to
* @param port port to be connected to
* @param timeout_ms max time to connect in ms
- *
+ * @param use_encryption enables TLS when set to true
*/
- virtual void connect(const std::string& addr, std::uint32_t port, std::uint32_t timeout_ms = 0) = 0;
+ virtual void connect(const std::string& addr, std::uint32_t port, std::uint32_t timeout_ms = 0, bool use_encryption = false) = 0;
/**
* stop the tcp client
diff --git a/msvc19/cpp_redis.sln b/msvc19/cpp_redis.sln
new file mode 100644
index 00000000..9edf9b8c
--- /dev/null
+++ b/msvc19/cpp_redis.sln
@@ -0,0 +1,41 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31624.102
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cpp_redis", "cpp_redis.vcxproj", "{8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacopie", "..\tacopie\msvc19\tacopie.vcxproj", "{5DC28D31-04A5-4509-8EE3-CF16DE77475B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Debug|x64.ActiveCfg = Debug|x64
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Debug|x64.Build.0 = Debug|x64
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Debug|x86.ActiveCfg = Debug|Win32
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Debug|x86.Build.0 = Debug|Win32
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Release|x64.ActiveCfg = Release|x64
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Release|x64.Build.0 = Release|x64
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Release|x86.ActiveCfg = Release|Win32
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}.Release|x86.Build.0 = Release|Win32
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Debug|x64.ActiveCfg = Debug|x64
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Debug|x64.Build.0 = Debug|x64
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Debug|x86.ActiveCfg = Debug|Win32
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Debug|x86.Build.0 = Debug|Win32
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Release|x64.ActiveCfg = Release|x64
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Release|x64.Build.0 = Release|x64
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Release|x86.ActiveCfg = Release|Win32
+ {5DC28D31-04A5-4509-8EE3-CF16DE77475B}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {2E89D461-07FD-4A05-826C-3138C5E2AF44}
+ EndGlobalSection
+EndGlobal
diff --git a/msvc19/cpp_redis.vcxproj b/msvc19/cpp_redis.vcxproj
new file mode 100644
index 00000000..197f9d22
--- /dev/null
+++ b/msvc19/cpp_redis.vcxproj
@@ -0,0 +1,230 @@
+
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {5dc28d31-04a5-4509-8ee3-cf16de77475b}
+ false
+
+
+
+ 15.0
+ {8D6B2E0B-45B0-40CB-AF6B-B917F136EB01}
+ Win32Proj
+ cpp_redis
+ 10.0.19041.0
+
+
+
+ StaticLibrary
+ true
+ v142
+ Unicode
+
+
+ StaticLibrary
+ false
+ v142
+ true
+ Unicode
+
+
+ StaticLibrary
+ true
+ v142
+ Unicode
+
+
+ StaticLibrary
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+ $(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+ $(Platform)\$(Configuration)\
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_LIB;_WIN32;SECURITY_WIN32;%(PreprocessorDefinitions);LOGGING_ENABLED
+ ..\includes;..\tacopie\includes;%(AdditionalIncludeDirectories)
+ true
+
+
+ Windows
+
+
+ true
+
+
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_LIB;_WIN32;_WIN64;SECURITY_WIN32;%(PreprocessorDefinitions);__CPP_REDIS_LOGGING_ENABLED
+ ..\includes;..\tacopie\includes;%(AdditionalIncludeDirectories)
+ /bigobj %(AdditionalOptions)
+ true
+
+
+ Windows
+
+
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_LIB;_WIN32;SECURITY_WIN32;%(PreprocessorDefinitions)
+ ..\includes;..\tacopie\includes;%(AdditionalIncludeDirectories)
+ true
+
+
+ Windows
+ true
+ true
+
+
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_LIB;_WIN32;_WIN64;SECURITY_WIN32;%(PreprocessorDefinitions)
+ ..\includes;..\tacopie\includes;%(AdditionalIncludeDirectories)
+ true
+
+
+ Windows
+ true
+ true
+
+
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sources/core/client.cpp b/sources/core/client.cpp
index 659c0498..4220108b 100644
--- a/sources/core/client.cpp
+++ b/sources/core/client.cpp
@@ -71,8 +71,9 @@ namespace cpp_redis {
const connect_callback_t &connect_callback,
std::uint32_t timeout_ms,
std::int32_t max_reconnects,
- std::uint32_t reconnect_interval_ms) {
-/**
+ std::uint32_t reconnect_interval_ms,
+ bool use_encryption) {
+ /**
* Save for auto reconnects
*/
m_master_name = name;
@@ -94,7 +95,8 @@ namespace cpp_redis {
const connect_callback_t &connect_callback,
std::uint32_t timeout_ms,
std::int32_t max_reconnects,
- std::uint32_t reconnect_interval_ms) {
+ std::uint32_t reconnect_interval_ms,
+ bool use_encryption) {
__CPP_REDIS_LOG(debug, "cpp_redis::client attempts to connect");
/**
@@ -105,6 +107,7 @@ namespace cpp_redis {
m_connect_callback = connect_callback;
m_max_reconnects = max_reconnects;
m_reconnect_interval_ms = reconnect_interval_ms;
+ m_use_encryption = use_encryption;
/**
* notify start
@@ -114,9 +117,8 @@ namespace cpp_redis {
}
auto disconnection_handler = std::bind(&client::connection_disconnection_handler, this, std::placeholders::_1);
- auto receive_handler = std::bind(&client::connection_receive_handler, this, std::placeholders::_1,
- std::placeholders::_2);
- m_client.connect(host, port, disconnection_handler, receive_handler, timeout_ms);
+ auto receive_handler = std::bind(&client::connection_receive_handler, this, std::placeholders::_1, std::placeholders::_2);
+ m_client.connect(host, port, disconnection_handler, receive_handler, timeout_ms, use_encryption);
__CPP_REDIS_LOG(info, "cpp_redis::client connected");
@@ -161,8 +163,8 @@ namespace cpp_redis {
}
void
- client::add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms) {
- m_sentinel.add_sentinel(host, port, timeout_ms);
+ client::add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms, bool use_encryption) {
+ m_sentinel.add_sentinel(host, port, timeout_ms, use_encryption);
}
const sentinel &
@@ -442,7 +444,7 @@ namespace cpp_redis {
* We rely on the sentinel to tell us which redis server is currently the master.
*/
if (!m_master_name.empty() &&
- !m_sentinel.get_master_addr_by_name(m_master_name, m_redis_server, m_redis_port, true)) {
+ !m_sentinel.get_master_addr_by_name(m_master_name, m_redis_server, m_redis_port, true)) {
if (m_connect_callback) {
m_connect_callback(m_redis_server, m_redis_port, connect_state::lookup_failed);
}
@@ -454,7 +456,7 @@ namespace cpp_redis {
*/
try {
connect(m_redis_server, m_redis_port, m_connect_callback, m_connect_timeout_ms, m_max_reconnects,
- m_reconnect_interval_ms);
+ m_reconnect_interval_ms, m_use_encryption);
}
catch (...) {
}
@@ -612,7 +614,7 @@ namespace cpp_redis {
client &
client::bitfield(const std::string &key, const std::vector &operations,
- const reply_callback_t &reply_callback) {
+ const reply_callback_t &reply_callback) {
std::vector cmd = {"BITFIELD", key};
for (const auto &operation : operations) {
@@ -621,7 +623,7 @@ namespace cpp_redis {
cmd.push_back(std::to_string(operation.offset));
if (operation.operation_type == bitfield_operation_type::set ||
- operation.operation_type == bitfield_operation_type::incrby) {
+ operation.operation_type == bitfield_operation_type::incrby) {
cmd.push_back(std::to_string(operation.value));
}
@@ -637,7 +639,7 @@ namespace cpp_redis {
client &
client::bitop(const std::string &operation, const std::string &destkey, const std::vector &keys,
- const reply_callback_t &reply_callback) {
+ const reply_callback_t &reply_callback) {
std::vector cmd = {"BITOP", operation, destkey};
cmd.insert(cmd.end(), keys.begin(), keys.end());
send(cmd, reply_callback);
diff --git a/sources/core/consumer.cpp b/sources/core/consumer.cpp
index e0d35075..12c974a4 100644
--- a/sources/core/consumer.cpp
+++ b/sources/core/consumer.cpp
@@ -69,9 +69,9 @@ namespace cpp_redis {
}
void consumer::connect(const std::string &host, size_t port, const connect_callback_t &connect_callback,
- uint32_t timeout_ms, int32_t max_reconnects, uint32_t reconnect_interval_ms) {
- m_client->ack_client.connect(host, port, connect_callback, timeout_ms, max_reconnects, reconnect_interval_ms);
- m_client->poll_client.connect(host, port, connect_callback, timeout_ms, max_reconnects, reconnect_interval_ms);
+ uint32_t timeout_ms, int32_t max_reconnects, uint32_t reconnect_interval_ms, bool use_encryption) {
+ m_client->ack_client.connect(host, port, connect_callback, timeout_ms, max_reconnects, reconnect_interval_ms, use_encryption);
+ m_client->poll_client.connect(host, port, connect_callback, timeout_ms, max_reconnects, reconnect_interval_ms, use_encryption);
}
void consumer::auth(const std::string &password,
@@ -82,14 +82,12 @@ namespace cpp_redis {
consumer &consumer::commit() {
while (!is_ready) {
- if (!is_ready) {
- std::unique_lock dispatch_lock(dispatch_queue_changed_mutex);
- dispatch_queue_changed.wait(dispatch_lock, [&]() {
- return !dispatch_queue_full.load();
- });
- m_read_count = static_cast(m_max_concurrency - m_dispatch_queue->size());
- poll();
- }
+ std::unique_lock dispatch_lock(dispatch_queue_changed_mutex);
+ dispatch_queue_changed.wait(dispatch_lock, [&]() {
+ return !dispatch_queue_full.load();
+ });
+ m_read_count = static_cast(m_max_concurrency - m_dispatch_queue->size());
+ poll();
}
return *this;
}
diff --git a/sources/core/reply.cpp b/sources/core/reply.cpp
index 19c8c98a..b640b273 100644
--- a/sources/core/reply.cpp
+++ b/sources/core/reply.cpp
@@ -50,7 +50,7 @@ namespace cpp_redis {
if (is_integer())
return optional_t(m_int_val);
- __CPP_REDIS_LOG(1, "Reply is not an integer");
+ __CPP_REDIS_LOG(error, "Reply is not an integer");
return {0};
}
diff --git a/sources/core/sentinel.cpp b/sources/core/sentinel.cpp
index bd67d6f6..b266cc18 100644
--- a/sources/core/sentinel.cpp
+++ b/sources/core/sentinel.cpp
@@ -48,8 +48,8 @@ sentinel::~sentinel(void) {
}
sentinel&
-sentinel::add_sentinel(const std::string& host, std::size_t port, std::uint32_t timeout_ms) {
- m_sentinels.push_back({host, port, timeout_ms});
+sentinel::add_sentinel(const std::string& host, std::size_t port, std::uint32_t timeout_ms, bool use_encryption) {
+ m_sentinels.push_back({host, port, timeout_ms, use_encryption});
return *this;
}
@@ -124,7 +124,7 @@ sentinel::connect_sentinel(const sentinel_disconnect_handler_t& sentinel_disconn
while (not_connected && it != m_sentinels.end()) {
try {
__CPP_REDIS_LOG(debug, std::string("cpp_redis::sentinel attempting to connect to host ") + it->get_host());
- m_client.connect(it->get_host(), it->get_port(), disconnect_handler, receive_handler, it->get_timeout_ms());
+ m_client.connect(it->get_host(), it->get_port(), disconnect_handler, receive_handler, it->get_timeout_ms(), it->get_use_encryption());
}
catch (const redis_error&) {
__CPP_REDIS_LOG(info, std::string("cpp_redis::sentinel unable to connect to sentinel host ") + it->get_host());
@@ -152,13 +152,13 @@ sentinel::connect_sentinel(const sentinel_disconnect_handler_t& sentinel_disconn
void
sentinel::connect(const std::string& host, std::size_t port,
const sentinel_disconnect_handler_t& sentinel_disconnect_handler,
- std::uint32_t timeout_ms) {
+ std::uint32_t timeout_ms, bool use_encryption) {
__CPP_REDIS_LOG(debug, "cpp_redis::sentinel attempts to connect");
auto disconnect_handler = std::bind(&sentinel::connection_disconnect_handler, this, std::placeholders::_1);
auto receive_handler = std::bind(&sentinel::connection_receive_handler, this, std::placeholders::_1, std::placeholders::_2);
- m_client.connect(host, port, disconnect_handler, receive_handler, timeout_ms);
+ m_client.connect(host, port, disconnect_handler, receive_handler, timeout_ms, use_encryption);
__CPP_REDIS_LOG(info, "cpp_redis::sentinel connected");
diff --git a/sources/core/subscriber.cpp b/sources/core/subscriber.cpp
index 02678d47..94690568 100644
--- a/sources/core/subscriber.cpp
+++ b/sources/core/subscriber.cpp
@@ -73,13 +73,14 @@ subscriber::connect(
const connect_callback_t& connect_callback,
std::uint32_t timeout_ms,
std::int32_t max_reconnects,
- std::uint32_t reconnect_interval_ms) {
+ std::uint32_t reconnect_interval_ms,
+ bool use_encryption) {
//! Save for auto reconnects
m_master_name = name;
//! We rely on the sentinel to tell us which redis server is currently the master.
if (m_sentinel.get_master_addr_by_name(name, m_redis_server, m_redis_port, true)) {
- connect(m_redis_server, m_redis_port, connect_callback, timeout_ms, max_reconnects, reconnect_interval_ms);
+ connect(m_redis_server, m_redis_port, connect_callback, timeout_ms, max_reconnects, reconnect_interval_ms, use_encryption);
}
else {
throw redis_error("cpp_redis::subscriber::connect() could not find master for m_name " + name);
@@ -93,7 +94,8 @@ subscriber::connect(
const connect_callback_t& connect_callback,
std::uint32_t timeout_ms,
std::int32_t max_reconnects,
- std::uint32_t reconnect_interval_ms) {
+ std::uint32_t reconnect_interval_ms,
+ bool use_encryption) {
__CPP_REDIS_LOG(debug, "cpp_redis::subscriber attempts to connect");
//! Save for auto reconnects
@@ -101,7 +103,8 @@ subscriber::connect(
m_redis_port = port;
m_connect_callback = connect_callback;
m_max_reconnects = max_reconnects;
- m_reconnect_interval_ms = reconnect_interval_ms;
+ m_reconnect_interval_ms = reconnect_interval_ms;
+ m_use_encryption = use_encryption;
//! notify start
if (m_connect_callback) {
@@ -110,7 +113,7 @@ subscriber::connect(
auto disconnection_handler = std::bind(&subscriber::connection_disconnection_handler, this, std::placeholders::_1);
auto receive_handler = std::bind(&subscriber::connection_receive_handler, this, std::placeholders::_1, std::placeholders::_2);
- m_client.connect(host, port, disconnection_handler, receive_handler, timeout_ms);
+ m_client.connect(host, port, disconnection_handler, receive_handler, timeout_ms, use_encryption);
//! notify end
if (m_connect_callback) {
@@ -121,8 +124,8 @@ subscriber::connect(
}
void
-subscriber::add_sentinel(const std::string& host, std::size_t port, std::uint32_t timeout_ms) {
- m_sentinel.add_sentinel(host, port, timeout_ms);
+subscriber::add_sentinel(const std::string& host, std::size_t port, std::uint32_t timeout_ms, bool use_encryption) {
+ m_sentinel.add_sentinel(host, port, timeout_ms, use_encryption);
}
const sentinel&
@@ -485,7 +488,7 @@ subscriber::reconnect() {
//! Try catch block because the redis subscriber throws an error if connection cannot be made.
try {
- connect(m_redis_server, m_redis_port, m_connect_callback, m_connect_timeout_ms, m_max_reconnects, m_reconnect_interval_ms);
+ connect(m_redis_server, m_redis_port, m_connect_callback, m_connect_timeout_ms, m_max_reconnects, m_reconnect_interval_ms, m_use_encryption);
}
catch (...) {
}
diff --git a/sources/network/redis_connection.cpp b/sources/network/redis_connection.cpp
index 20ac6305..12942493 100644
--- a/sources/network/redis_connection.cpp
+++ b/sources/network/redis_connection.cpp
@@ -56,14 +56,14 @@ namespace cpp_redis {
redis_connection::connect(const std::string &host, std::size_t port,
const disconnection_handler_t &client_disconnection_handler,
const reply_callback_t &client_reply_callback,
- std::uint32_t timeout_ms) {
+ std::uint32_t timeout_ms, bool use_encryption) {
try {
__CPP_REDIS_LOG(debug, "cpp_redis::network::redis_connection attempts to connect");
/**
* connect client
*/
- m_client->connect(host, (uint32_t) port, timeout_ms);
+ m_client->connect(host, (uint32_t) port, timeout_ms, use_encryption);
m_client->set_on_disconnection_handler(std::bind(&redis_connection::tcp_client_disconnection_handler, this));
/**
diff --git a/sources/network/tcp_client.cpp b/sources/network/tcp_client.cpp
index 28891ea1..a341bf98 100644
--- a/sources/network/tcp_client.cpp
+++ b/sources/network/tcp_client.cpp
@@ -28,8 +28,8 @@ namespace cpp_redis {
namespace network {
void
-tcp_client::connect(const std::string& addr, std::uint32_t port, std::uint32_t timeout_ms) {
- m_client.connect(addr, port, timeout_ms);
+tcp_client::connect(const std::string& addr, std::uint32_t port, std::uint32_t timeout_ms, bool use_encryption) {
+ m_client.connect(addr, port, timeout_ms, use_encryption);
}
diff --git a/tacopie b/tacopie
index 6b060c7f..ef588516 160000
--- a/tacopie
+++ b/tacopie
@@ -1 +1 @@
-Subproject commit 6b060c7f7e158e60d634c14e412aa78d4041f237
+Subproject commit ef5885162b7463290d961384e23dd82530eb13c0