2 * Copyright (C) 2012, BMW AG
4 * GeniviAudioMananger AudioManagerDaemon
6 * \file CAmTelnetMenuHelper.cpp
9 * \author Frank Herchet (frank.fh.herchet@bmw.de)
12 * GNU Lesser General Public License, version 2.1, with special exception (GENIVI clause)
13 * Copyright (C) 2012, BMW AG Frank Herchet frank.fh.herchet@bmw.de
15 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
16 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License, version 2.1, for more details.
17 * You should have received a copy of the GNU Lesser General Public License, version 2.1, along with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
18 * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may also be applicable to programs even in cases in which the program is not a library in the technical sense.
19 * Linking AudioManager statically or dynamically with other modules is making a combined work based on AudioManager. You may license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to license your linked modules under the GNU Lesser General Public License, version 2.1, you may use the program under the following exception.
20 * As a special exception, the copyright holders of AudioManager give you permission to combine AudioManager with software programs or libraries that are released under any license unless such a combination is not permitted by the license of such a software program or library. You may copy and distribute such a system following the terms of the GNU Lesser General Public License, version 2.1, including this special exception, for AudioManager and the licenses of the other code concerned.
21 * Note that people who make modified versions of AudioManager are not obligated to grant this special exception for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License, version 2.1, gives permission to release a modified version without this exception; this exception also makes it possible to release a modified version which carries forward this exception.
25 #include "CAmTelnetMenuHelper.h"
29 #define DEBUG_ON false
33 DLT_IMPORT_CONTEXT(AudioManager)
35 CAmTelnetMenuHelper* CAmTelnetMenuHelper::instance = NULL;
37 /****************************************************************************/
38 CAmTelnetMenuHelper::CAmTelnetMenuHelper(SocketHandler *iSocketHandler,
39 CommandSender *iCommandSender,
40 CommandReceiver *iCommandReceiver,
41 RoutingSender *iRoutingSender,
42 RoutingReceiver *iRoutingReceiver,
43 ControlSender *iControlSender,
44 ControlReceiver *iControlReceiver,
45 DatabaseHandler *iDatabasehandler,
47 /****************************************************************************/
48 : mTelenetServer(NULL)
49 , mSocketHandler(iSocketHandler)
50 , mCommandSender(iCommandSender)
51 , mCommandReceiver(iCommandReceiver)
52 , mRoutingSender(iRoutingSender)
53 , mRoutingReceiver(iRoutingReceiver)
54 , mControlSender(iControlSender)
55 , mControlReceiver(iControlReceiver)
56 , mDatabasehandler(iDatabasehandler)
63 /****************************************************************************/
64 CAmTelnetMenuHelper::~CAmTelnetMenuHelper()
65 /****************************************************************************/
69 /****************************************************************************/
70 void CAmTelnetMenuHelper::createCommandMaps()
71 /****************************************************************************/
75 mRootCommands.clear();
77 mRootCommands.insert(std::make_pair("help",sCommandPrototypeInfo("show all possible commands",&CAmTelnetMenuHelper::helpCommand)));
78 mRootCommands.insert(std::make_pair("list",sCommandPrototypeInfo("Go into 'list'-submenu",&CAmTelnetMenuHelper::rootListCommand)));
79 mRootCommands.insert(std::make_pair("info",sCommandPrototypeInfo("Go into 'info'-submenu",&CAmTelnetMenuHelper::rootInfoCommand)));
80 mRootCommands.insert(std::make_pair("set",sCommandPrototypeInfo("Go into 'set'-submenu",&CAmTelnetMenuHelper::rootSetCommand)));
81 mRootCommands.insert(std::make_pair("get",sCommandPrototypeInfo("Go into 'get'-submenu",&CAmTelnetMenuHelper::rootGetCommand)));
82 mRootCommands.insert(std::make_pair("exit",sCommandPrototypeInfo("quit telnet session",&CAmTelnetMenuHelper::exitCommand)));
85 mListCommands.insert(std::make_pair("help",sCommandPrototypeInfo(std::string("show all possible commands"),&CAmTelnetMenuHelper::helpCommand)));
86 mListCommands.insert(std::make_pair("conn",sCommandPrototypeInfo("list all connections",&CAmTelnetMenuHelper::listConnectionsCommand)));
87 mListCommands.insert(std::make_pair("sources",sCommandPrototypeInfo("list all available sources",&CAmTelnetMenuHelper::listSourcesCommand)));
88 mListCommands.insert(std::make_pair("sinks",sCommandPrototypeInfo("list all available sinks",&CAmTelnetMenuHelper::listSinksCommands)));
89 mListCommands.insert(std::make_pair("crfaders",sCommandPrototypeInfo("list all crossfaders",&CAmTelnetMenuHelper::listCrossfaders)));
90 mListCommands.insert(std::make_pair("domains",sCommandPrototypeInfo("list all domains",&CAmTelnetMenuHelper::listDomainsCommand)));
91 mListCommands.insert(std::make_pair("gws",sCommandPrototypeInfo("list all gateways",&CAmTelnetMenuHelper::listGatewaysCommand)));
92 mListCommands.insert(std::make_pair("..",sCommandPrototypeInfo("one step back in menu tree (back to root folder)",&CAmTelnetMenuHelper::oneStepBackCommand)));
93 mListCommands.insert(std::make_pair("exit",sCommandPrototypeInfo("close telnet session",&CAmTelnetMenuHelper::exitCommand)));
96 mSetCommands.insert(std::make_pair("help",sCommandPrototypeInfo(std::string("show all possible commands"),&CAmTelnetMenuHelper::helpCommand)));
97 mSetCommands.insert(std::make_pair("..",sCommandPrototypeInfo("one step back in menu tree (back to root folder)",&CAmTelnetMenuHelper::oneStepBackCommand)));
98 mSetCommands.insert(std::make_pair("exit",sCommandPrototypeInfo("close telnet session",&CAmTelnetMenuHelper::exitCommand)));
99 mSetCommands.insert(std::make_pair("conn",sCommandPrototypeInfo("use 'conn sourceId sinkId' to connect a source and a sink",&CAmTelnetMenuHelper::setConnection)));
100 mSetCommands.insert(std::make_pair("routing",sCommandPrototypeInfo("use 'routing sourceId sinkId' to get all\n\t possible routes between a sourceID and a sinkID",&CAmTelnetMenuHelper::setRoutingCommand)));
101 mSetCommands.insert(std::make_pair("disc",sCommandPrototypeInfo("use 'disc connectionID' to disconnect \n\t this connection",&CAmTelnetMenuHelper::setDisconnectConnId)));
104 mGetCommands.insert(std::make_pair("help",sCommandPrototypeInfo(std::string("show all possible commands"),&CAmTelnetMenuHelper::helpCommand)));
105 mGetCommands.insert(std::make_pair("routing",sCommandPrototypeInfo("show current routing",&CAmTelnetMenuHelper::getRoutingCommand)));
106 mGetCommands.insert(std::make_pair("sendv",sCommandPrototypeInfo("show senderversion",&CAmTelnetMenuHelper::getSenderversionCommand)));
107 mGetCommands.insert(std::make_pair("recv",sCommandPrototypeInfo("show receiverversion ",&CAmTelnetMenuHelper::getReceiverversionCommand)));
108 mGetCommands.insert(std::make_pair("..",sCommandPrototypeInfo("one step back in menu tree (back to root folder)",&CAmTelnetMenuHelper::oneStepBackCommand)));
109 mGetCommands.insert(std::make_pair("exit",sCommandPrototypeInfo("close telnet session",&CAmTelnetMenuHelper::exitCommand)));
112 mInfoCommands.insert(std::make_pair("help",sCommandPrototypeInfo(std::string("show all possible commands"),&CAmTelnetMenuHelper::helpCommand)));
113 mInfoCommands.insert(std::make_pair("sysprop",sCommandPrototypeInfo("show all systemproperties",&CAmTelnetMenuHelper::infoSystempropertiesCommand)));
114 mInfoCommands.insert(std::make_pair("..",sCommandPrototypeInfo("one step back in menu tree (back to root folder)",&CAmTelnetMenuHelper::oneStepBackCommand)));
115 mInfoCommands.insert(std::make_pair("exit",sCommandPrototypeInfo("close telnet session",&CAmTelnetMenuHelper::exitCommand)));
118 /****************************************************************************/
119 void CAmTelnetMenuHelper::setTelnetServer(TelnetServer* iTelnetServer)
120 /****************************************************************************/
122 mTelenetServer = iTelnetServer;
125 /****************************************************************************/
126 void CAmTelnetMenuHelper::newSocketConnection(int filedescriptor)
127 /****************************************************************************/
129 EMainState state = eRootState;
130 std::map<int,EMainState>::iterator it;
131 std::stringstream welcome;
133 it = mCurrentMainStateMap.find(filedescriptor);
134 if( it != mCurrentMainStateMap.end())
136 // socket connection already exists, delete entry and go back to root state
137 mCurrentMainStateMap.erase(it);
140 it = mCurrentMainStateMap.begin();
142 // insert new socket connection
143 mCurrentMainStateMap.insert(it,std::make_pair<int,EMainState>(filedescriptor,state));
145 // Send welcome message
146 welcome << "Welcome to GENIVI AudioManager " << DAEMONVERSION << "\n>";
147 send(filedescriptor,welcome.str().c_str(),welcome.str().size(),0);
150 /****************************************************************************/
151 void CAmTelnetMenuHelper::socketConnectionsClosed(int filedescriptor)
152 /****************************************************************************/
154 std::map<int,EMainState>::iterator it;
156 it = mCurrentMainStateMap.find(filedescriptor);
157 if( it != mCurrentMainStateMap.end())
159 mCurrentMainStateMap.erase(it);
163 // connection not found
167 /****************************************************************************/
168 void CAmTelnetMenuHelper::enterCmdQueue(std::queue<std::string> & CmdQueue, int & filedescriptor)
169 /****************************************************************************/
171 std::map<int,EMainState>::iterator it;
173 tCommandMap::iterator cmditer;
175 // find current filedescriptor to get the current state of the telnet session
176 it = mCurrentMainStateMap.find(filedescriptor);
177 while(!CmdQueue.empty())
179 cmd = CmdQueue.front();
181 // Now remove the first command, it's stored in 'cmd'
183 // telnet session found. depending on the current state, different commands are available
187 cmditer = mRootCommands.find(cmd);
188 if(mRootCommands.end() != cmditer)
189 cmditer->second.CommandPrototype(CmdQueue,filedescriptor);
191 sendError(filedescriptor,"Command not found\n");
194 cmditer = mListCommands.find(cmd);
195 if(mListCommands.end() != cmditer)
196 cmditer->second.CommandPrototype(CmdQueue,filedescriptor);
198 sendError(filedescriptor,"Command not found\n");
201 cmditer = mInfoCommands.find(cmd);
202 if(mInfoCommands.end() != cmditer)
203 cmditer->second.CommandPrototype(CmdQueue,filedescriptor);
205 sendError(filedescriptor,"Command not found\n");
208 cmditer = mGetCommands.find(cmd);
209 if(mGetCommands.end() != cmditer)
210 cmditer->second.CommandPrototype(CmdQueue,filedescriptor);
212 sendError(filedescriptor,"Command not found\n");
215 cmditer = mSetCommands.find(cmd);
216 if(mSetCommands.end() != cmditer)
217 cmditer->second.CommandPrototype(CmdQueue,filedescriptor);
219 sendError(filedescriptor,"Command not found\n");
226 sendCurrentCmdPrompt(filedescriptor);
229 /****************************************************************************/
230 void CAmTelnetMenuHelper::sendError(int & filedescriptor, std::string error_string)
231 /****************************************************************************/
233 send(filedescriptor,error_string.c_str(),error_string.size(),0);
236 /****************************************************************************/
237 void CAmTelnetMenuHelper::sendTelnetLine(int & filedescriptor, std::stringstream &line)
238 /****************************************************************************/
240 send(filedescriptor,line.str().c_str(),line.str().size(),0);
243 /****************************************************************************/
244 void CAmTelnetMenuHelper::sendCurrentCmdPrompt(int & filedescriptor)
245 /****************************************************************************/
247 std::map<int,EMainState>::iterator it;
248 std::stringstream outputstream;
249 outputstream << std::endl;
251 it = mCurrentMainStateMap.find(filedescriptor);
252 if( it != mCurrentMainStateMap.end())
257 outputstream << "\\>";
260 outputstream << "\\List>";
263 outputstream << "\\Get>";
266 outputstream << "\\Set>";
269 outputstream << "\\Info>";
275 send(filedescriptor,outputstream.str().c_str(),outputstream.str().size(),0);
280 // connection not found
284 /****************************************************************************/
285 void CAmTelnetMenuHelper::exitCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
286 /****************************************************************************/
288 instance->exitCommandExec(CmdQueue,filedescriptor);
291 /****************************************************************************/
292 void CAmTelnetMenuHelper::oneStepBackCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
293 /****************************************************************************/
295 std::map<int,EMainState>::iterator it;
296 it = mCurrentMainStateMap.find(filedescriptor);
297 if( it != mCurrentMainStateMap.end())
299 if(DEBUG_ON)std::cout << "old state: " << it->second;
303 it->second = eRootState;
306 it->second = eRootState;;
309 it->second = eRootState;;
312 it->second = eRootState;;
315 it->second = eRootState;;
318 it->second = eRootState;
321 if(DEBUG_ON)std::cout << "new state: " << it->second << std::endl;
325 /****************************************************************************/
326 void CAmTelnetMenuHelper::oneStepBackCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
327 /****************************************************************************/
329 instance->oneStepBackCommandExec(CmdQueue,filedescriptor);
332 /****************************************************************************/
333 void CAmTelnetMenuHelper::exitCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
334 /****************************************************************************/
336 std::map<int,EMainState>::iterator it;
337 std::stringstream line;
338 std::stringstream output;
340 // Sending a last message to the client
341 output << "Your wish is my command ... bye!" << std::endl;
342 sendTelnetLine(filedescriptor,output);
345 tCommandMap::iterator iter;
346 it = mCurrentMainStateMap.find(filedescriptor);
347 if( it != mCurrentMainStateMap.end())
349 if(DEBUG_ON)std::cout << "removing client connection " << filedescriptor << std::endl;
351 if(NULL != mTelenetServer)
353 mTelenetServer->disconnectClient(filedescriptor);
354 mCurrentMainStateMap.erase(it);
358 // ASSERT mTelenetServer == NULL
359 if(DEBUG_ON)std::cout << "mTelenetServer";
364 /****************************************************************************/
365 void CAmTelnetMenuHelper::helpCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
366 /****************************************************************************/
368 instance->helpCommandExec(CmdQueue,filedescriptor);
371 /****************************************************************************/
372 void CAmTelnetMenuHelper::helpCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
373 /****************************************************************************/
375 std::map<int,EMainState>::iterator it;
376 std::stringstream line;
377 tCommandMap::iterator cmdIter;
378 it = mCurrentMainStateMap.find(filedescriptor);
379 if( it != mCurrentMainStateMap.end())
381 line << "###################################################" << std::endl;
382 line << "###### The following commands are supported: ######"<< std::endl;
383 line << "###################################################" << std::endl << std::endl;
388 cmdIter = mRootCommands.begin();
389 while(cmdIter != mRootCommands.end())
391 line << cmdIter->first << "\t- " << cmdIter->second.info << std::endl;
396 cmdIter = mListCommands.begin();
397 while(cmdIter != mListCommands.end())
399 line << cmdIter->first << "\t- " << cmdIter->second.info << std::endl;
404 cmdIter = mGetCommands.begin();
405 while(cmdIter != mGetCommands.end())
407 line << cmdIter->first << "\t- " << cmdIter->second.info << std::endl;
412 cmdIter = mSetCommands.begin();
413 while(cmdIter != mSetCommands.end())
415 line << cmdIter->first << "\t- " << cmdIter->second.info << std::endl;
420 cmdIter = mInfoCommands.begin();
421 while(cmdIter != mInfoCommands.end())
423 line << cmdIter->first << "\t- " << cmdIter->second.info << std::endl;
430 sendTelnetLine(filedescriptor,line);
434 /****************************************************************************/
435 void CAmTelnetMenuHelper::rootGetCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
436 /****************************************************************************/
438 instance->rootGetCommandExec(CmdQueue,filedescriptor);
441 /****************************************************************************/
442 void CAmTelnetMenuHelper::rootGetCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
443 /****************************************************************************/
445 std::map<int,EMainState>::iterator it;
446 it = mCurrentMainStateMap.find(filedescriptor);
447 if( it != mCurrentMainStateMap.end())
449 it->second = eGetState;
453 /****************************************************************************/
454 void CAmTelnetMenuHelper::rootSetCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
455 /****************************************************************************/
457 instance->rootSetCommandExec(CmdQueue,filedescriptor);
460 /****************************************************************************/
461 void CAmTelnetMenuHelper::rootSetCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
462 /****************************************************************************/
464 std::map<int,EMainState>::iterator it;
465 it = mCurrentMainStateMap.find(filedescriptor);
466 if( it != mCurrentMainStateMap.end())
468 it->second = eSetState;
472 /****************************************************************************/
473 void CAmTelnetMenuHelper::rootListCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
474 /****************************************************************************/
476 instance->rootListCommandExec(CmdQueue,filedescriptor);
479 /****************************************************************************/
480 void CAmTelnetMenuHelper::rootListCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
481 /****************************************************************************/
483 std::map<int,EMainState>::iterator it;
484 it = mCurrentMainStateMap.find(filedescriptor);
485 if( it != mCurrentMainStateMap.end())
487 it->second = eListState;
491 /****************************************************************************/
492 void CAmTelnetMenuHelper::rootInfoCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
493 /****************************************************************************/
495 instance->rootInfoCommandExec(CmdQueue,filedescriptor);
498 /****************************************************************************/
499 void CAmTelnetMenuHelper::rootInfoCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
500 /****************************************************************************/
502 std::map<int,EMainState>::iterator it;
503 it = mCurrentMainStateMap.find(filedescriptor);
504 if( it != mCurrentMainStateMap.end())
506 it->second = eInfoState;
510 /****************************************************************************/
511 void CAmTelnetMenuHelper::listConnectionsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
512 /****************************************************************************/
514 instance->listConnectionsCommandExec(CmdQueue,filedescriptor);
517 /****************************************************************************/
518 void CAmTelnetMenuHelper::listConnectionsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
519 /****************************************************************************/
521 std::vector<am_Connection_s> listConnections;
522 std::stringstream line;
524 mDatabasehandler->getListConnections(listConnections);
526 line << "\tCurrent connections: " << listConnections.size() << std::endl;
528 sendTelnetLine(filedescriptor,line);
530 std::vector<am_Connection_s>::iterator it(listConnections.begin());
531 while(it != listConnections.end())
534 line << "\tID: " << it->connectionID
535 << "\tSrcID: " << it->sourceID
536 << "\tSinkID: " << it->sinkID
537 << "\tFormat: " << it->connectionFormat
538 << "\tdelay: " << it->delay
541 sendTelnetLine(filedescriptor,line);
546 /****************************************************************************/
547 void CAmTelnetMenuHelper::listSourcesCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
548 /****************************************************************************/
550 instance->listSourcesCommandExec(CmdQueue,filedescriptor);
553 /****************************************************************************/
554 void CAmTelnetMenuHelper::listSourcesCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
555 /****************************************************************************/
557 std::vector<am_Source_s> listSources;
558 std::stringstream line;
560 mDatabasehandler->getListSources(listSources);
562 line << "\tCurrent sources: " << listSources.size();
563 sendTelnetLine(filedescriptor,line);
565 std::vector<am_Source_s>::iterator it(listSources.begin());
566 while(it != listSources.end())
569 line << "\tID: " << it->sourceID
570 << "\tDomainID: " << it->domainID
571 << "\tName: " << it->name
572 << "\tState: " << it->sourceState
573 << "\tVolume: " << it->volume
576 sendTelnetLine(filedescriptor,line);
581 /****************************************************************************/
582 void CAmTelnetMenuHelper::listSinksCommands(std::queue<std::string> & CmdQueue, int & filedescriptor)
583 /****************************************************************************/
585 instance->listSinksCommandsExec(CmdQueue,filedescriptor);
588 /****************************************************************************/
589 void CAmTelnetMenuHelper::listSinksCommandsExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
590 /****************************************************************************/
592 std::vector<am_Sink_s> listSinks;
593 std::stringstream line;
595 mDatabasehandler->getListSinks(listSinks);
597 line << "\tCurrent sinks: " << listSinks.size() << std::endl;
598 sendTelnetLine(filedescriptor,line);
600 std::vector<am_Sink_s>::iterator it(listSinks.begin());
601 while(it != listSinks.end())
604 line << "\tID: " << it->sinkID
605 << "\tDomainID: " << it->domainID
606 << "\tName: " << it->name
607 << "\tAvailable: " << it->available.availability
608 << "\tVolume: " << it->volume
611 sendTelnetLine(filedescriptor,line);
616 /****************************************************************************/
617 void CAmTelnetMenuHelper::listCrossfaders(std::queue<std::string> & CmdQueue, int & filedescriptor)
618 /****************************************************************************/
620 instance->listCrossfadersExec(CmdQueue,filedescriptor);
623 /****************************************************************************/
624 void CAmTelnetMenuHelper::listCrossfadersExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
625 /****************************************************************************/
627 std::vector<am_Crossfader_s> listCrossfaders;
628 std::stringstream line;
630 mDatabasehandler->getListCrossfaders(listCrossfaders);
632 line << "\tCurrent crossfaders: " << listCrossfaders.size();
633 sendTelnetLine(filedescriptor,line);
635 std::vector<am_Crossfader_s>::iterator it(listCrossfaders.begin());
636 while(it != listCrossfaders.end())
639 line << "\tID: " << it->crossfaderID
640 << "\tName: " << it->name
641 << "\tSourceID: " << it->sourceID
644 sendTelnetLine(filedescriptor,line);
649 /****************************************************************************/
650 void CAmTelnetMenuHelper::listDomainsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
651 /****************************************************************************/
653 instance->listDomainsCommandExec(CmdQueue,filedescriptor);
656 /****************************************************************************/
657 void CAmTelnetMenuHelper::listDomainsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
658 /****************************************************************************/
660 std::vector<am_Domain_s> listDomains;
661 std::stringstream line;
663 mDatabasehandler->getListDomains(listDomains);
665 line << "\tCurrent domains: " << listDomains.size()<<std::endl;
666 sendTelnetLine(filedescriptor,line);
668 std::vector<am_Domain_s>::iterator it(listDomains.begin());
669 while(it != listDomains.end())
672 line << "\tID: " << it->domainID
673 << "\tName: " << it->name
674 << "\tBusname: " << it->busname
675 << "\tNodename: " << it->nodename
676 << "\tState: " << static_cast<int>(it->state)
679 sendTelnetLine(filedescriptor,line);
684 /****************************************************************************/
685 void CAmTelnetMenuHelper::listGatewaysCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
686 /****************************************************************************/
688 instance->listGatewaysCommandExec(CmdQueue,filedescriptor);
691 /****************************************************************************/
692 void CAmTelnetMenuHelper::listGatewaysCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
693 /****************************************************************************/
695 std::vector<am_Gateway_s> listGateways;
696 std::stringstream line;
698 mDatabasehandler->getListGateways(listGateways);
700 line << "\tCurrent gateways: " << listGateways.size();
701 sendTelnetLine(filedescriptor,line);
703 std::vector<am_Gateway_s>::iterator it(listGateways.begin());
704 while(it != listGateways.end())
707 line << "\tID: " << it->gatewayID
708 << "\tName: " << it->name
709 << "\tSourceID: " << it->sourceID
710 << "\tSinkID: " << it->sinkID
713 sendTelnetLine(filedescriptor,line);
718 /****************************************************************************/
719 void CAmTelnetMenuHelper::getRoutingCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
720 /****************************************************************************/
722 instance->getRoutingCommandExec(CmdQueue,filedescriptor);
725 /****************************************************************************/
726 void CAmTelnetMenuHelper::getRoutingCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
727 /****************************************************************************/
729 //TODO: fill with function
732 /****************************************************************************/
733 void CAmTelnetMenuHelper::getSenderversionCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
734 /****************************************************************************/
736 instance->getSenderversionCommandExec(CmdQueue,filedescriptor);
739 /****************************************************************************/
740 void CAmTelnetMenuHelper::getSenderversionCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
741 /****************************************************************************/
743 std::stringstream line;
745 line << "\tSender versions:" << std::endl
746 << "\tCtrl: " << mControlSender->getInterfaceVersion() << " | "
747 << "Cmd: " << mCommandSender->getInterfaceVersion() << " | "
748 << "Routing: " << mRoutingSender->getInterfaceVersion() << std::endl;
750 sendTelnetLine(filedescriptor,line);
753 /****************************************************************************/
754 void CAmTelnetMenuHelper::getReceiverversionCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
755 /****************************************************************************/
757 instance->getReceiverversionCommandExec(CmdQueue,filedescriptor);
760 /****************************************************************************/
761 void CAmTelnetMenuHelper::getReceiverversionCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
762 /****************************************************************************/
764 std::stringstream line;
766 line << "\tReceiver versions:" << std::endl
767 << "\tCtrl: " << mControlReceiver->getInterfaceVersion() << " | "
768 << "Cmd: " << mCommandReceiver->getInterfaceVersion() << " | "
769 << "Routing: " << mRoutingReceiver->getInterfaceVersion() << std::endl;
771 sendTelnetLine(filedescriptor,line);
775 /****************************************************************************/
776 void CAmTelnetMenuHelper::infoSystempropertiesCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
777 /****************************************************************************/
779 instance->infoSystempropertiesCommandExec(CmdQueue,filedescriptor);
782 /****************************************************************************/
783 void CAmTelnetMenuHelper::infoSystempropertiesCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
784 /****************************************************************************/
786 std::vector<am_SystemProperty_s> listSystemProperties;
787 std::vector<am_SystemProperty_s>::iterator it;
788 std::stringstream line;
790 mDatabasehandler->getListSystemProperties(listSystemProperties);
792 line << "\tSystemproperties: ";
793 sendTelnetLine(filedescriptor,line);
795 for(it = listSystemProperties.begin(); it < listSystemProperties.end(); it++ )
798 line << "\tType: " << it->type << " Value: " << it->value << std::endl;
799 sendTelnetLine(filedescriptor,line);
803 /****************************************************************************/
804 void CAmTelnetMenuHelper::setRoutingCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
805 /****************************************************************************/
807 instance->setRoutingCommandExec(CmdQueue,filedescriptor);
810 /****************************************************************************/
811 void CAmTelnetMenuHelper::setRoutingCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
812 /****************************************************************************/
814 std::stringstream output;
815 std::vector<am_Route_s> routingList;
817 am_sourceID_t sourceID = 0;
818 am_sinkID_t sinkID = 0;
821 am_Error_e rError = E_OK;
824 if(CmdQueue.size() >= 2)
826 std::istringstream istream_sourceID(CmdQueue.front());
828 std::istringstream istream_sinkID(CmdQueue.front());
831 if(!(istream_sourceID >> sourceID))
833 if(!(istream_sinkID >> sinkID))
838 sendError(filedescriptor,"Error parsing sourcID and sinkID");
842 if(DEBUG_ON)std::cout << "setRoutingCommandExec(sourceID: " << sourceID << ",sinkID: " << sinkID << ")" << std::endl;
844 rError = mRouter->getRoute(true,sourceID,sinkID,routingList);
848 std::vector<am_Route_s>::iterator rlIter = routingList.begin();
849 for(int rlCnt = 1;rlIter < routingList.end();rlIter++)
851 output << "#" << rlCnt << " ";
853 std::vector<am_RoutingElement_s>::iterator reIter = rlIter->route.begin();
854 for(;reIter < rlIter->route.end();reIter++)
856 reIter->connectionFormat;
858 output << ">(" << reIter->sourceID << ")->--[D:"<< reIter->domainID <<"][F:"<< reIter->connectionFormat <<"]-->-(" << reIter->sinkID<< ")" << std::endl;
864 sendTelnetLine(filedescriptor,output);
868 sendError(filedescriptor,"Error getting route");
875 output << "Not enough arguments to set routing. Please enter sourceID and sinkID after command" << std::endl;
882 /****************************************************************************/
883 void CAmTelnetMenuHelper::setConnection(std::queue<std::string> & CmdQueue, int & filedescriptor)
884 /****************************************************************************/
886 instance->setConnectionExec(CmdQueue,filedescriptor);
889 /****************************************************************************/
890 void CAmTelnetMenuHelper::setConnectionExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
891 /****************************************************************************/
893 std::stringstream output;
895 am_sourceID_t sourceID = 0;
896 am_sinkID_t sinkID = 0;
897 am_mainConnectionID_t connID = 0;
900 am_Error_e rError = E_OK;
902 if(CmdQueue.size() >= 2)
904 std::istringstream istream_sourceID(CmdQueue.front());
907 std::istringstream istream_sinkID(CmdQueue.front());
910 if(!(istream_sourceID >> sourceID))
913 if(!(istream_sinkID >> sinkID))
918 sendError(filedescriptor,"Error parsing sinkID and/or sourceID");
922 // Try to set up connection
923 rError = mCommandReceiver->connect(sourceID,sinkID,connID);
927 output << "ConnID: " << connID << "\tSrc: " << sourceID << " ---> Sink: " << sinkID << std::endl;
928 sendTelnetLine(filedescriptor,output);
932 sendError(filedescriptor,"Error connecting sourceID and sinkID");
939 sendError(filedescriptor,"Not enough arguments to set routing. Please enter sourceID and sinkID after command");
944 /****************************************************************************/
945 void CAmTelnetMenuHelper::setDisconnectConnId(std::queue<std::string> & CmdQueue, int & filedescriptor)
946 /****************************************************************************/
948 instance->setDisconnectConnIdExec(CmdQueue,filedescriptor);
951 /****************************************************************************/
952 void CAmTelnetMenuHelper::setDisconnectConnIdExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
953 /****************************************************************************/
955 std::stringstream output;
957 am_mainConnectionID_t connID = 0;
960 am_Error_e rError = E_OK;
962 if(CmdQueue.size() >= 1)
964 std::istringstream istream_connID(CmdQueue.front());
967 if(!(istream_connID >> connID))
972 sendError(filedescriptor,"Error parsing connID");
976 // Try to disconnect connection id
977 rError = mCommandReceiver->disconnect(connID);
981 output << "ConnID " << connID << " closed successfully! " << std::endl;
982 sendTelnetLine(filedescriptor,output);
986 sendError(filedescriptor,"Error disconnecting connectionID");
991 sendError(filedescriptor,"Not enough arguments to disconnect a Main Connection, please enter 'connectionID' after command");
996 /****************************************************************************/
997 void CAmTelnetMenuHelper::setSourceSoundProperties(std::queue<std::string> & CmdQueue, int & filedescriptor)
998 /****************************************************************************/
1000 instance->setConnectionExec(CmdQueue,filedescriptor);
1003 /****************************************************************************/
1004 void CAmTelnetMenuHelper::setSourceSoundPropertiesExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
1005 /****************************************************************************/
1007 std::stringstream output;
1008 am_sinkID_t sourceID;
1009 am_MainSoundProperty_s soundProperty;
1010 unsigned int tmpType = 0;
1013 if(CmdQueue.size() >= 3)
1015 std::istringstream istream_sourceID(CmdQueue.front());
1018 std::istringstream istream_type(CmdQueue.front());
1021 std::istringstream istream_value(CmdQueue.front());
1024 if(!(istream_type >> tmpType))
1027 if(tmpType < MSP_MAX)
1028 soundProperty.type = static_cast<am_MainSoundPropertyType_e>(tmpType);
1032 if(!(istream_value >> soundProperty.value))
1035 if(!(istream_sourceID >> sourceID))
1040 sendError(filedescriptor,"Error parsing MainSinkSoundProperty 'type', 'value' or 'sourceID'");
1044 if(E_OK == mCommandReceiver->setMainSourceSoundProperty(soundProperty,sourceID))
1046 output << "MainSourceSoundProperty set: " << soundProperty.type << "->" << soundProperty.value << std::endl;
1047 sendTelnetLine(filedescriptor,output);
1051 sendError(filedescriptor,"Error setMainSourceSoundProperty");
1056 sendError(filedescriptor,"Not enough arguments to set MainSourceSoundProperty, please enter 'sourceID', 'type' and 'value' after command");
1061 /****************************************************************************/
1062 void CAmTelnetMenuHelper::setSinkSoundProperties(std::queue<std::string> & CmdQueue, int & filedescriptor)
1063 /****************************************************************************/
1065 instance->setConnectionExec(CmdQueue,filedescriptor);
1068 /****************************************************************************/
1069 void CAmTelnetMenuHelper::setSinkSoundPropertiesExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
1070 /****************************************************************************/
1072 std::stringstream output;
1074 am_MainSoundProperty_s soundProperty;
1075 unsigned int tmpType = 0;
1078 if(CmdQueue.size() >= 3)
1080 std::istringstream istream_sinkID(CmdQueue.front());
1083 std::istringstream istream_type(CmdQueue.front());
1086 std::istringstream istream_value(CmdQueue.front());
1089 if(!(istream_type >> tmpType))
1092 if(tmpType < MSP_MAX)
1093 soundProperty.type = static_cast<am_MainSoundPropertyType_e>(tmpType);
1097 if(!(istream_value >> soundProperty.value))
1100 if(!(istream_sinkID >> sinkID))
1105 sendError(filedescriptor,"Error parsing MainSinkSoundProperty 'type', 'value' or 'sinkID'");
1109 if(E_OK == mCommandReceiver->setMainSinkSoundProperty(soundProperty,sinkID))
1111 output << "MainSinkSoundProperty set: " << soundProperty.type << "->" << soundProperty.value << std::endl;
1112 sendTelnetLine(filedescriptor,output);
1116 sendError(filedescriptor,"Error setMainSinkSoundProperty");
1121 sendError(filedescriptor,"Not enough arguments to set MainSinkSoundProperty, please enter 'sinkID', 'type' and 'value' after command");
1127 /****************************************************************************/
1128 void CAmTelnetMenuHelper::listPluginsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor)
1129 /****************************************************************************/
1131 instance->listPluginsCommandExec(CmdQueue,filedescriptor);
1134 /****************************************************************************/
1135 void CAmTelnetMenuHelper::listPluginsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor)
1136 /****************************************************************************/
1138 std::vector<std::string> PlugInNames;
1139 std::vector<std::string>::iterator iter;
1140 std::stringstream output;
1141 am_Error_e rError = E_OK;
1144 rError = mCommandSender->getListPlugins(PlugInNames);
1146 output << "CommandSender Plugins loaded: " << PlugInNames.size() << std::endl;
1148 for(iter = PlugInNames.begin(); iter < PlugInNames.end(); iter++ )
1150 output << iter->c_str() << std::endl;
1153 rError = mRoutingSender->getListPlugins(PlugInNames);
1155 output << std::endl << "RoutingSender Plugins loaded: " << PlugInNames.size() << std::endl;
1157 for(iter = PlugInNames.begin(); iter < PlugInNames.end(); iter++ )
1159 output << iter->c_str() << std::endl;
1162 sendTelnetLine(filedescriptor,output);