diff options
Diffstat (limited to 'src/components/connection_handler/src/connection.cc')
-rw-r--r-- | src/components/connection_handler/src/connection.cc | 41 |
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 |