summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobkeeler <jacob.keeler@livioradio.com>2018-09-12 15:20:01 -0400
committerjacobkeeler <jacob.keeler@livioradio.com>2018-09-12 15:20:01 -0400
commited95b345449e132c94d6ee23625c9846d94f23af (patch)
treee73404766d56ca13e8adeb80a1224f143e6c2c51
parent74be3a1a9e2fb5d6e0d2160d605554c36763b8ce (diff)
downloadsdl_core-ed95b345449e132c94d6ee23625c9846d94f23af.tar.gz
Fix EndService being sent to the wrong connection
Also fix issue where app remained in FULL after AUDIO_SOURCE event
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc2
-rw-r--r--src/components/application_manager/src/hmi_state.cc3
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc22
-rw-r--r--src/components/include/connection_handler/connection_handler.h1
-rw-r--r--src/components/protocol_handler/src/protocol_handler_impl.cc4
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(