summaryrefslogtreecommitdiff
path: root/src/components/security_manager/src/security_manager_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/security_manager/src/security_manager_impl.cc')
-rw-r--r--src/components/security_manager/src/security_manager_impl.cc26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/components/security_manager/src/security_manager_impl.cc b/src/components/security_manager/src/security_manager_impl.cc
index 914d30003a..f78f859c04 100644
--- a/src/components/security_manager/src/security_manager_impl.cc
+++ b/src/components/security_manager/src/security_manager_impl.cc
@@ -54,6 +54,7 @@ SecurityManagerImpl::SecurityManagerImpl(
, crypto_manager_(NULL)
, protocol_handler_(NULL)
, system_time_handler_(std::move(system_time_handler))
+ , current_seq_number_(0)
, waiting_for_certificate_(false)
, waiting_for_time_(false) {
DCHECK(system_time_handler_);
@@ -596,13 +597,24 @@ bool SecurityManagerImpl::ProcessInternalError(
return true;
}
-void SecurityManagerImpl::SendHandshakeBinData(const uint32_t connection_key,
- const uint8_t* const data,
- const size_t data_size,
- const uint32_t seq_number) {
- const SecurityQuery::QueryHeader header(SecurityQuery::NOTIFICATION,
- SecurityQuery::SEND_HANDSHAKE_DATA,
- seq_number);
+uint32_t SecurityManagerImpl::NextSequentialNumber() {
+ if (current_seq_number_ >= std::numeric_limits<uint32_t>::max()) {
+ current_seq_number_ = 0;
+ }
+ current_seq_number_++;
+ return current_seq_number_;
+}
+
+void SecurityManagerImpl::SendHandshakeBinData(
+ const uint32_t connection_key,
+ const uint8_t* const data,
+ const size_t data_size,
+ const uint32_t custom_seq_number) {
+ uint32_t seq_number =
+ (0 == custom_seq_number) ? NextSequentialNumber() : custom_seq_number;
+
+ const SecurityQuery::QueryHeader header(
+ SecurityQuery::REQUEST, SecurityQuery::SEND_HANDSHAKE_DATA, seq_number);
DCHECK(data_size < 1024 * 1024 * 1024);
const SecurityQuery query =
SecurityQuery(header, connection_key, data, data_size);