Falling sand and gravel
[oweals/minetest.git] / src / servercommand.h
index 01efcae06a0ccea5af5f647bb0770c09a4196c04..648a57332716ebbbf5f05e42eb830ad2a271aa9d 100644 (file)
@@ -1,21 +1,19 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
+Part of Minetest-c55
+Copyright (C) 2010-11 celeron55, Perttu Ahola <celeron55@gmail.com>
 Copyright (C) 2011 Ciaran Gultnieks <ciaran@ciarang.com>
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-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 General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
 
 #ifndef SERVERCOMMAND_HEADER
@@ -27,49 +25,41 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "player.h"
 #include "server.h"
 
+#define SEND_TO_SENDER (1<<0)
+#define SEND_TO_OTHERS (1<<1)
+#define SEND_NO_PREFIX (1<<2)
+
 struct ServerCommandContext
 {
-
        std::vector<std::wstring> parms;
+       std::wstring paramstring;
        Server* server;
        ServerEnvironment *env;
        Player* player;
+       // Effective privs for the player, which may be different to their
+       // stored ones - e.g. if they are named in the config as an admin.
+       u64 privs;
        u32 flags;
 
        ServerCommandContext(
                std::vector<std::wstring> parms,
+               std::wstring paramstring,
                Server* server,
                ServerEnvironment *env,
-               Player* player)
-               : parms(parms), server(server), env(env), player(player)
+               Player* player,
+               u64 privs)
+               : parms(parms), paramstring(paramstring),
+               server(server), env(env), player(player), privs(privs)
        {
        }
 
 };
 
-class ServerCommand
-{
-public:
-
-       static std::wstring processCommand(ServerCommandContext *ctx);
-
-private:
-
-       static void cmd_status(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-       static void cmd_privs(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-       static void cmd_grantrevoke(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-       static void cmd_time(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-       static void cmd_shutdown(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-       static void cmd_setting(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-       static void cmd_teleport(std::wostringstream &os,
-                       ServerCommandContext *ctx);
-};
+// Process a command sent from a client. The environment and connection
+// should be locked when this is called.
+// Returns a response message, to be dealt with according to the flags set
+// in the context.
+std::wstring processServerCommand(ServerCommandContext *ctx);
 
 #endif