diff options
Diffstat (limited to 'src/components/security_manager/src/security_manager_impl.cc')
-rw-r--r-- | src/components/security_manager/src/security_manager_impl.cc | 26 |
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); |