summaryrefslogtreecommitdiff
path: root/AudioManagerCore/src/CAmControlReceiver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerCore/src/CAmControlReceiver.cpp')
-rw-r--r--AudioManagerCore/src/CAmControlReceiver.cpp41
1 files changed, 40 insertions, 1 deletions
diff --git a/AudioManagerCore/src/CAmControlReceiver.cpp b/AudioManagerCore/src/CAmControlReceiver.cpp
index 7a6072c..7efee95 100644
--- a/AudioManagerCore/src/CAmControlReceiver.cpp
+++ b/AudioManagerCore/src/CAmControlReceiver.cpp
@@ -128,7 +128,7 @@ am_Error_e CAmControlReceiver::enterDomainDB(const am_Domain_s &domainData, am_d
am_Error_e CAmControlReceiver::enterMainConnectionDB(const am_MainConnection_s &mainConnectionData, am_mainConnectionID_t &connectionID)
{
- return (mDatabaseHandler->enterMainConnectionDB(mainConnectionData, connectionID));
+ return (mDatabaseHandler->enterMainConnectionDB(mainConnectionData, connectionID, false));
}
am_Error_e CAmControlReceiver::enterSinkDB(const am_Sink_s &sinkData, am_sinkID_t &sinkID)
@@ -291,6 +291,11 @@ am_Error_e CAmControlReceiver::getSourceInfoDB(const am_sourceID_t sourceID, am_
return (mDatabaseHandler->getSourceInfoDB(sourceID, sourceData));
}
+am_Error_e CAmControlReceiver::getConnectionInfoDB(const am_connectionID_t connectionID, am_Connection_s &connectionData) const
+{
+ return (mDatabaseHandler->getConnectionInfoDB(connectionID, connectionData));
+}
+
am_Error_e CAmControlReceiver::getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s &mainConnectionData) const
{
return (mDatabaseHandler->getMainConnectionInfoDB(mainConnectionID, mainConnectionData));
@@ -451,6 +456,40 @@ void CAmControlReceiver::confirmControllerRundown(const am_Error_e error)
mSocketHandler->exit_mainloop();
}
+am_Error_e CAmControlReceiver::transferConnection(am_Handle_s &handle
+ , am_mainConnectionID_t mainConnectionID, am_domainID_t domainID)
+{
+ am_MainConnection_s mainConnectionData;
+ if (mDatabaseHandler->getMainConnectionInfoDB(mainConnectionID, mainConnectionData) != E_OK)
+ {
+ return E_DATABASE_ERROR;
+ }
+
+ std::vector<std::pair<std::string, std::string>> route;
+ route.reserve(mainConnectionData.listConnectionID.size());
+ for (auto iter : mainConnectionData.listConnectionID)
+ {
+ am_Connection_s connectionData;
+ if (mDatabaseHandler->getConnectionInfoDB(iter, connectionData) != E_OK)
+ {
+ return E_DATABASE_ERROR;
+ }
+
+ // determine source and sink name, even if they are only peeked, but not fully registered
+ am_Source_s sourceData;
+ am_Sink_s sinkData;
+ if ( (mDatabaseHandler->getSourceInfoDB(connectionData.sourceID, sourceData) == E_NON_EXISTENT)
+ || (mDatabaseHandler->getSinkInfoDB(connectionData.sinkID, sinkData) == E_NON_EXISTENT))
+ {
+ return E_DATABASE_ERROR;
+ }
+
+ route.push_back({sourceData.name, sinkData.name});
+ }
+
+ return mRoutingSender->asyncTransferConnection(handle, domainID, route, mainConnectionData.connectionState);
+}
+
am_Error_e CAmControlReceiver::getSocketHandler(CAmSocketHandler * &socketHandler)
{
socketHandler = mSocketHandler;