diff options
author | jacobkeeler <jacob.keeler@livioradio.com> | 2018-09-12 15:20:01 -0400 |
---|---|---|
committer | jacobkeeler <jacob.keeler@livioradio.com> | 2018-09-12 15:20:01 -0400 |
commit | ed95b345449e132c94d6ee23625c9846d94f23af (patch) | |
tree | e73404766d56ca13e8adeb80a1224f143e6c2c51 | |
parent | 74be3a1a9e2fb5d6e0d2160d605554c36763b8ce (diff) | |
download | sdl_core-ed95b345449e132c94d6ee23625c9846d94f23af.tar.gz |
Fix EndService being sent to the wrong connection
Also fix issue where app remained in FULL after AUDIO_SOURCE event
5 files changed, 20 insertions, 12 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 02c41e0472..abab63aa7e 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -2698,7 +2698,7 @@ void ApplicationManagerImpl::OnAppStreaming( media_manager_->StartStreaming(app_id, service_type); } else { media_manager_->StopStreaming(app_id, service_type); - state_ctrl_.OnVideoStreamingStarted(app); + state_ctrl_.OnVideoStreamingStopped(app); } } diff --git a/src/components/application_manager/src/hmi_state.cc b/src/components/application_manager/src/hmi_state.cc index aa4c979ae7..41850a3ef2 100644 --- a/src/components/application_manager/src/hmi_state.cc +++ b/src/components/application_manager/src/hmi_state.cc @@ -207,9 +207,6 @@ mobile_apis::HMILevel::eType AudioSource::hmi_level() const { if (mobile_apis::HMILevel::HMI_NONE == parent()->hmi_level()) { return mobile_apis::HMILevel::HMI_NONE; } - if (mobile_apis::HMILevel::HMI_FULL == parent()->hmi_level()) { - return mobile_apis::HMILevel::HMI_FULL; - } return mobile_apis::HMILevel::HMI_BACKGROUND; } diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc index 045985f650..478127c42a 100644 --- a/src/components/connection_handler/src/connection_handler_impl.cc +++ b/src/components/connection_handler/src/connection_handler_impl.cc @@ -354,8 +354,8 @@ void ConnectionHandlerImpl::OnSessionStartedCallback( // so they can send appropriate Ack or NAK messages on the correct transport. transport_manager::ConnectionUID primary_connection_handle = connection_handle; + SessionTransports st = GetSessionTransports(session_id); if (session_id != 0) { - SessionTransports st = GetSessionTransports(session_id); if (st.primary_transport == 0) { LOG4CXX_WARN(logger_, "OnSessionStartedCallback could not find Session in the " @@ -424,6 +424,11 @@ void ConnectionHandlerImpl::OnSessionStartedCallback( } context.new_session_id_ = session_id; context.hash_id_ = protocol_handler::HASH_ID_NOT_SUPPORTED; + + if (st.secondary_transport == connection_handle) { + sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_); + st.secondary_transport_services.push_back(service_type); + } } sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_); if (connection_handler_observer_) { @@ -1444,11 +1449,16 @@ void ConnectionHandlerImpl::SendEndService(uint32_t key, uint8_t service_type) { << static_cast<int>(st.primary_transport) << " and secondary connection " << static_cast<int>(st.secondary_transport)); - - protocol_handler_->SendEndService(st.primary_transport, - st.secondary_transport, - session_id, - service_type); + sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_); + auto it = std::find(st.secondary_transport_services.begin(), + st.secondary_transport_services.end(), + service_type); + if (it != st.secondary_transport_services.end()) { + connection_handle = st.secondary_transport; + st.secondary_transport_services.erase(it); + } + protocol_handler_->SendEndService( + st.primary_transport, connection_handle, session_id, service_type); } } } diff --git a/src/components/include/connection_handler/connection_handler.h b/src/components/include/connection_handler/connection_handler.h index bfaacf5fc1..a50760b547 100644 --- a/src/components/include/connection_handler/connection_handler.h +++ b/src/components/include/connection_handler/connection_handler.h @@ -57,6 +57,7 @@ class ConnectionHandlerObserver; typedef struct { transport_manager::ConnectionUID primary_transport; transport_manager::ConnectionUID secondary_transport; + std::vector<protocol_handler::ServiceType> secondary_transport_services; } SessionTransports; typedef std::map<uint8_t, SessionTransports> SessionConnectionMap; diff --git a/src/components/protocol_handler/src/protocol_handler_impl.cc b/src/components/protocol_handler/src/protocol_handler_impl.cc index 093d89490b..28773e75d5 100644 --- a/src/components/protocol_handler/src/protocol_handler_impl.cc +++ b/src/components/protocol_handler/src/protocol_handler_impl.cc @@ -621,9 +621,9 @@ void ProtocolHandlerImpl::SendEndServicePrivate(int32_t primary_connection_id, impl::RawFordMessageToMobile(ptr, false)); LOG4CXX_DEBUG(logger_, "SendEndServicePrivate() for connection " - << primary_connection_id << " for service_type " + << connection_id << " for service_type " << static_cast<int>(service_type) - << " service connection " << connection_id + << " primary connection " << primary_connection_id << " session_id " << static_cast<int32_t>(session_id)); } else { LOG4CXX_WARN( |