summaryrefslogtreecommitdiff
path: root/src/components/connection_handler/src/connection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/connection_handler/src/connection.cc')
-rw-r--r--src/components/connection_handler/src/connection.cc41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/components/connection_handler/src/connection.cc b/src/components/connection_handler/src/connection.cc
index 0b248e5e59..70dedc38b5 100644
--- a/src/components/connection_handler/src/connection.cc
+++ b/src/components/connection_handler/src/connection.cc
@@ -45,7 +45,6 @@
#include "security_manager/security_manager.h"
#endif // ENABLE_SECURITY
-#include "utils/threads/thread_manager.h"
/**
* \namespace connection_handler
@@ -80,22 +79,22 @@ Connection::Connection(ConnectionHandle connection_handle,
: connection_handler_(connection_handler),
connection_handle_(connection_handle),
connection_device_handle_(connection_device_handle) {
- LOG4CXX_TRACE_ENTER(logger_);
+ LOG4CXX_AUTO_TRACE(logger_);
DCHECK(connection_handler_);
heartbeat_monitor_ = new HeartBeatMonitor(heartbeat_timeout, this);
heart_beat_monitor_thread_ = threads::CreateThread("HeartBeatMonitor",
- heartbeat_monitor_);
+ heartbeat_monitor_);
heart_beat_monitor_thread_->start();
}
Connection::~Connection() {
- LOG4CXX_TRACE_ENTER(logger_);
- heart_beat_monitor_thread_->stop();
+ LOG4CXX_AUTO_TRACE(logger_);
+ heart_beat_monitor_thread_->join();
+ delete heartbeat_monitor_;
threads::DeleteThread(heart_beat_monitor_thread_);
sync_primitives::AutoLock lock(session_map_lock_);
session_map_.clear();
- LOG4CXX_TRACE_EXIT(logger_);
}
// Finds a key not presented in std::map<unsigned char, T>
@@ -113,7 +112,7 @@ uint32_t findGap(const std::map<unsigned char, T> &map) {
} // namespace
uint32_t Connection::AddNewSession() {
- LOG4CXX_TRACE_ENTER(logger_);
+ LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(session_map_lock_);
const uint32_t session_id = findGap(session_map_);
if (session_id > 0) {
@@ -236,7 +235,7 @@ int Connection::SetSSLContext(uint8_t session_id,
security_manager::SSLContext *Connection::GetSSLContext(
const uint8_t session_id, const protocol_handler::ServiceType &service_type) const {
- LOG4CXX_TRACE(logger_, "Connection::GetSSLContext");
+ LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(session_map_lock_);
SessionMap::const_iterator session_it = session_map_.find(session_id);
if (session_it == session_map_.end()) {
@@ -260,7 +259,7 @@ security_manager::SSLContext *Connection::GetSSLContext(
void Connection::SetProtectionFlag(
const uint8_t session_id, const protocol_handler::ServiceType &service_type) {
- LOG4CXX_TRACE(logger_, "Connection::SetProtectionFlag");
+ LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(session_map_lock_);
SessionMap::iterator session_it = session_map_.find(session_id);
if (session_it == session_map_.end()) {
@@ -312,7 +311,9 @@ void Connection::CloseSession(uint8_t session_id) {
size = session_map_.size();
}
- connection_handler_->CloseSession(connection_handle_, session_id);
+ connection_handler_->CloseSession(connection_handle_,
+ session_id,
+ connection_handler::kCommon);
//Close connection if it is last session
if (1 == size) {
@@ -333,6 +334,7 @@ void Connection::UpdateProtocolVersionSession(
}
bool Connection::SupportHeartBeat(uint8_t session_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(session_map_lock_);
SessionMap::iterator session_it = session_map_.find(session_id);
if (session_map_.end() == session_it) {
@@ -340,7 +342,20 @@ bool Connection::SupportHeartBeat(uint8_t session_id) {
return false;
}
Session &session = session_it->second;
- return ::protocol_handler::PROTOCOL_VERSION_3 == session.protocol_version;
+ return (::protocol_handler::PROTOCOL_VERSION_3 == session.protocol_version ||
+ ::protocol_handler::PROTOCOL_VERSION_4 == session.protocol_version);
+}
+
+bool Connection::ProtocolVersion(uint8_t session_id, uint8_t& protocol_version) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(session_map_lock_);
+ SessionMap::iterator session_it = session_map_.find(session_id);
+ if (session_map_.end() == session_it) {
+ LOG4CXX_WARN(logger_, "Session not found in this connection!");
+ return false;
+ }
+ protocol_version = (session_it->second).protocol_version;
+ return true;
}
void Connection::StartHeartBeat(uint8_t session_id) {
@@ -355,8 +370,8 @@ void Connection::KeepAlive(uint8_t session_id) {
heartbeat_monitor_->KeepAlive(session_id);
}
-void Connection::SetHeartBeatTimeout(int32_t timeout) {
- heartbeat_monitor_->set_heartbeat_timeout_seconds(timeout);
+void Connection::SetHeartBeatTimeout(int32_t timeout, uint8_t session_id) {
+ heartbeat_monitor_->set_heartbeat_timeout_seconds(timeout, session_id);
}
} // namespace connection_handler