[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Wesnoth-cvs-commits] wesnoth/src server/game.cpp server/server.cpp M...
From: |
David White |
Subject: |
[Wesnoth-cvs-commits] wesnoth/src server/game.cpp server/server.cpp M... |
Date: |
Wed, 20 Jul 2005 18:33:40 -0400 |
CVSROOT: /cvsroot/wesnoth
Module name: wesnoth
Branch:
Changes by: David White <address@hidden> 05/07/20 22:33:39
Modified files:
src/server : game.cpp server.cpp
src : Makefile.am
Added files:
src/server : proxy.cpp proxy.hpp
Log message:
made server able to act as a proxy. Fixed bug where the game host would
not be recognized as a side owner in some context and so wouldn't receive
messages from team members
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/server/proxy.cpp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/server/proxy.hpp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/server/game.cpp.diff?tr1=1.39&tr2=1.40&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/server/server.cpp.diff?tr1=1.83&tr2=1.84&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/Makefile.am.diff?tr1=1.97&tr2=1.98&r1=text&r2=text
Patches:
Index: wesnoth/src/Makefile.am
diff -u wesnoth/src/Makefile.am:1.97 wesnoth/src/Makefile.am:1.98
--- wesnoth/src/Makefile.am:1.97 Wed Jul 6 00:54:26 2005
+++ wesnoth/src/Makefile.am Wed Jul 20 22:33:39 2005
@@ -406,6 +406,7 @@
server/input_stream.cpp \
server/metrics.cpp \
server/player.cpp \
+ server/proxy.cpp \
server/server.cpp \
config.cpp \
filesystem.cpp \
@@ -425,6 +426,7 @@
server/input_stream.hpp \
server/metrics.hpp \
server/player.hpp \
+ server/proxy.hpp \
config.hpp \
filesystem.hpp \
game_config.hpp \
Index: wesnoth/src/server/game.cpp
diff -u wesnoth/src/server/game.cpp:1.39 wesnoth/src/server/game.cpp:1.40
--- wesnoth/src/server/game.cpp:1.39 Wed Jul 20 07:51:46 2005
+++ wesnoth/src/server/game.cpp Wed Jul 20 22:33:39 2005
@@ -1,4 +1,4 @@
-/* $Id: game.cpp,v 1.39 2005/07/20 07:51:46 ott Exp $ */
+/* $Id: game.cpp,v 1.40 2005/07/20 22:33:39 Sirp Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -133,9 +133,9 @@
// verify that side is a side id
const std::string& side = cfg["side"];
- ssize_t side_num;
+ size_t side_num;
try {
- side_num = lexical_cast<ssize_t, std::string>(side);
+ side_num = lexical_cast<size_t, std::string>(side);
if(side_num < 1 || side_num > 9)
return false;
}
@@ -153,7 +153,7 @@
if((**i)["controller"] == "network") {
// don't allow players to take sides in games
with invalid side numbers
try {
- side_num = lexical_cast<ssize_t,
std::string>((**i)["side"]);
+ side_num = lexical_cast<size_t,
std::string>((**i)["side"]);
if(side_num < 1 || side_num > 9)
return false;
}
@@ -204,12 +204,12 @@
continue;
}
- ssize_t side_num;
+ size_t side_num;
size_t side_index;
config::child_iterator sd;
for(sd = level_sides.first; sd != level_sides.second; ++sd) {
try {
- side_num = lexical_cast<ssize_t,
std::string>((**sd)["side"]);
+ side_num = lexical_cast<size_t,
std::string>((**sd)["side"]);
if(side_num < 1 || side_num > 9)
continue;
}
@@ -232,7 +232,8 @@
side_controllers_[side_index] = "ai";
sides_taken_[side_index] = true;
}
- else if((**sd)["controller"] == "human") {
+ else if((**sd)["controller"] == "human") {
+
sides_.insert(std::pair<network::connection,size_t>(players_.front(),side_index));
sides_taken_[side_index] = true;
side_controllers_[side_index] = "human";
}
@@ -258,9 +259,9 @@
}
const std::string& side = cfg["side"];
static const std::string invalid = "Invalid side number";
- ssize_t side_num;
+ size_t side_num;
try {
- side_num = lexical_cast<ssize_t, std::string>(side);
+ side_num = lexical_cast<size_t, std::string>(side);
if(side_num < 1 || side_num > 9)
return invalid;
}
Index: wesnoth/src/server/server.cpp
diff -u wesnoth/src/server/server.cpp:1.83 wesnoth/src/server/server.cpp:1.84
--- wesnoth/src/server/server.cpp:1.83 Wed Jul 20 07:51:47 2005
+++ wesnoth/src/server/server.cpp Wed Jul 20 22:33:39 2005
@@ -1,4 +1,4 @@
-/* $Id: server.cpp,v 1.83 2005/07/20 07:51:47 ott Exp $ */
+/* $Id: server.cpp,v 1.84 2005/07/20 22:33:39 Sirp Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -27,7 +27,8 @@
#include "input_stream.hpp"
#include "metrics.hpp"
#include "serialization/parser.hpp"
-#include "player.hpp"
+#include "player.hpp"
+#include "proxy.hpp"
#include <algorithm>
#include <cstdlib>
@@ -122,12 +123,13 @@
input_stream& input_;
- metrics metrics_;
-
- const config& cfg_;
-
- std::set<std::string> accepted_versions_;
- std::map<std::string,config> redirected_versions_;
+ metrics metrics_;
+
+ const config& cfg_;
+
+ std::set<std::string> accepted_versions_;
+ std::map<std::string,config> redirected_versions_;
+ std::map<std::string,config> proxy_versions_;
bool is_ip_banned(const std::string& ip);
std::string ban_ip(const std::string& mask);
@@ -158,6 +160,14 @@
redirected_versions_[*j] = **i;
}
}
+
+ const config::child_list& proxies = cfg_.get_children("proxy");
+ for(config::child_list::const_iterator p = proxies.begin(); p !=
proxies.end(); ++p) {
+ const std::vector<std::string>
versions(utils::split((**p)["version"]));
+ for(std::vector<std::string>::const_iterator j =
versions.begin(); j != versions.end(); ++j) {
+ proxy_versions_[*j] = **p;
+ }
+ }
join_lobby_response_.add_child("join_lobby");
}
@@ -369,7 +379,10 @@
}
}
- if(e.socket) {
+ if(e.socket) {
+ if(proxy::is_proxy(e.socket)) {
+ proxy::disconnect(e.socket);
+ }
e.disconnect();
}
@@ -389,10 +402,13 @@
}
void server::process_data(const network::connection sock, config& data,
config& gamelist)
-{
+{
+ if(proxy::is_proxy(sock)) {
+ proxy::received_data(sock,data);
+ }
//if someone who is not yet logged in is sending
//login details
- if(not_logged_in_.is_member(sock)) {
+ else if(not_logged_in_.is_member(sock)) {
process_login(sock,data,gamelist);
} else if(const config* query = data.child("query")) {
process_query(sock,*query,gamelist);
@@ -404,42 +420,51 @@
}
void server::process_login(const network::connection sock, const config& data,
config& gamelist)
-{
- //see if client is sending their version number
- const config* const version = data.child("version");
- if(version != NULL) {
- const std::string& version_str = (*version)["version"];
-
- if(accepted_versions_.count(version_str)) {
- std::cerr << "player joined using accepted version " <<
version_str << ": telling them to log in\n";
- network::send_data(login_response_,sock);
- } else {
- const std::map<std::string,config>::const_iterator i =
redirected_versions_.find(version_str);
- if(i != redirected_versions_.end()) {
- std::cerr << "player joined using version " <<
version_str << ": redirecting them to "
- << i->second["host"] << ":" <<
i->second["port"] << "\n";
- config response;
- response.add_child("redirect",i->second);
- network::send_data(response,sock);
- } else {
- std::cerr << "player joined using unknown
version " << version_str << ": rejecting them\n";
- config response;
- if(accepted_versions_.empty() == false) {
- response["version"] =
*accepted_versions_.begin();
- } else if(redirected_versions_.empty() ==
false) {
- response["version"] =
redirected_versions_.begin()->first;
- } else {
- std::cerr << "this server doesn't
accept any versions at all\n";
- response["version"] = "null";
- }
-
- network::send_data(response,sock);
- }
- }
-
- return;
- }
-
+{
+ //see if client is sending their version number
+ const config* const version = data.child("version");
+ if(version != NULL) {
+ const std::string& version_str = (*version)["version"];
+
+ if(accepted_versions_.count(version_str)) {
+ std::cerr << "player joined using accepted version " <<
version_str << ": telling them to log in\n";
+ network::send_data(login_response_,sock);
+ } else {
+ const std::map<std::string,config>::const_iterator i =
redirected_versions_.find(version_str);
+ if(i != redirected_versions_.end()) {
+ std::cerr << "player joined using version " <<
version_str << ": redirecting them to "
+ << i->second["host"] << ":" <<
i->second["port"] << "\n";
+ config response;
+ response.add_child("redirect",i->second);
+ network::send_data(response,sock);
+ } else {
+ const
std::map<std::string,config>::const_iterator i =
proxy_versions_.find(version_str);
+
+ if(i != proxy_versions_.end()) {
+ std::cerr << "player joined using
version " << version_str << ": connecting them by proxy to "
+ << i->second["host"] << ":"
<< i->second["port"] << "\n";
+
+
proxy::create_proxy(sock,i->second["host"],lexical_cast_default<int>(i->second["port"],15000));
+ } else {
+
+ std::cerr << "player joined using
unknown version " << version_str << ": rejecting them\n";
+ config response;
+ if(accepted_versions_.empty() == false)
{
+ response["version"] =
*accepted_versions_.begin();
+ } else if(redirected_versions_.empty()
== false) {
+ response["version"] =
redirected_versions_.begin()->first;
+ } else {
+ std::cerr << "this server
doesn't accept any versions at all\n";
+ response["version"] = "null";
+ }
+
+ network::send_data(response,sock);
+ }
+ }
+ }
+
+ return;
+ }
const config* const login = data.child("login");
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Wesnoth-cvs-commits] wesnoth/src server/game.cpp server/server.cpp M...,
David White <=