tge/engine/console/telnetConsole.h
2025-02-17 23:17:30 -06:00

105 lines
3.4 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#ifndef _TELNETCONSOLE_H_
#define _TELNETCONSOLE_H_
#ifndef _CONSOLE_H_
#include "console/console.h"
#endif
/// Telnet admin console.
///
/// Torque supports remote access to its console. This is most useful when
/// running a dedicated server, as you can remotely administer the game
/// (for instance, kicking people). In the context of a MMORPG, this sort of
/// functionality would be useful for managing a server.
///
/// There are a number of products for Tribes2 which allow remote administration
/// via a nice GUI.
///
/// @section telnetconsole_use Using the Telnet Console
///
/// The TelnetConsole is designed to be used globally, so you don't instantiate
/// it like a normal class. Instead, you allow it to manage itself:
///
/// @code
/// // How to initialize the TelnetConsole.
/// TelnetConsole::create();
///
/// // How to shut down the TelnetConsole.
/// TelnetConsole::destroy();
/// @endcode
///
///
class TelnetConsole
{
NetSocket mAcceptSocket;
S32 mAcceptPort;
enum {
PasswordMaxLength = 32 ///< Maximum length of the telnet and listen passwords.
};
bool mRemoteEchoEnabled;
char mTelnetPassword[PasswordMaxLength+1];
char mListenPassword[PasswordMaxLength+1];
ConsoleEvent mPostEvent;
/// State of a TelnetClient.
enum State
{
PasswordTryOne, ///< Allow three password attempts.
PasswordTryTwo,
PasswordTryThree,
DisconnectThisDude, ///< If they've failed all three, disconnect them.
FullAccessConnected, ///< They presented the telnetPassword, they get full access.
ReadOnlyConnected ///< They presented the listenPassword, they get read only access.
};
/// Represents a connection to the telnet console.
///
/// This is also a linked list.
struct TelnetClient
{
NetSocket socket;
char curLine[Con::MaxLineLength];
S32 curPos;
S32 state; ///< State of the client.
/// @see TelnetConsole::State
TelnetClient *nextClient;
};
TelnetClient *mClientList;
TelnetConsole();
~TelnetConsole();
public:
static void create(); ///< Initialize the telnet console.
static void destroy(); ///< Shut down the telnet console.
void process(); ///< Called by the main loop to let the console process commands
/// and connections.
/// Configure the parameter for the telnet console.
///
/// @param port Port on which to listen for connections.
/// @param telnetPassword Password for full access to the console.
/// @param listenPassword Password for read-only access to the console.
/// @param remoteEcho Enable/disable echoing input back to the client
void setTelnetParameters(S32 port, const char *telnetPassword, const char *listenPassword, bool remoteEcho = false);
/// Callback to handle a line from the console.
///
/// @note This is used internally by the class; you
/// shouldn't need to call it.
///
/// @see Con::addConsumer()
void processConsoleLine(const char *line);
};
extern TelnetConsole *TelConsole;
#endif