Author: soliton
Date: Fri Apr  3 07:39:36 2009
New Revision: 34425

URL: http://svn.gna.org/viewcvs/wesnoth?rev=34425&view=rev
Log:
allow faking the sender for messages from the socket and correctly process /me 
for log messages

Modified:
    trunk/src/server/server.cpp

Modified: trunk/src/server/server.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/server/server.cpp?rev=34425&r1=34424&r2=34425&view=diff
==============================================================================
--- trunk/src/server/server.cpp (original)
+++ trunk/src/server/server.cpp Fri Apr  3 07:39:36 2009
@@ -1365,13 +1365,29 @@
                        out << network::get_bandwidth_stats(); // stats from 
previuos hour
        } else if (command == "adminmsg") {
                if (parameters == "") return "You must type a message.";
-               LOG_SERVER << "Admin message: <" << issuer_name << "> " << 
parameters << "\n";
+               std::string sender = issuer_name;
+               std::string message = parameters;
+               if (sender == "*socket*" && parameters.at(0) == '+') {
+                       // The first argument might be "+<nick>: ".
+                       // In that case we use <nick> as the sender.
+                       std::string::iterator nick_end =
+                                       std::find(parameters.begin(), 
parameters.end(), ':');
+                       std::string nick(parameters.begin() + 1, nick_end);
+                       if (utils::isvalid_username(nick)) {
+                               sender = nick;
+                               message = std::string(nick_end + 1, 
parameters.end());
+                               utils::strip(message);
+                       }
+               }
+               LOG_SERVER << "Admin message: <" << sender << 
(message.find("/me ") == 0
+                               ? std::string(message.begin() + 3, 
message.end()) + ">"
+                               : "> " + message) << "\n";
                if (admins_.size() < 1) return "Sorry, no admin available right 
now. But your message got logged.";
 
                simple_wml::document data;
                simple_wml::node& msg = data.root().add_child("whisper");
-               msg.set_attr_dup("sender", ("admin message from " + 
issuer_name).c_str());
-               msg.set_attr_dup("message", parameters.c_str());
+               msg.set_attr_dup("sender", ("admin message from " + 
sender).c_str());
+               msg.set_attr_dup("message", message.c_str());
                for (std::set<network::connection>::const_iterator i = 
admins_.begin(); i != admins_.end(); ++i) {
                        send_doc(data, *i);
                }
@@ -1386,7 +1402,9 @@
                                
(*g)->send_server_message_to_all(parameters.c_str());
                        }
                }
-               LOG_SERVER << "<server> " + parameters + "\n";
+               LOG_SERVER << "<server" << (parameters.find("/me ") == 0
+                               ? std::string(parameters.begin() + 3, 
parameters.end()) + ">"
+                               : "> " + parameters) << "\n";
                out << "message '" << parameters << "' relayed to players";
        } else if (command == "status") {
                out << "STATUS REPORT";


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to