summaryrefslogtreecommitdiffstats
path: root/source/RCONServer.h
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-06-27 17:14:20 +0200
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-06-27 17:14:20 +0200
commitbc421842c6a052cbc74d3cc28d5edb263780350f (patch)
treefa41dab729e3fe0cd69c219d3ae130ee686c95c6 /source/RCONServer.h
parentAdded a warning when spawning an entity in a non-existent chunk (diff)
downloadcuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.tar
cuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.tar.gz
cuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.tar.bz2
cuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.tar.lz
cuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.tar.xz
cuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.tar.zst
cuberite-bc421842c6a052cbc74d3cc28d5edb263780350f.zip
Diffstat (limited to '')
-rw-r--r--source/RCONServer.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/source/RCONServer.h b/source/RCONServer.h
new file mode 100644
index 000000000..95122ba5f
--- /dev/null
+++ b/source/RCONServer.h
@@ -0,0 +1,106 @@
+
+// RCONServer.h
+
+// Declares the cRCONServer class representing the RCON server
+
+
+
+
+
+#pragma once
+
+#include "OSSupport/SocketThreads.h"
+#include "OSSupport/ListenThread.h"
+
+
+
+
+
+// fwd:
+class cServer;
+class cIniFile;
+
+
+
+
+
+class cRCONServer :
+ public cListenThread::cCallback
+{
+public:
+ cRCONServer(cServer & a_Server);
+ ~cRCONServer();
+
+ void Initialize(cIniFile & a_IniFile);
+
+protected:
+ class cConnection :
+ public cSocketThreads::cCallback
+ {
+ public:
+ cConnection(cRCONServer & a_RCONServer, cSocket & a_Socket);
+
+ protected:
+
+ /// Set to true if the client has successfully authenticated
+ bool m_IsAuthenticated;
+
+ /// Buffer for the incoming data
+ AString m_Buffer;
+
+ /// Buffer for the outgoing data
+ AString m_Outgoing;
+
+ /// Server that owns this connection and processes requests
+ cRCONServer & m_RCONServer;
+
+ /// The socket belonging to the client
+ cSocket & m_Socket;
+
+ /// Address of the client
+ AString m_IPAddress;
+
+
+ // cSocketThreads::cCallback overrides:
+ virtual void DataReceived(const char * a_Data, int a_Size) override;
+ virtual void GetOutgoingData(AString & a_Data) override;
+ virtual void SocketClosed(void) override;
+
+ /// Processes the given packet and sends the response; returns true if successful, false if the connection is to be dropped
+ bool ProcessPacket(int a_RequestID, int a_PacketType, int a_PayloadLength, const char * a_Payload);
+
+ /// Reads 4 bytes from a_Buffer and returns the int they represent
+ int IntFromBuffer(const char * a_Buffer);
+
+ /// Puts 4 bytes representing the int into the buffer
+ void IntToBuffer(int a_Value, char * a_Buffer);
+
+ /// Sends a RCON packet back to the client
+ void SendResponse(int a_RequestID, int a_PacketType, int a_PayloadLength, const char * a_Payload);
+ } ;
+
+
+ /// The server object that will process the commands received
+ cServer & m_Server;
+
+ /// The thread(s) that take care of all the traffic on the RCON ports
+ cSocketThreads m_SocketThreads;
+
+ /// The thread for accepting IPv4 RCON connections
+ cListenThread m_ListenThread4;
+
+ /// The thread for accepting IPv6 RCON connections
+ cListenThread m_ListenThread6;
+
+ /// Password for authentication
+ AString m_Password;
+
+
+ // cListenThread::cCallback overrides:
+ virtual void OnConnectionAccepted(cSocket & a_Socket) override;
+} ;
+
+
+
+
+