diff options
Diffstat (limited to 'AudioManagerCore/src/CAmControlReceiver.cpp')
-rw-r--r-- | AudioManagerCore/src/CAmControlReceiver.cpp | 41 |
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; |