Commit Graph

68 Commits (1ed72f87abf0793051dea02837c10db91b64add7)

Author SHA1 Message Date
Giel van Schijndel df13cc83ee Fix a typo: NotImlementedError -> NotImplementedError
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7502 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-28 09:59:24 +02:00
Giel van Schijndel 103a2137f9 Lobbyserver: handle and ignore the case where sending of status messages isn't supported by the current protocol
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7501 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-28 09:59:24 +02:00
Giel van Schijndel 29201b4c53 Lobby server: Display the "Removing aborted game" message when removing a game
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7397 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-15 22:29:31 +02:00
Giel van Schijndel e5e90e5121 Lobbyserver: Append to the host list instead of trying to its first (possibly non-existing) element
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7391 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-15 22:29:30 +02:00
Giel van Schijndel 7afaa55bc5 Properly handle the fact that Game.hosts is now a variably-sized list
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7372 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-10 19:18:11 +02:00
Giel van Schijndel a385545043 * Don't handle protocol specific encoding in wzmasterserver.py, instead deal with it in the Protocol classes in protocol.py
* Don't set Game's `hosts` value to a list of ''exactly'' 3
  - Instead use empty strings for non-existing hostnames below 3 (when encoding only)
  - This allows for a bit more extensibility in the future.

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7365 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-09 23:29:55 +02:00
Giel van Schijndel 3dfb215c8b Add IPv6 support to the lobby protocol
* Add a new field: secondaryHosts, an array of two fallback hosts
  - Canibalize the entire "misc" field and part of the "extra" field for this
  - When connecting, first try the primary "host" field, then fall back to the hosts in secondaryHosts (in order)
 * Add a new field: gameId, used on the lobby server to link multiple lobby connections to a single game entry
  - First (attempt to) connect to the lobby with all available address families (currently IPv4 and IPv6)
  - Then ask for a gameId from the lobby server using the first established lobby connection
  - Set the gameId field in the GAMESTRUCT to the one retrieved
  - Transmit the GAMESTRUCT using a "addg" command to the lobby over each lobby connection
  - The lobby then compares all incoming ID numbers with ID numbers already present
  - If there's a match it will use the GAMESTRUCT already present and only add a new hostname to the list

This is the last change, part of, and closes #452

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7364 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-09 23:29:55 +02:00
Giel van Schijndel a43e84e0fd Lobby server: in the "Game unreachable" message, sent when the connection test fails, give the port number of the game server, not the lobby server
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7343 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:42 +02:00
Giel van Schijndel a71b83b91b On platforms that don't support IPV6_V6ONLY, just ignore it and hope the platform doesn't automatically enable IPv6 mapped IPv4 addresses
This allows the lobby server to be used on platforms that don't support IPV6_V6ONLY socket option.

Thanks to Buginator for reporting this.

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7342 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:41 +02:00
Giel van Schijndel e672ad000e Fix error introduced in r7323: gameHost is a member of "self" now, not a local variable
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7324 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:40 +02:00
Giel van Schijndel d02f591709 Lobby protocol; change the way the "addg" command works:
* Make the "addg" command return a status code (ranging 200-299 on success) and message (MOTD on succes)
 * Don't use the "motd" command anymore to check the lobby status, instead use the returned status code for that purpose.
 * Allow MOTD strings of arbitrary length (by sending along the length)

