summaryrefslogtreecommitdiff
path: root/AudioManagerCore/include/CAmTelnetServer.h
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerCore/include/CAmTelnetServer.h')
-rw-r--r--AudioManagerCore/include/CAmTelnetServer.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/AudioManagerCore/include/CAmTelnetServer.h b/AudioManagerCore/include/CAmTelnetServer.h
new file mode 100644
index 0000000..0e4c510
--- /dev/null
+++ b/AudioManagerCore/include/CAmTelnetServer.h
@@ -0,0 +1,100 @@
+/**
+ * SPDX license identifier: MPL-2.0
+ *
+ * Copyright (C) 2012, BMW AG
+ *
+ * This file is part of GENIVI Project AudioManager.
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ *
+ * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012
+ * \author Frank Herchet, frank.fh.herchet@bmw.de BMW 2012
+ *
+ * \file CAmTelnetServer.h
+ * For further information see http://www.genivi.org/.
+ *
+ */
+
+#ifndef TELNETSERVER_H_
+#define TELNETSERVER_H_
+
+#include <queue>
+#include <map>
+#include "CAmSocketHandler.h"
+#include "CAmTelnetMenuHelper.h"
+
+namespace am
+{
+
+class IAmDatabaseHandler;
+class CAmCommandSender;
+class CAmRoutingSender;
+class CAmControlSender;
+class CAmCommandReceiver;
+class CAmRoutingReceiver;
+class CAmControlReceiver;
+class CAmRouter;
+class CAmTelnetMenuHelper;
+
+/**
+ * Implements a telnetserver that can be used to connect to the audiomanager, retrieve some information and use it. For debugging purposes.
+ * For example, launch a telnet session on port 6060:
+ * \code telnet localhost 6060 \endcode
+ * more details can be found at the README
+ */
+class CAmTelnetServer
+{
+public:
+ CAmTelnetServer(CAmSocketHandler *iSocketHandler, CAmCommandSender *iCommandSender, CAmCommandReceiver *iCommandReceiver, CAmRoutingSender *iRoutingSender, CAmRoutingReceiver *iRoutingReceiver, CAmControlSender *iControlSender, CAmControlReceiver *iControlReceiver, IAmDatabaseHandler *iDatabasehandler, CAmRouter *iRouter, unsigned int servPort, unsigned int maxConnections);
+ ~CAmTelnetServer();
+ void connectSocket(const pollfd pfd, const sh_pollHandle_t handle, void* userData);
+ void disconnectClient(int filedescriptor);
+ void receiveData(const pollfd pfd, const sh_pollHandle_t handle, void* userData);
+ bool dispatchData(const sh_pollHandle_t handle, void* userData);
+ bool check(const sh_pollHandle_t handle, void* userData);
+ TAmShPollFired<CAmTelnetServer> telnetConnectFiredCB;
+ TAmShPollFired<CAmTelnetServer> telnetReceiveFiredCB;
+ TAmShPollDispatch<CAmTelnetServer> telnetDispatchCB;
+ TAmShPollCheck<CAmTelnetServer> telnetCheckCB;
+private:
+
+ typedef void (*CommandPrototype)(std::vector<std::string>& msg, int filedescriptor);
+ typedef std::map<std::string, CommandPrototype> mMapCommand_t;
+
+ void sliceCommand(const std::string& string, std::string& command, std::queue<std::string>& msg);
+ mMapCommand_t createCommandMap();
+ struct connection_s
+ {
+ int filedescriptor;
+ sh_pollHandle_t handle;
+ };
+
+ static CAmTelnetServer* mpInstance;
+ CAmSocketHandler *mpSocketHandler;
+ CAmCommandSender *mpCommandSender;
+ CAmCommandReceiver *mpCommandReceiver;
+ CAmRoutingSender *mpRoutingSender;
+ CAmRoutingReceiver *mpRoutingReceiver;
+ CAmControlSender *mpControlSender;
+ CAmControlReceiver *mpControlReceiver;
+ IAmDatabaseHandler *mpDatabasehandler;
+ CAmRouter *mpRouter;
+ sh_pollHandle_t mConnecthandle;
+ std::queue<std::string> mListMessages;
+ std::vector<connection_s> mListConnections;
+ int mConnectFD;
+ unsigned int mServerPort;
+ unsigned int mMaxConnections;
+ CAmTelnetMenuHelper mTelnetMenuHelper;
+
+};
+
+} /* namespace am */
+#endif /* TELNETSERVER_H_ */