diff options
Diffstat (limited to 'AudioManagerDaemon/src')
-rw-r--r-- | AudioManagerDaemon/src/ControlReceiver.cpp | 15 | ||||
-rw-r--r-- | AudioManagerDaemon/src/DBusWrapper.cpp | 55 | ||||
-rw-r--r-- | AudioManagerDaemon/src/DatabaseHandler.cpp | 4 | ||||
-rw-r--r-- | AudioManagerDaemon/src/DatabaseObserver.cpp | 2 | ||||
-rw-r--r-- | AudioManagerDaemon/src/Router.cpp | 52 | ||||
-rw-r--r-- | AudioManagerDaemon/src/RoutingReceiver.cpp | 4 | ||||
-rw-r--r-- | AudioManagerDaemon/src/RoutingSender.cpp | 8 | ||||
-rw-r--r-- | AudioManagerDaemon/src/TelnetServer.cpp | 8 | ||||
-rw-r--r-- | AudioManagerDaemon/src/main.cpp | 20 |
9 files changed, 115 insertions, 53 deletions
diff --git a/AudioManagerDaemon/src/ControlReceiver.cpp b/AudioManagerDaemon/src/ControlReceiver.cpp index 4900ce7..ac51be7 100644 --- a/AudioManagerDaemon/src/ControlReceiver.cpp +++ b/AudioManagerDaemon/src/ControlReceiver.cpp @@ -28,6 +28,7 @@ #include "DatabaseHandler.h" #include "RoutingSender.h" #include "CommandSender.h" +#include "Router.h" #include <assert.h> #include <dlt/dlt.h> @@ -35,26 +36,30 @@ DLT_IMPORT_CONTEXT(AudioManager) using namespace am; -ControlReceiver::ControlReceiver(DatabaseHandler *iDatabaseHandler, RoutingSender *iRoutingSender, CommandSender *iCommandSender, SocketHandler *iSocketHandler) : +ControlReceiver::ControlReceiver(DatabaseHandler *iDatabaseHandler, RoutingSender *iRoutingSender, CommandSender *iCommandSender, SocketHandler *iSocketHandler, Router* iRouter) : mDatabaseHandler(iDatabaseHandler), // mRoutingSender(iRoutingSender), // mCommandSender(iCommandSender), // - mSocketHandler(iSocketHandler) + mSocketHandler(iSocketHandler), // + mRouter(iRouter) { assert(mDatabaseHandler!=NULL); assert(mRoutingSender!=NULL); assert(mCommandSender!=NULL); assert(mSocketHandler!=NULL); + assert(mRouter!=NULL); } -ControlReceiver::ControlReceiver(DatabaseHandler *iDatabaseHandler, RoutingSender *iRoutingSender, CommandSender *iCommandSender) : +ControlReceiver::ControlReceiver(DatabaseHandler *iDatabaseHandler, RoutingSender *iRoutingSender, CommandSender *iCommandSender, Router* iRouter) : mDatabaseHandler(iDatabaseHandler), // mRoutingSender(iRoutingSender), // - mCommandSender(iCommandSender) + mCommandSender(iCommandSender), // + mRouter(iRouter) { assert(mDatabaseHandler!=NULL); assert(mRoutingSender!=NULL); assert(mCommandSender!=NULL); + assert(mRouter!=NULL); } ControlReceiver::~ControlReceiver() @@ -63,7 +68,7 @@ ControlReceiver::~ControlReceiver() am_Error_e ControlReceiver::getRoute(const bool onlyfree, const am_sourceID_t sourceID, const am_sinkID_t sinkID, std::vector<am_Route_s> & returnList) { - //todo: implement routing algorithm + mRouter->getRoute(onlyfree,sourceID,sinkID,returnList); return E_NOT_USED; } diff --git a/AudioManagerDaemon/src/DBusWrapper.cpp b/AudioManagerDaemon/src/DBusWrapper.cpp index 5b81792..94f0788 100644 --- a/AudioManagerDaemon/src/DBusWrapper.cpp +++ b/AudioManagerDaemon/src/DBusWrapper.cpp @@ -254,6 +254,7 @@ dbus_bool_t DBusWrapper::addWatch(DBusWatch *watch, void *userData) dbus_bool_t DBusWrapper::addWatchDelegate(DBusWatch * watch, void* userData) { + (void) userData; int16_t event = 0; sh_pollHandle_t handle = 0; uint flags = dbus_watch_get_flags(watch); @@ -261,8 +262,10 @@ dbus_bool_t DBusWrapper::addWatchDelegate(DBusWatch * watch, void* userData) /* no watch flags for disabled watches */ if (dbus_watch_get_enabled(watch)) { - if (flags & DBUS_WATCH_READABLE) event |= POLLIN; - if (flags & DBUS_WATCH_WRITABLE) event |= POLLOUT; + if (flags & DBUS_WATCH_READABLE) + event |= POLLIN; + if (flags & DBUS_WATCH_WRITABLE) + event |= POLLOUT; } DLT_LOG(AudioManager, DLT_LOG_INFO, DLT_STRING("DBusWrapper::addWatchDelegate entered new watch, fd="), DLT_INT(dbus_watch_get_unix_fd(watch)), DLT_STRING("event flag="), DLT_INT(event)); @@ -274,6 +277,7 @@ dbus_bool_t DBusWrapper::addWatchDelegate(DBusWatch * watch, void* userData) mMapHandleWatch.insert(std::make_pair(watch, handle)); return true; }DLT_LOG(AudioManager, DLT_LOG_ERROR, DLT_STRING("DBusWrapper::addWatchDelegate entering watch failed")); + return (true); } void DBusWrapper::removeWatch(DBusWatch *watch, void *userData) @@ -285,9 +289,11 @@ void DBusWrapper::removeWatch(DBusWatch *watch, void *userData) void DBusWrapper::removeWatchDelegate(DBusWatch *watch, void *userData) { + (void) userData; std::map<DBusWatch*, sh_pollHandle_t>::iterator iterator = mMapHandleWatch.begin(); iterator = mMapHandleWatch.find(watch); - if (iterator != mMapHandleWatch.end()) mSocketHandler->removeFDPoll(iterator->second); + if (iterator != mMapHandleWatch.end()) + mSocketHandler->removeFDPoll(iterator->second); DLT_LOG(AudioManager, DLT_LOG_INFO, DLT_STRING("DBusWrapper::removeWatch removed watch with handle"), DLT_INT(iterator->second)); mMapHandleWatch.erase(iterator); } @@ -301,18 +307,22 @@ void DBusWrapper::toogleWatch(DBusWatch *watch, void *userData) void DBusWrapper::toogleWatchDelegate(DBusWatch *watch, void *userData) { + (void) userData; int16_t event = 0; - int watchFD = dbus_watch_get_unix_fd(watch); + dbus_watch_get_unix_fd(watch); uint flags = dbus_watch_get_flags(watch); /* no watch flags for disabled watches */ if (dbus_watch_get_enabled(watch)) { - if (flags & DBUS_WATCH_READABLE) event |= POLLIN; - if (flags & DBUS_WATCH_WRITABLE) event |= POLLOUT; + if (flags & DBUS_WATCH_READABLE) + event |= POLLIN; + if (flags & DBUS_WATCH_WRITABLE) + event |= POLLOUT; } std::map<DBusWatch*, sh_pollHandle_t>::iterator iterator = mMapHandleWatch.begin(); iterator = mMapHandleWatch.find(watch); - if (iterator != mMapHandleWatch.end()) mSocketHandler->updateEventFlags(iterator->second, event); + if (iterator != mMapHandleWatch.end()) + mSocketHandler->updateEventFlags(iterator->second, event); DLT_LOG(AudioManager, DLT_LOG_INFO, DLT_STRING("DBusWrapper::toogleWatchDelegate watch was toggeled")); } @@ -325,7 +335,8 @@ dbus_bool_t DBusWrapper::addTimeout(DBusTimeout *timeout, void* userData) dbus_bool_t DBusWrapper::addTimeoutDelegate(DBusTimeout *timeout, void* userData) { - if (!dbus_timeout_get_enabled(timeout)) return false; + if (!dbus_timeout_get_enabled(timeout)) + return false; //calculate the timeout in timeval timespec pollTimeout; @@ -359,6 +370,7 @@ void DBusWrapper::removeTimeout(DBusTimeout *timeout, void* userData) void DBusWrapper::removeTimeoutDelegate(DBusTimeout *timeout, void* userData) { + (void) userData; //get the pointer to the handle and remove the timer sh_timerHandle_t* handle = (sh_timerHandle_t*) dbus_timeout_get_data(timeout); mSocketHandler->removeTimer(*handle); @@ -386,9 +398,12 @@ void DBusWrapper::toggleTimeout(DBusTimeout *timeout, void* userData) bool am::DBusWrapper::dbusDispatchCallback(const sh_pollHandle_t handle, void *userData) { + (void) handle; + (void) userData; bool returnVal = true; dbus_connection_ref(mDbusConnection); - if (dbus_connection_dispatch(mDbusConnection) == DBUS_DISPATCH_COMPLETE) returnVal = false; + if (dbus_connection_dispatch(mDbusConnection) == DBUS_DISPATCH_COMPLETE) + returnVal = false; dbus_connection_unref(mDbusConnection); DLT_LOG(AudioManager, DLT_LOG_INFO, DLT_STRING("DBusWrapper::dbusDispatchCallback was called")); return returnVal; @@ -396,9 +411,12 @@ bool am::DBusWrapper::dbusDispatchCallback(const sh_pollHandle_t handle, void *u bool am::DBusWrapper::dbusCheckCallback(const sh_pollHandle_t handle, void *userData) { + (void) handle; + (void) userData; bool returnVal = false; dbus_connection_ref(mDbusConnection); - if (dbus_connection_get_dispatch_status(mDbusConnection) == DBUS_DISPATCH_DATA_REMAINS) returnVal = true; + if (dbus_connection_get_dispatch_status(mDbusConnection) == DBUS_DISPATCH_DATA_REMAINS) + returnVal = true; dbus_connection_unref(mDbusConnection); DLT_LOG(AudioManager, DLT_LOG_INFO, DLT_STRING("DBusWrapper::dbusCheckCallback was called")); return returnVal; @@ -406,24 +424,31 @@ bool am::DBusWrapper::dbusCheckCallback(const sh_pollHandle_t handle, void *user void am::DBusWrapper::dbusFireCallback(const pollfd pollfd, const sh_pollHandle_t handle, void *userData) { + (void) handle; + (void) userData; assert(userData!=NULL); uint flags = 0; - if (pollfd.revents & POLLIN) flags |= DBUS_WATCH_READABLE; - if (pollfd.revents & POLLOUT) flags |= DBUS_WATCH_WRITABLE; - if (pollfd.revents & POLLHUP) flags |= DBUS_WATCH_HANGUP; - if (pollfd.revents & POLLERR) flags |= DBUS_WATCH_ERROR; + if (pollfd.revents & POLLIN) + flags |= DBUS_WATCH_READABLE; + if (pollfd.revents & POLLOUT) + flags |= DBUS_WATCH_WRITABLE; + if (pollfd.revents & POLLHUP) + flags |= DBUS_WATCH_HANGUP; + if (pollfd.revents & POLLERR) + flags |= DBUS_WATCH_ERROR; DBusWatch *watch = (DBusWatch*) userData; dbus_connection_ref(mDbusConnection); - bool ok = dbus_watch_handle(watch, flags); + dbus_watch_handle(watch, flags); dbus_connection_unref(mDbusConnection); DLT_LOG(AudioManager, DLT_LOG_INFO, DLT_STRING("DBusWrapper::dbusFireCallback was called")); } void DBusWrapper::toggleTimeoutDelegate(DBusTimeout *timeout, void* userData) { + (void) userData; //get the pointer to the handle and remove the timer sh_timerHandle_t* handle = (sh_timerHandle_t*) dbus_timeout_get_data(timeout); diff --git a/AudioManagerDaemon/src/DatabaseHandler.cpp b/AudioManagerDaemon/src/DatabaseHandler.cpp index 5c834ee..fb1e5c6 100644 --- a/AudioManagerDaemon/src/DatabaseHandler.cpp +++ b/AudioManagerDaemon/src/DatabaseHandler.cpp @@ -2465,7 +2465,7 @@ am_Error_e am::DatabaseHandler::getListSinkConnectionFormats(const am_sinkID_t s am_Error_e am::DatabaseHandler::getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector<am_ConnectionFormat_e> & listConnectionFormats) const { listConnectionFormats.clear(); - sqlite3_stmt* query = NULL, *qConnectionFormat = NULL, *qSoundProperty = NULL, *qMAinSoundProperty = NULL; + sqlite3_stmt* qConnectionFormat = NULL; int eCode = 0; am_ConnectionFormat_e tempConnectionFormat; @@ -3109,8 +3109,6 @@ am_Error_e DatabaseHandler::changeConnectionTimingInformation(const am_connectio } //now we need to find all mainConnections that use the changed connection and update their timing - am_timeSync_t tempDelay = 0; - am_Error_e error; int tempMainConnectionID; //first get all route tables for all mainconnections diff --git a/AudioManagerDaemon/src/DatabaseObserver.cpp b/AudioManagerDaemon/src/DatabaseObserver.cpp index b09aee8..19e3ea2 100644 --- a/AudioManagerDaemon/src/DatabaseObserver.cpp +++ b/AudioManagerDaemon/src/DatabaseObserver.cpp @@ -72,6 +72,7 @@ void DatabaseObserver::newDomain(am_Domain_s domain) void DatabaseObserver::newGateway(am_Gateway_s gateway) { + (void) gateway; //todo: implement something } @@ -99,6 +100,7 @@ void DatabaseObserver::removeDomain(am_domainID_t domainID) void DatabaseObserver::removeGateway(am_gatewayID_t gatewayID) { + (void) gatewayID; //todo: implement something } diff --git a/AudioManagerDaemon/src/Router.cpp b/AudioManagerDaemon/src/Router.cpp index aec487c..30d7f5f 100644 --- a/AudioManagerDaemon/src/Router.cpp +++ b/AudioManagerDaemon/src/Router.cpp @@ -113,8 +113,10 @@ am_Error_e Router::getRoute(const bool onlyfree, const am_sourceID_t sourceID, c //Step through the routes and try to use always the best connectionFormat std::vector<am_RoutingElement_s>::iterator routingInterator = actualRoutingElement.begin(); gatewayIterator = listGatewayID.begin(); - if (findBestWay(actualRoutingElement, routingInterator, gatewayIterator, 0) != E_OK) + if (findBestWay(actualRoutingElement, routingInterator, gatewayIterator) != E_OK) + { continue; + } //add the route to the list of routes... actualRoute.sourceID = sourceID; @@ -136,47 +138,61 @@ void Router::listPossibleConnectionFormats(const am_sourceID_t sourceID, const a std::vector<am_ConnectionFormat_e>::iterator it = listSourceFormats.begin(); } -am_Error_e Router::findBestWay(std::vector<am_RoutingElement_s> & listRoute, std::vector<am_RoutingElement_s>::iterator routeIterator, std::vector<am_gatewayID_t>::iterator gatewayIterator, int choiceNumber) +am_Error_e Router::findBestWay(std::vector<am_RoutingElement_s> & listRoute, std::vector<am_RoutingElement_s>::iterator routeIterator, std::vector<am_gatewayID_t>::iterator gatewayIterator) { + am_Error_e returnError = E_NOT_POSSIBLE; std::vector<am_ConnectionFormat_e> listConnectionFormats; + std::vector<am_ConnectionFormat_e> listMergeConnectionFormats; std::vector<am_ConnectionFormat_e> listPriorityConnectionFormats; - //get best connection format for the first connection, now + std::vector<am_RoutingElement_s>::iterator nextIterator = routeIterator + 1; + //get best connection format listPossibleConnectionFormats(routeIterator->sourceID, routeIterator->sinkID, listConnectionFormats); - //if we get to the point that no choice makes sense, return ... - if (choiceNumber >= (int) listConnectionFormats.size()) - return (E_NOT_POSSIBLE); - //if we have not just started, we need to take care about the gateways... if (routeIterator != listRoute.begin()) { //since we have to deal with Gateways, there are restrictions what connectionFormat we can take. So we need to take the subset of connections that are restricted: std::vector<am_ConnectionFormat_e> listRestrictedConnectionFormats; - std::insert_iterator<std::vector<am_ConnectionFormat_e> > inserter(listConnectionFormats, listConnectionFormats.begin()); + std::insert_iterator<std::vector<am_ConnectionFormat_e> > inserter(listMergeConnectionFormats, listMergeConnectionFormats.begin()); std::vector<am_RoutingElement_s>::iterator tempIterator(routeIterator); tempIterator--; listRestrictedOutputFormatsGateways(*gatewayIterator, (tempIterator)->connectionFormat, listRestrictedConnectionFormats); set_intersection(listConnectionFormats.begin(), listConnectionFormats.end(), listRestrictedConnectionFormats.begin(), listRestrictedConnectionFormats.end(), inserter); gatewayIterator++; } + else + { + listMergeConnectionFormats = listConnectionFormats; + } //let the controller decide: - mControlSender->getConnectionFormatChoice(routeIterator->sourceID, routeIterator->sinkID, listConnectionFormats, listPriorityConnectionFormats); + mControlSender->getConnectionFormatChoice(routeIterator->sourceID, routeIterator->sinkID, listMergeConnectionFormats, listPriorityConnectionFormats); + + //we have the list sorted after prios - now we try one after the other with the next part of the route + std::vector<am_ConnectionFormat_e>::iterator connectionFormatIterator = listPriorityConnectionFormats.begin(); - //go back one step, if we cannot find a format and take the next best! - if (listPriorityConnectionFormats.empty()) + //here we need to check if we are at the end and stop + if (nextIterator == listRoute.end()) { - findBestWay(listRoute, --routeIterator, --gatewayIterator, ++choiceNumber); + if (!listPriorityConnectionFormats.empty()) + { + routeIterator->connectionFormat = listPriorityConnectionFormats.front(); + return E_OK; + } + else + return E_NOT_POSSIBLE; } - routeIterator->connectionFormat = listPriorityConnectionFormats.at(choiceNumber); - - //ok, we are through and found a way, if not, take the next part of the route and start with toplevel - if (routeIterator < listRoute.end()) + for (; connectionFormatIterator != listPriorityConnectionFormats.end(); ++connectionFormatIterator) { - findBestWay(listRoute, ++routeIterator, gatewayIterator, 0); + routeIterator->connectionFormat = *connectionFormatIterator; + if ((returnError = findBestWay(listRoute, nextIterator, gatewayIterator)) == E_OK) + { + break; + } } - return (E_OK); + + return (returnError); } void Router::listRestrictedOutputFormatsGateways(const am_gatewayID_t gatewayID, const am_ConnectionFormat_e sinkConnectionFormat, std::vector<am_ConnectionFormat_e> & listFormats) const diff --git a/AudioManagerDaemon/src/RoutingReceiver.cpp b/AudioManagerDaemon/src/RoutingReceiver.cpp index 9a7263d..a6f35e7 100644 --- a/AudioManagerDaemon/src/RoutingReceiver.cpp +++ b/AudioManagerDaemon/src/RoutingReceiver.cpp @@ -319,12 +319,16 @@ am_Error_e RoutingReceiver::sendChangedData(const std::vector<am_EarlyData_s> & am_Error_e RoutingReceiver::peekSinkClassID(const std::string name, const am_sinkClass_t& sinkClassID) { + (void) name; + (void) sinkClassID; //todo: implement return E_NOT_USED; } am_Error_e RoutingReceiver::peekSourceClassID(const std::string name, const am_sourceClass_t& sourceClassID) { + (void) name; + (void) sourceClassID; //todo: implement return E_NOT_USED; } diff --git a/AudioManagerDaemon/src/RoutingSender.cpp b/AudioManagerDaemon/src/RoutingSender.cpp index acdb32f..ac99fb7 100644 --- a/AudioManagerDaemon/src/RoutingSender.cpp +++ b/AudioManagerDaemon/src/RoutingSender.cpp @@ -268,7 +268,7 @@ am_Error_e RoutingSender::asyncSetSinkSoundProperty(am_Handle_s& handle, const a handleData.soundPropery = soundProperty; handle = createHandle(handleData, H_SETSINKSOUNDPROPERTY); mMapHandleInterface.insert(std::make_pair(handle.handle, iter->second)); - return iter->second->asyncSetSinkSoundProperty(handle, soundProperty, sinkID); + return iter->second->asyncSetSinkSoundProperty(handle, sinkID, soundProperty); return (E_NON_EXISTENT); } @@ -282,7 +282,7 @@ am_Error_e RoutingSender::asyncSetSourceSoundProperty(am_Handle_s& handle, const handleData.soundPropery = soundProperty; handle = createHandle(handleData, H_SETSOURCESOUNDPROPERTY); mMapHandleInterface.insert(std::make_pair(handle.handle, iter->second)); - return iter->second->asyncSetSourceSoundProperty(handle, soundProperty, sourceID); + return iter->second->asyncSetSourceSoundProperty(handle, sourceID, soundProperty); return (E_NON_EXISTENT); } @@ -296,7 +296,7 @@ am_Error_e am::RoutingSender::asyncSetSourceSoundProperties(am_Handle_s& handle, handleData.soundProperties = new std::vector<am_SoundProperty_s>(listSoundProperties); handle = createHandle(handleData, H_SETSOURCESOUNDPROPERTIES); mMapHandleInterface.insert(std::make_pair(handle.handle, iter->second)); - return iter->second->asyncSetSourceSoundProperties(handle, listSoundProperties, sourceID); + return iter->second->asyncSetSourceSoundProperties(handle, sourceID, listSoundProperties); return (E_NON_EXISTENT); } @@ -310,7 +310,7 @@ am_Error_e am::RoutingSender::asyncSetSinkSoundProperties(am_Handle_s& handle, c handleData.soundProperties = new std::vector<am_SoundProperty_s>(listSoundProperties); handle = createHandle(handleData, H_SETSINKSOUNDPROPERTIES); mMapHandleInterface.insert(std::make_pair(handle.handle, iter->second)); - return iter->second->asyncSetSinkSoundProperties(handle, listSoundProperties, sinkID); + return iter->second->asyncSetSinkSoundProperties(handle, sinkID, listSoundProperties); return (E_NON_EXISTENT); } diff --git a/AudioManagerDaemon/src/TelnetServer.cpp b/AudioManagerDaemon/src/TelnetServer.cpp index 36eac28..43fcc46 100644 --- a/AudioManagerDaemon/src/TelnetServer.cpp +++ b/AudioManagerDaemon/src/TelnetServer.cpp @@ -113,6 +113,8 @@ TelnetServer::~TelnetServer() void TelnetServer::connectSocket(const pollfd pfd, const sh_pollHandle_t handle, void *userData) { + (void) handle; + (void) userData; //first, accept the connection, create a new filedescriptor struct sockaddr answer; socklen_t len = sizeof(answer); @@ -131,6 +133,8 @@ void TelnetServer::connectSocket(const pollfd pfd, const sh_pollHandle_t handle, void TelnetServer::receiveData(const pollfd pollfd, const sh_pollHandle_t handle, void *userData) { + (void)handle; + (void)userData; //initialize buffer char buffer[100]; //read until buffer is full or no more data is there @@ -145,6 +149,8 @@ void TelnetServer::receiveData(const pollfd pollfd, const sh_pollHandle_t handle bool TelnetServer::dispatchData(const sh_pollHandle_t handle, void *userData) { + (void)handle; + (void)userData; std::vector<connection_s>::iterator iterator = mListConnections.begin(); for (; iterator != mListConnections.end(); ++iterator) { @@ -173,6 +179,8 @@ bool TelnetServer::dispatchData(const sh_pollHandle_t handle, void *userData) bool TelnetServer::check(const sh_pollHandle_t handle, void *userData) { + (void)handle; + (void)userData; if (msgList.size() != 0) return true; return false; } diff --git a/AudioManagerDaemon/src/main.cpp b/AudioManagerDaemon/src/main.cpp index ab51cee..48b00a7 100644 --- a/AudioManagerDaemon/src/main.cpp +++ b/AudioManagerDaemon/src/main.cpp @@ -34,6 +34,7 @@ //todo: there is a bug in the visible flags of sinks and sources. fix it. //todo: make sure that iterators have a fixed end to prevent crashed while adding vectors while iterating on critical vectors //todo: make sure all configurations are tested +//todo: clean up startup sequences controller, command and routing interfaces---- #include <config.h> #include <SocketHandler.h> #ifdef WITH_DBUS_WRAPPER @@ -87,6 +88,7 @@ std::vector<std::string> listRoutingPluginDirs; std::string databasePath = std::string(":memory:"); unsigned int telnetport = DEFAULT_TELNETPORT; unsigned int maxConnections = MAX_TELNETCONNECTIONS; +int fd0, fd1, fd2; void daemonize() { @@ -126,9 +128,9 @@ void daemonize() close(i); } - int fd0 = open("/dev/null", O_RDONLY); - int fd1 = open("/dev/null", O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); - int fd2 = open("/dev/null", O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); + fd0 = open("/dev/null", O_RDONLY); + fd1 = open("/dev/null", O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); + fd2 = open("/dev/null", O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); if (fd0 != STDIN_FILENO || fd1 != STDOUT_FILENO || fd2 != STDERR_FILENO) { @@ -259,24 +261,25 @@ int main(int argc, char *argv[]) RoutingSender iRoutingSender(listRoutingPluginDirs); CommandSender iCommandSender(listCommandPluginDirs); ControlSender iControlSender(controllerPlugin); + Router iRouter(&iDatabaseHandler, &iControlSender); #ifdef WITH_DBUS_WRAPPER #ifdef WITH_SOCKETHANDLER_LOOP CommandReceiver iCommandReceiver(&iDatabaseHandler, &iControlSender, &iSocketHandler, &iDBusWrapper); RoutingReceiver iRoutingReceiver(&iDatabaseHandler, &iRoutingSender, &iControlSender, &iSocketHandler, &iDBusWrapper); - ControlReceiver iControlReceiver(&iDatabaseHandler, &iRoutingSender, &iCommandSender, &iSocketHandler); + ControlReceiver iControlReceiver(&iDatabaseHandler, &iRoutingSender, &iCommandSender, &iSocketHandler, &iRouter); #ifdef WITH_TELNET TelnetServer iTelnetServer(&iSocketHandler,&iCommandSender,&iCommandReceiver,&iRoutingSender,&iRoutingReceiver,&iControlSender,&iControlReceiver,&iDatabaseHandler,telnetport,maxConnections); #endif #else /*WITH_SOCKETHANDLER_LOOP */ CommandReceiver iCommandReceiver(&iDatabaseHandler,&iControlSender,&iDBusWrapper); RoutingReceiver iRoutingReceiver(&iDatabaseHandler,&iRoutingSender,&iControlSender,&iDBusWrapper); - ControlReceiver iControlReceiver(&iDatabaseHandler,&iRoutingSender,&iCommandSender); + ControlReceiver iControlReceiver(&iDatabaseHandler,&iRoutingSender,&iCommandSender, &iRouter); #endif /*WITH_SOCKETHANDLER_LOOP*/ #else /*WITH_DBUS_WRAPPER*/ CommandReceiver iCommandReceiver(&iDatabaseHandler,&iControlSender,&iSocketHandler); RoutingReceiver iRoutingReceiver(&iDatabaseHandler,&iRoutingSender,&iControlSender,&iSocketHandler); - ControlReceiver iControlReceiver(&iDatabaseHandler,&iRoutingSender,&iCommandSender,&iSocketHandler); + ControlReceiver iControlReceiver(&iDatabaseHandler,&iRoutingSender,&iCommandSender,&iSocketHandler, &iRouter); #ifdef WITH_TELNET TelnetServer iTelnetServer(&iSocketHandler,telnetport,maxConnections); #endif @@ -288,8 +291,6 @@ int main(int argc, char *argv[]) DatabaseObserver iObserver(&iCommandSender, &iRoutingSender); #endif - Router iRouter(&iDatabaseHandler,&iControlSender); - //since the plugins have been loaded by the *Senders before, we can tell the Controller this: iControlSender.hookAllPluginsLoaded(); @@ -308,6 +309,9 @@ int main(int argc, char *argv[]) #endif/*WITH_SIMPLEDBUS_LOOP*/ #endif /*WITH_DBUS_WRAPPER*/ + close(fd0); + close(fd1); + close(fd2); exit(0); } |