This modification ensures that ''proper'' connectivity checking is being performed on the game server (and reported to the user accurately).

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7323 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:40 +02:00
Giel van Schijndel e0adf0d0e8 Revert r7276's accidental change to wzmasterserver.py
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7277 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:34 +02:00
Giel van Schijndel 9943cf6b01 Lets not mark utility modules as executable
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7276 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:34 +02:00
Giel van Schijndel 7e7ba74801 Move exception handling to the location where RequestHandler.handle(self) is being invoked from
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7269 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:33 +02:00
Giel van Schijndel 36dc3d8c6c Use the RequestHandler's finish() method for cleaning up any open games instead of a try-finally block
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7268 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:33 +02:00
Giel van Schijndel 6618674111 Fix a syntax error from r7266 (and a disconnected spelling error while we're at it)
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7267 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:33 +02:00
Giel van Schijndel 0c7f44ee70 Make gamedblock intrinsic to GameDB itself (i.e. let it contain its own lock)
* Return generators instead of entire lists and have the generator keep the lock intact while it's being iterated over

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7266 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:32 +02:00
Giel van Schijndel 3153a9f63d Make sure to reset the "requests" counter when checkInterval is reached
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7265 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:32 +02:00
Giel van Schijndel 563ff537a1 Lobbyserver: Use separate sockets to listen on IPv4 and IPv6 (instead of a single socket which uses IPv4 to IPv6 mapping)
* Use select(2) to wait for a connection on both sockets and accept(2)ing them in a separate thread
 * This prevents IPv4 addresses from becoming IPv6 mapped, which might not be properly supported on all platforms
  - The IPv6 mapped addresses where transferred back to clients

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7264 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 22:29:32 +02:00
Giel van Schijndel ebd93276a6 Make the lobby server listen and operate on IPv6
* Also disable IPV6_V6ONLY to make sure that (on systems that support the option) IPv4 is still supported, using the same socket
  - This option works on Linux from 2.4.21 and 2.6 (according to "man ipv6")
  - On FreeBSD this works from version 6 onward (lower versions might work, I only tested on 6 and 7 and didn't find any note in the manual)
  - Furthermore, according to
    http://en.wikipedia.org/wiki/IPv4_mapped_address:
   * This works on Windows from Vista onward
   * This works on NetBSD (version unspecified)
   * This doesn't work on OpenBSD (as a design decision for security)

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7225 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 20:52:19 +02:00
Giel van Schijndel 66b09c68ec * Fix a copy/paste error
- Make sure to use the maxPlayers and currentPlayers variables found in the Game class, not the (non-existing) local variables
 * Don't use Game.check() as it doesn't exist, use Protocol.check(Game) instead

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7224 4a71c877-e1ca-e34f-864e-861f7616d084
2009-05-06 20:52:19 +02:00
Giel van Schijndel a5aa693b95 Split out the different lobby protocol versions in a class per version:
* This removes the need to specify what type of protocol (e.g. BinaryProtocol vs. JsonProtocol) should be used
  - Instead only the (Warzone) version needs to be specified, the constructor function (Protocol()) will figure out the correct protocol class to use

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7217 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-28 00:46:45 +02:00
Giel van Schijndel 832f8728d2 Use the Protocol class to find out what port to listen on, instead of manually configuring
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7215 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-28 00:46:45 +02:00
Giel van Schijndel 32417e1bb9 * Allow Protocol's encode and decode functions to work directly on * sockets and file objects (in addition to strings)
- This removes the requirement for the socket handler to be aware of the size of a single game
  - I.e. this allows variable sized games without another API change
 * Read and write Protocol data directly from and to the sockets, decoding and encoding on the fly

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7209 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-27 21:30:41 +02:00
Giel van Schijndel b68ab0bb6d Log tracebacks when exceptions occur and aren't handled
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7208 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-27 21:30:41 +02:00
Giel van Schijndel d1d787c8d6 * Make the game server's port version dependant
* Move checking of game's vitality to from the Game class to the Protocol class
  - Do this because checking of games is inherently protcol dependant

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7200 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-27 21:30:40 +02:00
Giel van Schijndel 4b74fd0cc5 Don't deal with requestHandler stuff in the Game class
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7199 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-27 21:30:40 +02:00
Giel van Schijndel 7f5bc28bd0 Move the Game, Protocol classes to files of their own (to allow them to be reused by the IRC bot, instead of duplicating code)
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7127 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-22 16:03:19 +02:00
Giel van Schijndel ead99ec654 Properly align the "private" property
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7090 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-20 15:31:23 +02:00
Giel van Schijndel 8d5b42fe96 Lets consistently use TABs for indentation (instead of mixing with spaces)
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7089 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-20 15:31:23 +02:00
Giel van Schijndel e399b2562c Split out the protocol from the Game class into a separate BinaryProtocol(Protocol) class
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7088 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-20 15:31:23 +02:00
Giel van Schijndel 4aa8982d0a * Save Game's data in a dictionary for easier access at some locations
- This additionally make is possible to split out the lobby protocol into a separate class later on
 * Show exception's messages when exceptions occur

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7087 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-20 15:31:22 +02:00
Giel van Schijndel 72d1881464 Remove trailing whitespace
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7086 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-20 15:31:22 +02:00
Buginator 562ade5d29 Use the correct version of the masterserver file
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7080 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-19 23:45:25 +02:00
Buginator c2e5d2462f Adds password support to warzone.
Adds feedback from the lobby server.

Notes: You have to enter a password *first*, and then either host the game, or join a game.

Thanks to elio for the new icons!


git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7079 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-19 23:45:25 +02:00
Giel van Schijndel bd04dd7378 Make the lobby server executable
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7073 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-19 23:45:24 +02:00
Buginator e1c91576c9 Game server port is now 2100
Master server port is now 9990 

Updated masterserver python program as well.

merge: r6994

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7018 4a71c877-e1ca-e34f-864e-861f7616d084
2009-04-12 14:12:07 +02:00
Dennis Schridde aac41748dc Bump copyright
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@6617 4a71c877-e1ca-e34f-864e-861f7616d084
2009-02-10 18:01:48 +00:00
Buginator 2df15ab5c6 Fixes endian issue with master server code.
We always want the structure packed to be 'network byte order' (big-endian).

git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@5728 4a71c877-e1ca-e34f-864e-861f7616d084
2008-08-01 18:11:00 +00:00
Dennis Schridde 387fbd52d3 Typo in masterserver
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4437 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-30 17:30:19 +00:00
Dennis Schridde 7a688bdf45 Better debug output
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4386 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-28 12:08:13 +00:00
Dennis Schridde 40a2257a31 Fix NameError, Remove code duplication by using private method, Move private methods to top
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4385 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-28 12:02:37 +00:00
Dennis Schridde 9acf48f307 Check games every 100 requests
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4375 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 16:47:06 +00:00
Dennis Schridde 8370aa874c Use globals
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4372 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 15:49:26 +00:00
Dennis Schridde 132c61b913 test->check + cleanup
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4371 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 15:45:59 +00:00
Dennis Schridde 88cf9281ed Move vitality test into game class
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4370 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 14:23:46 +00:00
Dennis Schridde 227976de92 Move debug message (gamedb has its own header, no need to repeat it)
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4369 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 14:22:32 +00:00
Dennis Schridde c7824914e0 Mention client IP in debug messages
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4368 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 14:17:33 +00:00
Dennis Schridde d85628ef27 gdb->gamedb and dont let struct.error raise over handle()
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4367 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 14:09:44 +00:00
Dennis Schridde 4108ad54fc Fix "AttributeError: Game instance has no attribute 'requestHandler'"
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4366 4a71c877-e1ca-e34f-864e-861f7616d084
2008-03-27 14:03:42 +00:00