From: <z-...@us...> - 2011-01-16 17:50:17
|
Revision: 9503 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9503&view=rev Author: z-man Date: 2011-01-16 17:50:10 +0000 (Sun, 16 Jan 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9495 to 9501: ------------------------------------------------------------------------ r9501 | bazaarmagetron | 2011-01-16 17:32:39 +0100 (Sun, 16 Jan 2011) | 2 lines Manuel Moos: disabling uninstall script by default. Doesn't work anyway with recent autotools, and a fixed solution would double installation time. ------------------------------------------------------------------------ r9500 | bazaarmagetron | 2011-01-16 17:31:48 +0100 (Sun, 16 Jan 2011) | 2 lines Manuel Moos: Don't doubly install scripts, new automake/install doesn't like that. ------------------------------------------------------------------------ r9499 | bazaarmagetron | 2011-01-16 17:30:59 +0100 (Sun, 16 Jan 2011) | 2 lines Manuel Moos: Disabling uninstallation check if uninstall script is not built. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9495&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/Makefile.manual armagetronad/trunk/armagetronad/batch/Makefile.am armagetronad/trunk/armagetronad/configure.ac Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9495 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9501 Modified: armagetronad/trunk/armagetronad/Makefile.manual =================================================================== --- armagetronad/trunk/armagetronad/Makefile.manual 2011-01-16 17:21:49 UTC (rev 9502) +++ armagetronad/trunk/armagetronad/Makefile.manual 2011-01-16 17:50:10 UTC (rev 9503) @@ -104,15 +104,8 @@ installcheck_douninstall.inst: DESTDIR=`pwd`/._inst $(MAKE) uninstall -installcheck_douninstall.inst2: - ./._inst2/$(bindir)/${uninstaller} - find ._inst2 -mindepth 1 -type d -name ${progname} -exec echo leftover directory \{\} >> .leftover.inst2 \; +installcheck_uninstall.inst: installcheck_test.inst -installcheck_douninstall.inst3: - ./._inst3/$(bindir)/${uninstaller} - find ._inst3 -mindepth 1 -type d -name ${progname} -exec echo leftover directory \{\} >> .leftover.inst3 \; - -installcheck_uninstall.inst: installcheck_test.inst installcheck_uninstall.%: installcheck_install.% rm -rf ._$*/${localstatedir} ._$*/.doc ._$*/.help ._$*/leak.log ._$*/memprofile*.txt ._$*/gmon.out ._$*/@logdir@ $(MAKE) installcheck_douninstall.$* @@ -121,7 +114,19 @@ if test -s .leftover.$*; then cat .leftover.$*; false; else true; fi rm -f .leftover.$* +if USE_UNINSTALL +installcheck_douninstall.inst2: + ./._inst2/$(bindir)/${uninstaller} + find ._inst2 -mindepth 1 -type d -name ${progname} -exec echo leftover directory \{\} >> .leftover.inst2 \; + +installcheck_douninstall.inst3: + ./._inst3/$(bindir)/${uninstaller} + find ._inst3 -mindepth 1 -type d -name ${progname} -exec echo leftover directory \{\} >> .leftover.inst3 \; + installcheck: installcheck_uninstall.inst installcheck_uninstall.inst2 +else +installcheck: installcheck_uninstall.inst +endif $(predistcheckclean) @echo -e "\n---------------------------------------\nInstallation and uninstallation worked!\n---------------------------------------\n" Modified: armagetronad/trunk/armagetronad/batch/Makefile.am =================================================================== --- armagetronad/trunk/armagetronad/batch/Makefile.am 2011-01-16 17:21:49 UTC (rev 9502) +++ armagetronad/trunk/armagetronad/batch/Makefile.am 2011-01-16 17:50:10 UTC (rev 9503) @@ -19,16 +19,16 @@ endif if BUILDMASTER -masterScripts=$(basercScripts) masterstarter +masterScripts=masterstarter masrcScripts=rcd_master endif if BUILDDEDICATED -dedScripts=$(basercScripts) serverstarter +dedScripts=serverstarter dedrcScripts=rcd_server endif -scriptsToBuild=$(masterScripts) $(dedScripts) $(regScripts) sysinstall relocate +scriptsToBuild=$(basercScripts) $(masterScripts) $(dedScripts) $(regScripts) sysinstall relocate rcScripts=$(regrcScripts) $(masrcScripts) $(dedrcScripts) armascript_SCRIPTS=$(scriptsToBuild) $(rcScripts) Modified: armagetronad/trunk/armagetronad/configure.ac =================================================================== --- armagetronad/trunk/armagetronad/configure.ac 2011-01-16 17:21:49 UTC (rev 9502) +++ armagetronad/trunk/armagetronad/configure.ac 2011-01-16 17:50:10 UTC (rev 9503) @@ -280,14 +280,14 @@ AC_ARG_ENABLE(uninstall, AC_HELP_STRING([--enable-uninstall@<:@=cmd@:>@], - [will install an uninstaller script (default=enabled)]), + [will install an uninstaller script (default=disabled)]), if test "$enableval" = "no"; then enable_uninstall=no else enable_uninstall=yes external_uninstall_cmd=$enableval fi, -enable_uninstall=yes) +enable_uninstall=no) AC_SUBST(external_uninstall_cmd) AC_ARG_ENABLE(multiver, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-01-17 00:00:44
|
Revision: 9507 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9507&view=rev Author: z-man Date: 2011-01-17 00:00:37 +0000 (Mon, 17 Jan 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9501 to 9506: ------------------------------------------------------------------------ r9506 | bazaarmagetron | 2011-01-17 00:29:20 +0100 (Mon, 17 Jan 2011) | 2 lines Manuel Moos: Merging automake warning fix. ------------------------------------------------------------------------ r9505 | bazaarmagetron | 2011-01-17 00:12:18 +0100 (Mon, 17 Jan 2011) | 2 lines Manuel Moos: Merging timebot detection branch. ------------------------------------------------------------------------ r9504 | bazaarmagetron | 2011-01-16 18:57:50 +0100 (Sun, 16 Jan 2011) | 2 lines Manuel Moos: Reactivating uninstall script generation now that it is working again. ------------------------------------------------------------------------ r9502 | bazaarmagetron | 2011-01-16 18:21:49 +0100 (Sun, 16 Jan 2011) | 4 lines author: Manuel Moos Fixing uninstall script generation. Now uses a test 'make install' and scans the result. Actually not significantly slower than the old method. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9501&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/Makefile.manual armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/batch/make/uninstall armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/configure.ac armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9501 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9506 Modified: armagetronad/trunk/armagetronad/Makefile.manual =================================================================== --- armagetronad/trunk/armagetronad/Makefile.manual 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/Makefile.manual 2011-01-17 00:00:37 UTC (rev 9507) @@ -123,14 +123,15 @@ ./._inst3/$(bindir)/${uninstaller} find ._inst3 -mindepth 1 -type d -name ${progname} -exec echo leftover directory \{\} >> .leftover.inst3 \; -installcheck: installcheck_uninstall.inst installcheck_uninstall.inst2 +myinstallcheck: installcheck_uninstall.inst installcheck_uninstall.inst2 else -installcheck: installcheck_uninstall.inst +myinstallcheck: installcheck_uninstall.inst endif $(predistcheckclean) @echo -e "\n---------------------------------------\nInstallation and uninstallation worked!\n---------------------------------------\n" -devcheck: beautify installcheck +installcheck: myinstallcheck +devcheck: beautify myinstallcheck fullcheck: beautify devcheck distcheck # run all that don't require a full rebuild Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/NEWS 2011-01-17 00:00:37 UTC (rev 9507) @@ -98,6 +98,7 @@ Changes since 0.2.8.3.x: ========================== +- Added detection and reaction code for timing assist bots - /shuffle now works before you actually join a team - Implemented /shout command and associated settings - Tweaks to enemy influence system. Modified: armagetronad/trunk/armagetronad/batch/make/uninstall =================================================================== --- armagetronad/trunk/armagetronad/batch/make/uninstall 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/batch/make/uninstall 2011-01-17 00:00:37 UTC (rev 9507) @@ -11,7 +11,7 @@ EXTERNAL_CMD=$2 test -z "`echo $UNINSTALL | grep '^/'`" && UNINSTALL=`pwd`/$UNINSTALL -echo -n "Generating uninstallation script" $UNINSTALL... +echo "Generating uninstallation script" $UNINSTALL... if test "$EXTERNAL_CMD" != "" && test "$EXTERNAL_CMD" != "yes"; then { @@ -23,7 +23,7 @@ # start $UNINSTALL cat > ${UNINSTALL} <<EOF #! /bin/sh -#uninstalls ${PROGTITLE} +# uninstalls ${PROGTITLE} # set default destdir to where the game was installed to test -z "\${DESTDIR}" && DESTDIR=${ROOTDIR} @@ -32,42 +32,35 @@ # uninstall system files \${DESTDIR}${SCRIPTDIR}/sysinstall uninstall ${PREFIX} || exit 1 -# automaticall generated from "make uninstall" +# automaticall generated from "make install" EOF -# generate wrapper for "rm" -TMPBIN=${DESTDIR}${PREFIX}/armatempbin -test -d ${TMPBIN} || mkdir ${TMPBIN} || exit 1 -RM=${TMPBIN}/rm -echo "" > ${UNINSTALL}.files +# do an installation +echo -n "Performing test installation..." +DEST=$(pwd)/.foruninstall -cat > ${RM} <<EOF -#! /bin/sh -echo rm "\$*" | sed -e s/DESTDIR_UNINSTALL/\\\${DESTDIR}/g >> ${UNINSTALL}.files -EOF +# test for recursion +if echo ${DESTDIR} | grep ${DEST}; then + echo "Recursion detected, aborting." + exit 0 +fi -chmod 755 ${RM} || exit 1 - -# invoke "make uninstall" with path bend to the rm wrapper -OLDPATH=$PATH -PATH=${TMPBIN}:$OLDPATH -export PATH -AA_FAKE_UNINSTALL="YES" DESTDIR=DESTDIR_UNINSTALL ${MAKE} uninstall > /dev/null || exit 1 - -# remove the wrapper -PATH=$OLDPATH -rm -rf ${TMPBIN} || exit -1 -rm -f ${RM} - +if DESTDIR=${DEST} ${MAKE} install > /dev/null; then +echo "Success!" +else +echo "Failure :(" +rm -rf $DEST +exit -1 fi -# generate directories to uninstall from file list -sed -e "s,rm.*\\\$,rmdir --ignore-fail-on-non-empty \$," < ${UNINSTALL}.files > ${UNINSTALL}.dir0 +find "$DEST" -type d | sed -e "s,^${DEST},rmdir --ignore-fail-on-non-empty \\\$\{DESTDIR\}," > ${UNINSTALL}.dir0 +find "$DEST" -type f | sed -e "s,^${DEST},rm -f \\\$\{DESTDIR\}," > ${UNINSTALL}.files -echo "" > ${UNINSTALL}.dir +# less ${UNINSTALL}.dir0 # add all parent directories of those that are still game-specific +grep ${PROGNAME} ${UNINSTALL}.dir0 > ${UNINSTALL}.dir while test -s ${UNINSTALL}.dir0; do sed -e "s,/[^/]*\$,," < ${UNINSTALL}.dir0 | grep ${PROGNAME} > ${UNINSTALL}.dir1 cat ${UNINSTALL}.dir1 >> ${UNINSTALL}.dir @@ -78,9 +71,15 @@ cat ${UNINSTALL}.files >> ${UNINSTALL} sort ${UNINSTALL}.dir --reverse --unique >> ${UNINSTALL} +rm -rf ${DEST} + +fi + # clean up rm -f ${UNINSTALL}.dir ${UNINSTALL}.dir0 ${UNINSTALL}.files chmod 755 ${UNINSTALL} +# less ${UNINSTALL} + echo "done." Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2011-01-17 00:00:37 UTC (rev 9507) @@ -81,6 +81,21 @@ ALLOW_IMPOSTERS 0 # allow two players to have the same name +# timebot/aimbot/grindbot deteciton. Those clientside enhancements can make various +# timing decisions better than humans. Tuning settings: + +TIMEBOT_SENSITIVITY 1.0 # The sensitivity of the timebot detection code. 1.0 is the default and you + # probably shouldn't deviate more than .5 from that. + # highher values increase the sensitivity and produce reactions faster. +TIMEBOT_KICK_SEVERITY .5 # If players get kicked by the timebot detection, it's done with this severity level. + +# Actions to be taken when timebot usage is detected: on the setting 2, all those players who also spy on admin commands get the message. +TIMEBOT_ACTION_MEDIUM 1 # Action to take on a medium suspicion of timebottery. 0: do nothing, 1: log it, 2: message moderators, 3: message all players, 4: kick the offending player. +TIMEBOT_ACTION_HIGH 1 # Action to take on a high suspicion of timebottery. 0: do nothing, 1: log it, 2: message moderators, 3: message all players, 4: kick the offending player. +TIMEBOT_ACTION_MAX 1 # Action to take on a very high suspicion of timebottery. 0: do nothing, 1: log it, 2: message moderators, 3: message all players, 4: kick the offending player. + + + ############################################################################################ # # cycle physics Modified: armagetronad/trunk/armagetronad/configure.ac =================================================================== --- armagetronad/trunk/armagetronad/configure.ac 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/configure.ac 2011-01-17 00:00:37 UTC (rev 9507) @@ -280,14 +280,14 @@ AC_ARG_ENABLE(uninstall, AC_HELP_STRING([--enable-uninstall@<:@=cmd@:>@], - [will install an uninstaller script (default=disabled)]), + [will install an uninstaller script (default=enabled)]), if test "$enableval" = "no"; then enable_uninstall=no else enable_uninstall=yes external_uninstall_cmd=$enableval fi, -enable_uninstall=no) +enable_uninstall=yes) AC_SUBST(external_uninstall_cmd) AC_ARG_ENABLE(multiver, Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-01-17 00:00:37 UTC (rev 9507) @@ -446,6 +446,16 @@ allow_imposters_help If set to 1, players with identical names are tolerated. If set to 0, all but one will be renamed. allow_impostors_help If set to 1, players with identical names are tolerated. If set to 0, all but one will be renamed. +timebot_kick_severity_help If players get kicked by the timebot detection, it's done with this severity level. +timebot_sensitivity_help The sensitivity of the timebot detection code. 1.0 is the default and you probably shouldn't deviate more than .5 from that. +timebot_action_medium_help Action to take on a medium suspicion of timebottery. 0: do nothing, 1: log it, 2: message moderators, 3: message all players, 4: kick the offending player. +timebot_action_high_help Action to take on a high suspicion of timebottery. 0: do nothing, 1: log it, 2: message moderators, 3: message all players, 4: kick the offending player. +timebot_action_max_help Action to take on a very high suspicion of timebottery. 0: do nothing, 1: log it, 2: message moderators, 3: message all players, 4: kick the offending player. + +timebot_action_medium \1 is showing excelent timing ability, almost too good for a human.\n +timebot_action_high \1 is showing suspiciously superhuman timing ability.\n +timebot_action_max \1 is very likely using timing assistance software.\n + #******************************************** #******************************************** # Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-01-17 00:00:37 UTC (rev 9507) @@ -834,7 +834,7 @@ typedef bool (*HIDEFUNC)( ePlayerNetID const * hider, ePlayerNetID const * seeker ); // secret console messages: If CanHideFunc returns false it is displayed to everyone. Else, for each player we apply HideFunc, to see if one can hide his message to the other. The two exceptions get a message anyway. -void se_SecretConsoleOut( tOutput const & message, ePlayerNetID const * hider, HIDEFUNC HideFunc, ePlayerNetID const * exception1, ePlayerNetID const * exception2 = 0, CANHIDEFUNC CanHideFunc = 0 ) +void se_SecretConsoleOut( tOutput const & message, ePlayerNetID const * hider, HIDEFUNC HideFunc, ePlayerNetID const * exception1 = 0, ePlayerNetID const * exception2 = 0, CANHIDEFUNC CanHideFunc = 0 ) { // high enough access levels are never secret if ( CanHideFunc != 0 && !(*CanHideFunc)( hider ) ) @@ -9343,6 +9343,244 @@ // ******************************************************************************* // * +// * AnalyzeTiming +// * +// ******************************************************************************* +//! +//! +// ******************************************************************************* + +void ePlayerNetID::AnalyzeTiming( REAL timing ) +{ + // just delegate safely + tJUST_CONTROLLED_PTR< ePlayerNetID > keep( this ); + uncannyTimingDetector_.Analyze( timing, this ); +} + +eUncannyTimingDetector::eUncannyTimingSettings::~eUncannyTimingSettings() +{ +#ifdef DEBUG + con << "Best ratio achieved for " << timescale*1000 << "ms stat: " << bestRatio << "\n"; +#endif +} + +REAL eUncannyTimingDetector::eUncannyTimingAnalysis::Analyze( REAL timing, eUncannyTimingSettings const & settings ) +{ + if( timing < settings.timescale ) + { + REAL increment = 1.0/turnsSoFar; + if( turnsSoFar < settings.averageOverEvents ) + { + turnsSoFar++; + } + + // don't rate failed timings too much. The user may not even have + // attempted to time something. + if( timing < 0 ) + { + increment /= 4; + } + + // event falls into the buckets + if( 2*timing < settings.timescale && timing > 0 ) + { + // event falls into the 'good' bucket, count it + accurateRatio += increment; + } + + // let ratio decay + accurateRatio /= 1+increment; + } + + REAL ratio = accurateRatio/(1-accurateRatio); + + // keep stats + if (ratio > settings.bestRatio) + { + settings.bestRatio = ratio; + } + + REAL ret = (ratio-settings.goodHumanRatio)/(settings.maxGoodRatio-settings.goodHumanRatio); + if( ret < 0 ) + { + ret = 0; + } + return ret; +} + +eUncannyTimingDetector::eUncannyTimingAnalysis::eUncannyTimingAnalysis() +: accurateRatio( .3 ), turnsSoFar(10) +{} + +/* stats; ladle 37: +prematch: +[0] Best ratio achieved for 125ms stat: 0.653367, 591turns. +[0] Best ratio achieved for 62.5ms stat: 1.07667, 124turns. +[0] Best ratio achieved for 31.25ms stat: 0.464286, 43turns. +up to zealous assertion failure: +[0] Best ratio achieved for 125ms stat: 1.45674 +[0] Best ratio achieved for 62.5ms stat: 1.08824 +[0] Best ratio achieved for 31.25ms stat: 0.942842 +proper, after assertions had been removed: +[0] Best ratio achieved for 125ms stat: 1.71929, 4686turns. +[0] Best ratio achieved for 62.5ms stat: 1.08824, 713turns. +[0] Best ratio achieved for 31.25ms stat: 0.952494, 163turns. +z-man, trying really hard: +[0] Best ratio achieved for 125ms stat: 4.71739 +[0] Best ratio achieved for 62.5ms stat: 0.945886 +[0] Best ratio achieved for 31.25ms stat: 0.444307 +tst prematch, only counting enemy grinds: +[0] Best ratio achieved for 125ms stat: 6.04985 +[0] Best ratio achieved for 62.5ms stat: 1.80428 +[0] Best ratio achieved for 31.25ms stat: 0.819629 +all grinds: +[0] Best ratio achieved for 125ms stat: 2.09805 +[0] Best ratio achieved for 62.5ms stat: 2.32939 +[0] Best ratio achieved for 31.25ms stat: 1 +tst proper, enemies only: +[0] Best ratio achieved for 125ms stat: 5.60549 +[0] Best ratio achieved for 62.5ms stat: 1.01227 +[0] Best ratio achieved for 31.25ms stat: 0.681035 +all grinds: +[0] Best ratio achieved for 125ms stat: 1.72932 +[0] Best ratio achieved for 62.5ms stat: 1.68816 +[0] Best ratio achieved for 31.25ms stat: 0.750099 +ladle41, hamar and partner team actions included: +[0] Best ratio achieved for 125ms stat: 23.7208 +[0] Best ratio achieved for 62.5ms stat: 2.01171 +[0] Best ratio achieved for 31.25ms stat: 0.90623 +*/ + +static eUncannyTimingDetector::eUncannyTimingSettings +se_uncannyTimingSettingsFast(1/32.0, 1, 1.5), +se_uncannyTimingSettingsMedium(1/16.0, 2, 4); +// se_uncannyTimingSettingsSlow(1/8.0, 7, 15); + +static REAL se_Max( REAL a, REAL b ) +{ + return a > b ? a : b; +} + +eUncannyTimingDetector::eUncannyTimingDetector() +: dangerLevel( DangerLevel_Low ) +{ +} + +// opportunity to tune timebot detection sensitivity +static REAL se_timebotSensitivity = 1.0; +static tSettingItem< REAL > se_timebotSensitivityConf( "TIMEBOT_SENSITIVITY", se_timebotSensitivity ); + +// different ways to react to timebot detection +enum eTimebotAction +{ + eTimebotAction_Nothing = 0, // do nothing + eTimebotAction_Log = 1, // log it + eTimebotAction_NotifyModerator = 2, // notify moderators that happen to be online + eTimebotAction_NotifyEveryone = 3, // notify all players + eTimebotAction_Kick = 4 // kick the player +}; +tCONFIG_ENUM( eTimebotAction ); + +static eTimebotAction se_timebotActionMedium = eTimebotAction_Log; +static eTimebotAction se_timebotActionHigh = eTimebotAction_Log; +static eTimebotAction se_timebotActionMax = eTimebotAction_Log; +static tSettingItem< eTimebotAction > se_timebotActionMediumConf( "TIMEBOT_ACTION_MEDIUM", se_timebotActionMedium ); +static tSettingItem< eTimebotAction > se_timebotActionHighConf( "TIMEBOT_ACTION_HIGH", se_timebotActionHigh ); +static tSettingItem< eTimebotAction > se_timebotActionMaxConf( "TIMEBOT_ACTION_MAX", se_timebotActionMax ); + +// severity of kick (for autobans) +static REAL se_timebotKickSeverity = 0.5; +static tSettingItem< REAL > se_timebotKickSeverityConf( "TIMEBOT_KICK_SEVERITY", se_timebotKickSeverity ); + +static void se_TimebotAction( eTimebotAction action, ePlayerNetID * player, char const * message ) +{ + if (action == eTimebotAction_Nothing) + { + return; + } + // look up message + tOutput m (message, player->GetName()); + switch (action) + { + case eTimebotAction_Kick: + if( player->Owner() > 0 ) + { + sn_KickUser( player->Owner(), m, se_timebotKickSeverity ); + } + // no break on purpose. + case eTimebotAction_NotifyEveryone: + sn_ConsoleOut( m ); + break; + case eTimebotAction_NotifyModerator: +#ifdef DEDICATED + se_SecretConsoleOut( m, player, &se_cannotSeeConsole ); + break; +#endif + case eTimebotAction_Log: + con << m; + break; + case eTimebotAction_Nothing: + break; + } +} + +//! analzye a timing event +void eUncannyTimingDetector::Analyze( REAL timing, ePlayerNetID * player ) +{ + // ignore this system on the client itself + if( sn_GetNetState() != nSERVER || se_timebotSensitivity <= 0 ) + { + return; + } + + // apply sensitivity + timing /= se_timebotSensitivity; + + REAL maxUncanny = fast.Analyze( timing, se_uncannyTimingSettingsFast ); + maxUncanny = se_Max( maxUncanny, medium.Analyze( timing, se_uncannyTimingSettingsMedium ) ); + // maxUncanny = se_Max( maxUncanny, slow.Analyze( timing, se_uncannyTimingSettingsSlow ) ); + + switch( dangerLevel ) + { + case DangerLevel_Low: + if( maxUncanny > .25 ) + { + dangerLevel =DangerLevel_Medium; + se_TimebotAction( se_timebotActionMedium, player, "$timebot_action_medium" ); + } + break; + case DangerLevel_Medium: + if( maxUncanny > .5 ) + { + dangerLevel = DangerLevel_High; + se_TimebotAction( se_timebotActionHigh, player, "$timebot_action_high" ); + } + else if( maxUncanny <= 0.01 ) + { + dangerLevel = DangerLevel_Low; + } + break; + case DangerLevel_High: + if( maxUncanny > 1 ) + { + dangerLevel = DangerLevel_Max; + se_TimebotAction( se_timebotActionMax, player, "$timebot_action_max" ); + } + else if( maxUncanny < .25 ) + { + dangerLevel = DangerLevel_Medium; + } + break; + case DangerLevel_Max: + if( maxUncanny < .75 ) + { + dangerLevel = DangerLevel_High; + } + } +} + +// ******************************************************************************* +// * // * LogScoreDifference // * // ******************************************************************************* Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2011-01-17 00:00:37 UTC (rev 9507) @@ -169,6 +169,60 @@ tAccessLevel accessLevel; //!< admin access level of the current user }; +//! detector for turn timing assist bots +class eUncannyTimingDetector +{ +public: + //! settings for a single analyzer + struct eUncannyTimingSettings + { + REAL timescale; //!< the timescale. Events are divided in two buckets, one between 0 and timescale/2, the other from timescale/2 to timescale. + REAL maxGoodRatio; //!< the maximal allowed recent ratio of events to land in the 'good' bucket + REAL goodHumanRatio; //!< the maximal observed ratio for a human + int averageOverEvents; //!< number of events to average over + + mutable REAL bestRatio; //!< best ratio achieved by players during this session + + eUncannyTimingSettings( REAL ts, REAL human, REAL max ) + : timescale( ts ), maxGoodRatio( max ), goodHumanRatio(human), averageOverEvents(40) + , bestRatio(0) + {} + + ~eUncannyTimingSettings(); + }; + + //! single analyzer with single timescale + class eUncannyTimingAnalysis + { + public: + //! analyze a single timing event + REAL Analyze( REAL timing, eUncannyTimingSettings const & settings ); + eUncannyTimingAnalysis(); + private: + REAL accurateRatio; //!< ratio of events in the more accurate half + int turnsSoFar; //!< number of turns accounted for so far + }; + + //! detection level of timing aid hacks + enum DangerLevel + { + DangerLevel_Low, //!< about 25% of the tolerance reached + DangerLevel_Medium, //!< about 50% of the tolerance reached + DangerLevel_High, //!< about 75% of the tolerance reached + DangerLevel_Max //!< 100% of the tolerance reached, worst action triggered + }; + + eUncannyTimingDetector(); + + //! analzye a timing event + void Analyze( REAL timing, ePlayerNetID * player ); +private: + //! three analyzers for varying timescales + eUncannyTimingAnalysis fast, medium, slow; + + DangerLevel dangerLevel; +}; + // the class that identifies players across the network class ePlayerNetID: public nNetObject, public eAccessLevelHolder{ friend class ePlayer; @@ -217,6 +271,8 @@ //For improved remoteadmin tAccessLevel lastAccessLevel;//!< access level at the time of the last name update + eUncannyTimingDetector uncannyTimingDetector_; //!< detector for timingbots + nMachine * registeredMachine_; //!< the machine the player is registered with void RegisterWithMachine(); //!< registers with a machine void UnregisterWithMachine(); //!< un registers with a machine @@ -365,6 +421,8 @@ static void UpdateShuffleSpamTesters(); //<! Reset shuffle spam checks void LogScoreDifference(); //<! Logs accumulated scores since the last call to ResetScoreDifferences() to ladderlog.txt + void AnalyzeTiming( REAL timing ); //<! analzye a timing event for timebot detection + static void SortByScore(); // brings the players into the right order static tString Ranking( int MAX=12, bool cut = true ); // returns a ranking list Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2011-01-17 00:00:37 UTC (rev 9507) @@ -3209,6 +3209,12 @@ RequestSync( true ); } + if( player && Alive() ) + { + // death is hardly good timing. + player->AnalyzeTiming( -1 ); + } + gCycleMovement::Die( time ); // reset smoothing Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2011-01-17 00:00:37 UTC (rev 9507) @@ -2106,12 +2106,13 @@ sg_ArchiveReal( avgspeed, 9 ); // don't drive into a wall, turn before getting too close - REAL lookahead = ts * avgspeed * 2; + REAL lookahead = ( fabs(ts * avgspeed)+fabs(dist_to_dest) ) * 2; + + distToWall = GetMaxSpaceAhead( lookahead ); - REAL dist_to_wall = GetMaxSpaceAhead( lookahead ); - - if ( dist_to_dest > dist_to_wall ) - dist_to_dest = dist_to_wall; + // don't turn after passing a wall, if timing allows + if ( dist_to_dest > distToWall ) + dist_to_dest = distToWall; } static bool breakp = false; @@ -2989,6 +2990,40 @@ eCoord wallVec = rear.ehit->Vec(); if ( fabs( eCoord::F( wallVec, dirDrive ) ) > .9 * dirDrive.NormSquared() ) { + // detect uncanny timing of earlier turns, only check outside corner grinds + if ( uncannyTimingToReport_ && player && ( lastTurnTimeRight_ - lastTurnTimeLeft_ ) * d < 0 ) + { + // check that the wall we're grinding was there before we turned + bool wasMe = true; + gPlayerWall * w = dynamic_cast< gPlayerWall * >( rear.ehit->GetWall() ); + if( !w && rear.ehit->Other() ) + w = dynamic_cast< gPlayerWall * >( rear.ehit->Other()->GetWall() ); + + if ( w ) + { + REAL lastTurnTime = GetLastTurnTime(); + if( lastTurnTime < w->Time(0) && + lastTurnTime < w->Time(1) ) + { + wasMe = false; + } + } + + if ( wasMe ) + { + uncannyTimingToReport_ = false; + + // don't count grinding own or teammate wall on the outside, it may + // be a practiced pattern + if( rear.type != gSENSOR_SELF && rear.type != gSENSOR_TEAMMATE ) + { + REAL timing = rear.hit/(verletSpeed_ + 1E-10); + player->AnalyzeTiming( timing ); + } + } + } + + // enemyInfluence.AddSensor( rear, 1 ); REAL wallAcceleration=SpeedMultiplier() * sg_accelerationCycle * ((1/(rear.hit+sg_accelerationCycleOffs)) -(1/(sg_nearCycle+sg_accelerationCycleOffs))); @@ -3211,8 +3246,58 @@ if (dir > 1) dir = 1; if (dir < -1) dir = -1; - if ( CanMakeTurn( lastTime, dir ) ) + REAL nextTurnTime = GetNextTurn( dir ); + if ( nextTurnTime <= lastTime ) { + // prepare for uncanny timing checks if the turn was user-controlled + if( sn_GetNetState() == nSERVER && nextTurnTime + .05 < lastTime ) + { + // if rubber was used in this turn, check for depletion timing + if( rubberSpeedFactor < 1 ) + { + /* + // turns out this is a bad idea; default clients cheat and + // often produce perfectly timed grinds. + // Maybe they'll send additional timing information one day + // and this can be reactivated. + + REAL rubber_granted, rubberEffectiveness; + // get rubber values + sg_RubberValues( player, verletSpeed_, rubber_granted, rubberEffectiveness ); + rubberEffectiveness /= (1 + rubberMalus ); + + // get timing from it + REAL timing = (rubber_granted - rubber)*rubberEffectiveness/verletSpeed_; + + if( currentDestination ) + { + if( sg_CommandTime.Supported( Owner() ) ) + { + // take net fluctiations into account + timing += fabs(currentDestination->gameTime - lastTime); + } + else + { + // do the same, but via locations. Less accurate. + timing += (currentDestination->position - pos).Norm()/(verletSpeed_*rubberSpeedFactor+1E-10); + } + } + + // add space left after rubber ran out + timing += GetMaxSpaceAhead( maxSpaceMaxCast_ )/(verletSpeed_ + 1E-10); + + // and report + // player->AnalyzeTiming( timing ); + */ + } + else + { + // mark the turn. Later, during grind detection, we can + // measure the quality of an outside corner grind. + uncannyTimingToReport_ = true; + } + } + // request regeneration of maximum space refreshSpaceAhead_ = true; @@ -3750,6 +3835,7 @@ } rubberneeded = rubberAvailable; + // con << "Deep!\n"; } // update rubber usage @@ -4033,6 +4119,8 @@ braking = false; + uncannyTimingToReport_ = false; + acceleration = 0; refreshSpaceAhead_ = true; Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2011-01-16 23:29:20 UTC (rev 9506) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2011-01-17 00:00:37 UTC (rev 9507) @@ -228,6 +228,8 @@ unsigned short turns; //!< the number of turns taken so far unsigned short braking; //!< flag indicating status of brakes ( on/off ) + + bool uncannyTimingToReport_; //!< flag indicating whether we have uncanny timing to report from the last turn int windingNumber_; //!< number that gets increased on every right turn and decreased on every left turn ( used by the AI ) int windingNumberWrapped_; //!< winding number wrapped to be used as an index to the axes code This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-01-19 22:35:26
|
Revision: 9509 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9509&view=rev Author: z-man Date: 2011-01-19 22:35:19 +0000 (Wed, 19 Jan 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9506 to 9508: ------------------------------------------------------------------------ r9508 | bazaarmagetron | 2011-01-18 19:02:54 +0100 (Tue, 18 Jan 2011) | 2 lines Manuel Moos: Merging timebot client crash bugfix. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9506&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9506 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9508 Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-01-18 18:02:54 UTC (rev 9508) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-01-19 22:35:19 UTC (rev 9509) @@ -9353,8 +9353,11 @@ void ePlayerNetID::AnalyzeTiming( REAL timing ) { // just delegate safely - tJUST_CONTROLLED_PTR< ePlayerNetID > keep( this ); - uncannyTimingDetector_.Analyze( timing, this ); + if( GetRefcount() > 0 ) + { + tJUST_CONTROLLED_PTR< ePlayerNetID > keep( this ); + uncannyTimingDetector_.Analyze( timing, this ); + } } eUncannyTimingDetector::eUncannyTimingSettings::~eUncannyTimingSettings() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-02-01 20:51:29
|
Revision: 9515 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9515&view=rev Author: z-man Date: 2011-02-01 20:51:23 +0000 (Tue, 01 Feb 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9508 to 9514: ------------------------------------------------------------------------ r9514 | bazaaarmagetron | 2011-02-01 21:33:07 +0100 (Tue, 01 Feb 2011) | 2 lines Manuel Moos: Removing timebot detecion code stats for the client even in debug mode. ------------------------------------------------------------------------ r9513 | bazaaarmagetron | 2011-02-01 21:32:21 +0100 (Tue, 01 Feb 2011) | 2 lines Manuel Moos: Fixed unsigned score calculation bug in fortress conquest. Titanoboa discovered negative FORTRESS_CONQUERED_SCORE has a comical effect. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9508&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9508 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514 Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-02-01 20:33:07 UTC (rev 9514) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-02-01 20:51:23 UTC (rev 9515) @@ -9363,8 +9363,10 @@ eUncannyTimingDetector::eUncannyTimingSettings::~eUncannyTimingSettings() { #ifdef DEBUG +#ifdef DEDICATED con << "Best ratio achieved for " << timescale*1000 << "ms stat: " << bestRatio << "\n"; #endif +#endif } REAL eUncannyTimingDetector::eUncannyTimingAnalysis::Analyze( REAL timing, eUncannyTimingSettings const & settings ) Modified: armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp 2011-02-01 20:33:07 UTC (rev 9514) +++ armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp 2011-02-01 20:51:23 UTC (rev 9515) @@ -1073,7 +1073,7 @@ win << "$player_win_conquest"; } - int score = totalScore / enemies_.size(); + int score = totalScore / (int)enemies_.size(); for ( TeamArray::iterator iter = enemies_.begin(); iter != enemies_.end(); ++iter ) { (*iter)->AddScore( score, win, tOutput() ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-10 18:22:43
|
Revision: 9551 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9551&view=rev Author: z-man Date: 2011-07-10 18:22:34 +0000 (Sun, 10 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9528 to 9550: ------------------------------------------------------------------------ r9547 | bazaaarmagetron | 2011-07-10 11:58:15 +0200 (Sun, 10 Jul 2011) | 2 lines Manuel Moos: Adding precautions to not land in an odd nSTANDALONE state with zombie network activity. ------------------------------------------------------------------------ r9546 | bazaaarmagetron | 2011-07-10 11:57:37 +0200 (Sun, 10 Jul 2011) | 1 line Daniel Lee Harple: Don't spam uninvite messages if the player is not invited. Fixes bug #801485. ------------------------------------------------------------------------ r9545 | bazaaarmagetron | 2011-05-30 06:31:09 +0200 (Mon, 30 May 2011) | 1 line Daniel Lee Harple: Merge 0.2.8-armagetronad-enemies_whitelist ------------------------------------------------------------------------ r9544 | bazaaarmagetron | 2011-05-28 20:53:07 +0200 (Sat, 28 May 2011) | 1 line Daniel Lee Harple: Add trailing slash for armaauth requests. In Apache, mod_dir's DirectorySlash is set by default to On, and would always cause a redirect to /armaauth/0.1/. ------------------------------------------------------------------------ r9542 | bazaaarmagetron | 2011-05-24 07:13:25 +0200 (Tue, 24 May 2011) | 1 line Daniel Lee Harple: Fix unused value pedantic warning when using clang++ ------------------------------------------------------------------------ r9541 | bazaaarmagetron | 2011-05-24 07:12:49 +0200 (Tue, 24 May 2011) | 1 line Daniel Lee Harple: Fix pedantic warnings when using clang++. Mostly extra semi-colons. Also some void functions returning something, and bools used in place of NULL ------------------------------------------------------------------------ r9540 | bazaaarmagetron | 2011-05-24 07:10:19 +0200 (Tue, 24 May 2011) | 1 line Daniel Lee Harple: Fix compile errors when using clang++ ------------------------------------------------------------------------ r9538 | bazaaarmagetron | 2011-05-14 19:20:44 +0200 (Sat, 14 May 2011) | 2 lines Daniel Lee Harple: Fixed segfault from NULL dereference. ------------------------------------------------------------------------ r9537 | bazaaarmagetron | 2011-05-13 01:00:23 +0200 (Fri, 13 May 2011) | 2 lines Manuel Moos: Fixing infinite loop. ------------------------------------------------------------------------ r9534 | bazaaarmagetron | 2011-04-01 11:15:34 +0200 (Fri, 01 Apr 2011) | 2 lines Manuel Moos: Removing extra newline from master logs. ------------------------------------------------------------------------ r9532 | bazaaarmagetron | 2011-03-31 01:39:39 +0200 (Thu, 31 Mar 2011) | 2 lines Manuel Moos: Removing some inaccurate messages and clearing out the ID of login_deny messages so they don't produce acks. ------------------------------------------------------------------------ r9531 | bazaaarmagetron | 2011-03-25 20:03:23 +0100 (Fri, 25 Mar 2011) | 2 lines Manuel Moos: Implemented CYCLE_RUBBER_MINDISTANCE_GAP_BACKDOOR for killing players trying to take the 'easy way out' of a trap. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9528&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/src/engine/eGameObject.h armagetronad/trunk/armagetronad/src/engine/eNetGameObject.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/engine/eTeam.cpp armagetronad/trunk/armagetronad/src/engine/eVoter.cpp armagetronad/trunk/armagetronad/src/network/nConfig.cpp armagetronad/trunk/armagetronad/src/network/nKrawallPrivate.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp armagetronad/trunk/armagetronad/src/network/nPriorizing.h armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.h armagetronad/trunk/armagetronad/src/render/rModel.h armagetronad/trunk/armagetronad/src/tools/tArray.h armagetronad/trunk/armagetronad/src/tools/tConfiguration.h armagetronad/trunk/armagetronad/src/tools/tCoord.h armagetronad/trunk/armagetronad/src/tools/tDirectories.cpp armagetronad/trunk/armagetronad/src/tools/tDirectories.h armagetronad/trunk/armagetronad/src/tools/tHeap.h armagetronad/trunk/armagetronad/src/tools/tLinkedList.h armagetronad/trunk/armagetronad/src/tools/tList.h armagetronad/trunk/armagetronad/src/tools/tLocale.h armagetronad/trunk/armagetronad/src/tools/tMemManager.cpp armagetronad/trunk/armagetronad/src/tools/tSafePTR.h armagetronad/trunk/armagetronad/src/tools/tToDo.cpp armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h armagetronad/trunk/armagetronad/src/tron/gMenus.cpp armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp armagetronad/trunk/armagetronad/src/tron/gServerFavorites.cpp armagetronad/trunk/armagetronad/src/tron/gSpawn.h armagetronad/trunk/armagetronad/src/tron/gWall.cpp armagetronad/trunk/armagetronad/src/ui/uInput.cpp armagetronad/trunk/armagetronad/src/ui/uMenu.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9550 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/NEWS 2011-07-10 18:22:34 UTC (rev 9551) @@ -113,6 +113,9 @@ default. - New command-line option "--input" added to poll for input from a file instead of stdin. +- Added WHITELIST_ENEMIES_[IP/USERNAME] to allow players to be enemies, even + if they come from the same IP address and ALLOW_ENEMIES_SAME_IP is + disabled (which is its default setting). - GAME_END, NEW_MATCH, and NEW_ROUND ladderlog events include date and time. Changes since 0.2.8.3_rc4: Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2011-07-10 18:22:34 UTC (rev 9551) @@ -77,6 +77,10 @@ ALLOW_ENEMIES_SAME_IP 0 # if set to 1, this allows two players that apparently come from the same machine to fight for points with each other ALLOW_ENEMIES_SAME_CLIENT 0 # if set to 1, this allows two players that play on the same client to fight for points with each other +# If ALLOW_ENEMIES_SAME_IP is set to 0, you can allow players from the same IP to be enemies by whitelisting their authenticated names or IP: +# WHITELIST_ENEMIES_USERNAME player1@ player2@ +# WHITELIST_ENEMIES_IP 127.0.0.1 + ALLOW_CONTROL_DURING_CHAT 0 # if set to 1, this allows a player to issue cycle and camera control commands during chat (losing the chatbot and the yellow chat pyramid). This feature was buggy and has been disabled for 0.2.8.0. ALLOW_IMPOSTERS 0 # allow two players to have the same name @@ -167,8 +171,9 @@ # "open" vs "closed" play. To enforce "open" play, set the next value to something positive, # values between .5 and .9 make most sense. If you choose to do so, increase CYCLE_RUBBER_MINDISTANCE -# for optimal effect; with normal speed settings, keep it between .2 and 2. +# for optimal effect; with normal speed settings, keep it between .1 and 2. CYCLE_RUBBER_MINDISTANCE_GAP 0 # If > 0, CYCLE_RUBBER_MINDISTANCE effectively is never taken to be bigger than this value times the size of any detected gaps the cylce can squeeze through. +CYCLE_RUBBER_MINDISTANCE_GAP_BACKDOOR 0 # As above, but this value is applied only to 'backdoor' gaps, gaps that lead you away from an enemy. If = 0, CYCLE_RUBBER_MINDISTANCE_GAP applies to backdoors, too. If you want to discourage backdooring, set this to something bigger than 1, 1.5 would be recommended. CYCLE_RUBBER_MINDISTANCE_GAP_SIDE .5 # Gap detection only sees gaps that the cycle may reach in no less than this many seconds. # braking Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-10 18:22:34 UTC (rev 9551) @@ -102,6 +102,7 @@ cycle_rubber_speed_help Logarithmic speed of wall approximation when rubber is in effect (every second, you get closer to the wall by a factor of ~0.4^{this value}) cycle_rubber_mindistance_help The minimal distance rubber code keeps you from the wall in front of you cycle_rubber_mindistance_gap_help If > 0, CYCLE_RUBBER_MINDISTANCE effectively is never taken to be bigger than this value times the size of any detected gaps the cylce can squeeze through. For "Open" gameplay. +cycle_rubber_mindistance_gap_backdoor_help If > 0, CYCLE_RUBBER_MINDISTANCE effectively is never taken to be bigger than this value times the size of any detected backdoor gaps the cylce can squeeze through. For "Open" gameplay. If = 0, CYCLE_RUBBER_MINDISTANCE_GAP applies to backdoors, too. cycle_rubber_mindistance_gap_side_help Gap detection only sees gaps that the cycle may reach in no less than this many seconds. cycle_rubber_mindistance_ratio_help Additional distance to CYCLE_RUBBER_MINDISTANCE for every length unit of the wall you have in front of you cycle_rubber_mindistance_reservoir_help Additional distance if you have an empty rubber meter (gets faded out gradually as you use up all your rubber) @@ -442,6 +443,9 @@ allow_enemies_same_ip_help If set to 1, this allows two players that apparently come from the same machine to fight for points with each other. allow_enemies_same_client_help If set to 1, this allows two players that play on the same client to fight for points with each other. +whitelist_enemies_username_help Allow a set of authenticated players to be enemies, even if they come from the same IP address. Usage: WHITELIST_ENEMIES_USERNAME <authenticated name1> <authenticated name2> ... +whitelist_enemies_ip_help Allow any players from the specified IP address to be enemies. Usage: WHITELIST_ENEMIES_IP <ip1> ... +whitelist_enemies_success Added \1 entries to the whitelist. allow_control_during_chat_help If set to 1, this allows a player to issue cycle and camera control commands during chat (losing the chatbot and the yellow chat pyramid). Modified: armagetronad/trunk/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-10 18:22:34 UTC (rev 9551) @@ -198,6 +198,7 @@ cycle_boost_team_override_help Block out older clients if CYCLE_BOOST_TEAM differs from its default? cycle_delay_doublebind_bonus_override_help Block out older clients if CYCLE_DELAY_DOUBLEBIND_BONUS differs from its default? cycle_rubber_mindistance_gap_override_help Block out older clients if CYCLE_RUBBER_MINDISTANCE_GAP differs from its default? +cycle_rubber_mindistance_gap_backdoor_override_help Block out older clients if CYCLE_RUBBER_MINDISTANCE_GAP_BACKDOOR differs from its default? cycle_speed_max_override_help Block out older clients if CYCLE_SPEED_MAX differs from its default? cycle_width_override_help Block out older clients if CYCLE_WIDTH differs from its default? cycle_width_rubber_max_override_help Block out older clients if CYCLE_WIDTH_RUBBER_MAX differs from its default? Modified: armagetronad/trunk/armagetronad/src/engine/eGameObject.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eGameObject.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/engine/eGameObject.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -208,7 +208,7 @@ //sound output //virtual void SoundMix(unsigned char *dest,unsigned int len, - // int viewer,REAL rvol,REAL lvol){}; + // int viewer,REAL rvol,REAL lvol){} // internal camera virtual eCoord CamDir() const {return dir;} @@ -271,8 +271,8 @@ class eDeath { public: - eDeath(){}; //!< constructor - ~eDeath(){}; //!< destructor + eDeath(){} //!< constructor + ~eDeath(){} //!< destructor }; #endif Modified: armagetronad/trunk/armagetronad/src/engine/eNetGameObject.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eNetGameObject.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/engine/eNetGameObject.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -196,8 +196,8 @@ time=se_GameTime()+1; uActionPlayer *Act=uActionPlayer::Find(act_id); - - ReceiveControl(time,Act,x); + if ( Act ) + ReceiveControl(time,Act,x); } Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -175,7 +175,7 @@ nKrawall::nScrambledPassword password; bool save; - PasswordStorage(): save(false){}; + PasswordStorage(): save(false){} }; static bool operator == ( PasswordStorage const & a, PasswordStorage const & b ) @@ -362,7 +362,7 @@ class tConfItemPassword:public tConfItemBase{ public: tConfItemPassword():tConfItemBase("PASSWORD"){} - ~tConfItemPassword(){}; + ~tConfItemPassword(){} // write the complete passwords virtual void WriteVal(std::ostream &s){ @@ -3569,7 +3569,7 @@ // singleton accessor static std::map<tString, eHelpTopic> & GetHelpTopics(); public: - eHelpTopic() {}; + eHelpTopic() {} eHelpTopic(tString const &shortdesc, tString const &text) : m_shortdesc(shortdesc), m_text(text) { } @@ -5093,7 +5093,7 @@ virtual P ReadRawVal(tString const & name, std::istream &s) const = 0; virtual P GetDefault() const = 0; - virtual void TransformName( tString & name ) const {}; + virtual void TransformName( tString & name ) const {} virtual void ReadVal(std::istream &s) { @@ -8483,7 +8483,7 @@ class gServerInfoAdmin: public nServerInfoAdmin { public: - gServerInfoAdmin(){}; + gServerInfoAdmin(){} private: virtual tString GetUsers() const @@ -9109,6 +9109,73 @@ #endif } +class eEnemiesWhitelist +{ +public: + eEnemiesWhitelist() :usernames_whitelist_(), ip_addresses_whitelist_() {} + + // Returns true if the two players can be enemies. + // + // Assumes both "a" and "b" are from the same IP address. + bool CanBeEnemies( const ePlayerNetID * a, const ePlayerNetID * b ) const + { + return( + HasEntry( ip_addresses_whitelist_, a->GetMachine().GetIP() ) || + ( HasEntry( usernames_whitelist_, a->GetLogName() ) && HasEntry( usernames_whitelist_, b->GetLogName() ) ) + ); + } + + void AddUsernames( std::istream & s ) + { + Parse( usernames_whitelist_, s ); + } + + void AddIPAddresses( std::istream & s ) + { + Parse( ip_addresses_whitelist_, s ); + } +protected: + typedef std::set< tString > StringSet; + + void Parse( StringSet & whitelist, std::istream & s ) + { + int entries_count = 0; + while ( s.good() ) + { + tString name; + s >> name; + if ( name.Len() > 1 ) + { + std::pair< StringSet::iterator, bool > ret = whitelist.insert( name ); + if ( ret.second ) entries_count++; + } + } + con << tOutput( "$whitelist_enemies_success", entries_count ) << '\n'; + } + + bool HasEntry( const StringSet & whitelist, const tString & value ) const + { + return whitelist.find( value ) != whitelist.end(); + } + + StringSet usernames_whitelist_; + StringSet ip_addresses_whitelist_; +}; + +static eEnemiesWhitelist se_enemiesWhitelist; + +void se_WhiteListEnemiesUsername( std::istream & s ) +{ + se_enemiesWhitelist.AddUsernames( s ); +} +static tConfItemFunc se_whiteListEnemiesUsernameConfItemFunc( "WHITELIST_ENEMIES_USERNAME", se_WhiteListEnemiesUsername ); + +void se_WhiteListEnemiesIP( std::istream & s ) +{ + se_enemiesWhitelist.AddIPAddresses( s ); +} +static tConfItemFunc se_whiteListEnemiesIPConfItemFunc( "WHITELIST_ENEMIES_IP", se_WhiteListEnemiesIP ); + // allow enemies from the same IP? static bool se_allowEnemiesSameIP = false; static tSettingItem< bool > se_allowEnemiesSameIPConf( "ALLOW_ENEMIES_SAME_IP", se_allowEnemiesSameIP ); @@ -9139,7 +9206,7 @@ return false; // no scoring for two players from the same IP - if ( !se_allowEnemiesSameIP && a->Owner() != 0 && a->GetMachine() == b->GetMachine() ) + if ( !se_allowEnemiesSameIP && a->Owner() != 0 && a->GetMachine() == b->GetMachine() && !se_enemiesWhitelist.CanBeEnemies( a, b ) ) return false; // no scoring for two players from the same client Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -135,7 +135,7 @@ virtual bool Act(uAction *act,REAL x); - int ID() const {return id;}; + int ID() const {return id;} #ifndef DEDICATED void Render(); #endif Modified: armagetronad/trunk/armagetronad/src/engine/eTeam.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTeam.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/engine/eTeam.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -452,16 +452,16 @@ void eTeam::UnInvite( ePlayerNetID * player ) { tASSERT( player ); + size_t wasInvited = player->invitations_.erase( this ); if ( player->CurrentTeam() == this && this->IsLockedFor( player ) ) { sn_ConsoleOut( tOutput( "$invite_team_kick", player->GetColoredName(), Name() ) ); player->SetTeam(0); } - else + else if ( wasInvited ) { sn_ConsoleOut( tOutput( "$invite_team_uninvite", player->GetColoredName(), Name() ) ); } - player->invitations_.erase( this ); } // check if a player is invited Modified: armagetronad/trunk/armagetronad/src/engine/eVoter.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eVoter.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/engine/eVoter.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -230,7 +230,7 @@ eVoteItem( void ): creationTime_( tSysTimeFloat() ), user_( 0 ), id_( ++se_votingItemID ), menuItem_( 0 ), total_( 0 ) { items_.Add( this ); - }; + } virtual ~eVoteItem( void ); @@ -324,7 +324,7 @@ con << tOutput( "$vote_new", GetDescription() ); this->Evaluate(); - }; + } virtual nMessageBase * CreateMessage( void ) const = 0 ; @@ -672,7 +672,7 @@ } return true; - }; + } virtual bool DoCheckValid( int senderID ){ return true; } @@ -683,7 +683,7 @@ // write our message ID item.set_vote_id( id_ ); } - }; + } protected: virtual tString DoGetDetails() const // returns the detailed description of the voting item @@ -936,7 +936,7 @@ description_ = item.properties().description(); details_ = item.properties().details(); return eVoteItem::DoFillFromMessage( item.base(), sender ); - }; + } void DoFillToMessage( Engine::VoteItemServerControlled & item ) const { @@ -944,7 +944,7 @@ item.mutable_properties()->set_details( details_ ); eVoteItem::DoFillToMessage( *item.mutable_base() ); - }; + } virtual nMessageBase * CreateMessage() const { @@ -954,7 +954,7 @@ return m; } - virtual void DoExecute(){}; // called when the voting was successful + virtual void DoExecute(){} // called when the voting was successful protected: virtual void Evaluate() { @@ -1120,7 +1120,7 @@ virtual nMessageBase * CreateMessageLegacy() const { return eVoteItemHarm::CreateMessage(); - }; + } virtual nMessageBase * CreateMessage( void ) const { @@ -1188,14 +1188,14 @@ } return eVoteItem::DoCheckValid( senderID ); - }; + } void DoFillToMessage( Engine::VoteItemHarm & harm ) const { harm.set_player_id( nNetObject::PointerToID( player_ ) ); eVoteItem::DoFillToMessage( *harm.mutable_base() ); - }; + } protected: // get the language string prefix @@ -1292,7 +1292,7 @@ } return eVoteItemHarm::DoCheckValid( senderID ); - }; + } virtual void DoExecute() // called when the voting was successful { @@ -1355,7 +1355,7 @@ Update(); return ret; - }; + } void DoFillToMessage( Engine::VoteItemHarm & harm ) const { @@ -1363,7 +1363,7 @@ tASSERT( sn_GetNetState() != nCLIENT ); eVoteItemHarm::DoFillToMessage( harm ); - }; + } private: virtual void Update() //!< update description and details { @@ -1465,7 +1465,7 @@ // no transformation needed or transformation failed. Proceed as usual. return eVoteItemHarm::DoCheckValid( senderID ); - }; + } virtual void DoExecute() // called when the voting was successful { Modified: armagetronad/trunk/armagetronad/src/network/nConfig.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nConfig.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nConfig.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -567,7 +567,7 @@ "0.2.8.3_alpha", // 14 "0.2.8.3_alpha_auth", // 15 "0.2.8.3.X", // 16, was: 0.2.8.3_beta2 - "0.2.8.4", // 17 + "0.2.8.4.X", // 17, could be 0.2.9.X, who knows. "0.2.8.5_alpha", // 18 "0.2.8.5", // 19 "0.3.1", // 20 Modified: armagetronad/trunk/armagetronad/src/network/nKrawallPrivate.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nKrawallPrivate.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nKrawallPrivate.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -451,7 +451,7 @@ { // compose real URL std::ostringstream fullURL; - fullURL << "http://" << authority << "/armaauth/0.1"; + fullURL << "http://" << authority << "/armaauth/0.1/"; fullURL << query; // better not. output is not thread safe. Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -2035,8 +2035,8 @@ messageIDBig_ = 0; #endif - // don't send messages to unsupported peers - if( peer > MAXCLIENTS+1 ) + // don't send messages to unsupported peers or in non-networked mode + if( peer > MAXCLIENTS+1 || sn_GetNetState() == nSTANDALONE ) { tJUST_CONTROLLED_PTR< nMessageBase > bounce(this); return; @@ -2773,15 +2773,33 @@ { nCallbackLoginLogout::UserLoggedIn(0); + if(sn_GetNetState() != nCLIENT) + { + return nDENIED; + } + tOutput mess; mess.SetTemplateParameter(1, sn_myNetID); mess << "$network_login_success"; con << mess; con << tOutput("$network_login_sync"); sn_Sync(40); + + if(sn_GetNetState() != nCLIENT) + { + return nDENIED; + } + con << tOutput("$network_login_relabeling"); con << tOutput("$network_login_sync2"); + sn_Sync(40,true); + + if(sn_GetNetState() != nCLIENT) + { + return nDENIED; + } + con << tOutput("$network_login_done"); // marginalize past ping values @@ -3248,12 +3266,13 @@ if (sn_Connections[i].socket) { nMessageBase::SendCollected(i); - printMessage = true; // to make sure... if ( i!=0 && i != MAXCLIENTS+2 && sn_GetNetState() == nSERVER ){ + printMessage = true; for(int j=2;j>=0;j--){ nProtoBufMessage< Network::LoginDenied > * mess = sn_loginDeniedDescriptor.CreateMessage(); + mess->ClearMessageID(); mess->AccessProtoBuf().set_reason( reason ); // write redirection @@ -4206,7 +4225,7 @@ { public: mutable nMachine * machine; - nMachinePTR(): machine(tNEW(nMachine)()){}; + nMachinePTR(): machine(tNEW(nMachine)()){} ~nMachinePTR(){tDESTROY(machine);} nMachinePTR(nMachinePTR const & other): machine(other.machine){other.machine=0;} nMachinePTR & operator=(nMachinePTR const & other){ machine = other.machine; other.machine=0;return *this;} Modified: armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -449,7 +449,7 @@ { public: nTestObject( nStreamMessage& m ): nNetObject( m ){} - nTestObject(){}; + nTestObject(){} virtual nDescriptor& CreatorDescriptor() const; virtual bool AcceptClientSync() const{return true;} }; Modified: armagetronad/trunk/armagetronad/src/network/nPriorizing.h =================================================================== --- armagetronad/trunk/armagetronad/src/network/nPriorizing.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nPriorizing.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -111,7 +111,7 @@ protected: tJUST_CONTROLLED_PTR<nBandwidthTask> Next( nType type ); // removes and returns the top priority task private: - virtual void OnChange(){}; // called on every change of data + virtual void OnChange(){} // called on every change of data nTaskHeap tasks_[ nBandwidthTask::Type_Count ]; }; Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -2957,7 +2957,6 @@ if ( !advancedInfoSetEver ) { con << "Acknowledged server: " << ToString( *this ) << ", name: \"" << tColoredString::RemoveColors(name) << "\"\n"; - con << "\n"; Save(); } else if ( name != oldName ) Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.h =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -116,7 +116,7 @@ { nServerInfoBase::SetConnectionName( connectionName ); nServerInfoBase::SetPort( port ); - }; + } }; //! Full server information Modified: armagetronad/trunk/armagetronad/src/render/rModel.h =================================================================== --- armagetronad/trunk/armagetronad/src/render/rModel.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/render/rModel.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -39,7 +39,7 @@ public: float x[3]; Vec3(REAL a=0,REAL b=0,REAL c=0){x[0]=a;x[1]=b;x[2]=c;} - ~Vec3(){}; + ~Vec3(){} REAL Norm(){return REAL(sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]));} @@ -54,7 +54,7 @@ public: int A[3]; rModelFace(int a=0,int b=0,int c=0){A[0]=a;A[1]=b;A[2]=c;} - ~rModelFace(){}; + ~rModelFace(){} }; class rModel Modified: armagetronad/trunk/armagetronad/src/tools/tArray.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tArray.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tArray.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -126,13 +126,13 @@ :GrowingArrayBase(firstsize,sizeof(T),MALLOC) { // dump(low,flow,"con:size " << firstsize); Init(); - }; + } tArray(const tArray &A) :GrowingArrayBase(A.Len(),sizeof(T),MALLOC){ CopyFrom(A); - }; + } T& operator[](int i) { @@ -149,7 +149,7 @@ // dump(low,flow,"[" << i << "]" << "=" << ((T *)Base())[i] << '\n'); return((reinterpret_cast<T *>(Base()))[i]); - }; + } // Allow to READ from a const object. T const& operator[](int i) const { @@ -162,7 +162,7 @@ tASSERT( i >= 0 && i < Len() ); return((reinterpret_cast<T *>(Base()))[i]); - }; + } T* operator+(int i) const{ #ifdef DEBUG @@ -173,7 +173,7 @@ #endif return(reinterpret_cast<T *>(Base())+i); - }; + } const tArray<T> &operator=(const tArray<T> &A){ @@ -182,7 +182,7 @@ CopyFrom(A); return *this; - }; + } void RemoveAt( int index ) { Modified: armagetronad/trunk/armagetronad/src/tools/tConfiguration.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tConfiguration.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tConfiguration.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -264,7 +264,7 @@ T *target; ShouldChangeFuncT shouldChangeFunc_; - tConfItem(T &t):tConfItemBase(""),target(&t), shouldChangeFunc_(NULL) {}; + tConfItem(T &t):tConfItemBase(""),target(&t), shouldChangeFunc_(NULL) {} public: tConfItem(const char *title,const tOutput& help,T& t, callbackFunc *cb) :tConfItemBase(title,help,cb),target(&t), shouldChangeFunc_(NULL) {} Modified: armagetronad/trunk/armagetronad/src/tools/tCoord.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tCoord.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tCoord.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -42,7 +42,7 @@ class tCoord{ public: REAL x,y; //!< the stored coordinates - explicit tCoord(REAL X=0,REAL Y=0):x(X),y(Y){}; //!< Default constructor + explicit tCoord(REAL X=0,REAL Y=0):x(X),y(Y){} //!< Default constructor // Calculations: inline bool operator==(const tCoord &a) const; //!< Are the two coordinates close enough to each other to be considered equeal? Modified: armagetronad/trunk/armagetronad/src/tools/tDirectories.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tDirectories.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tDirectories.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -518,6 +518,7 @@ class tPathConfig: public tPath { public: + tPathConfig() {} private: void Paths ( tArray< tString >& paths ) const { @@ -548,6 +549,7 @@ class tPathData: public tPath { public: + tPathData() {} private: void Paths ( tArray< tString >& paths ) const { @@ -607,6 +609,7 @@ class tPathVar: public tPath { public: + tPathVar() {} private: void Paths ( tArray< tString >& paths ) const { @@ -633,6 +636,7 @@ class tPathScreenshot: public tPath { public: + tPathScreenshot() {} private: void Paths ( tArray< tString >& paths ) const { Modified: armagetronad/trunk/armagetronad/src/tools/tDirectories.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tDirectories.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tDirectories.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -53,14 +53,15 @@ tString GetPaths(void) const; //!< Puts all paths into a tString for outputting to the user - tPath(){}; - virtual ~tPath(){}; + tPath(){} + virtual ~tPath(){} protected: virtual void Paths ( tArray< tString >& paths ) const = 0; // maximum priority }; class tPathResource: public tPath { public: + tPathResource() {} tString GetWritePath(const char *filename) const; static tString GetDirPath(); //!< returns the path to the included resources private: Modified: armagetronad/trunk/armagetronad/src/tools/tHeap.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tHeap.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tHeap.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -108,8 +108,8 @@ template<class T> class tHeap: public tHeapBase{ public: - tHeap(){}; - ~tHeap(){}; + tHeap(){} + ~tHeap(){} void Insert(T *e){tHeapBase::Insert(e);} // starts to manage object e void Remove(T *e){tHeapBase::Remove(e);} // stops (does not delete e) Modified: armagetronad/trunk/armagetronad/src/tools/tLinkedList.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tLinkedList.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tLinkedList.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -73,8 +73,8 @@ { // this class only works under this condition: tASSERT( static_cast< tListItemBase * >( ( T * )(NULL) ) == NULL ); - }; - tListItem(T *&a):tListItemBase(reinterpret_cast<tListItemBase*&>(a)){}; + } + tListItem(T *&a):tListItemBase(reinterpret_cast<tListItemBase*&>(a)){} T *Next(){return reinterpret_cast<T*>(next);} template< typename comparator > Modified: armagetronad/trunk/armagetronad/src/tools/tList.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tList.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tList.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -149,7 +149,7 @@ } (*this)[this->Len()-1] = NULL; - SetLen(this->Len()-1); + this->SetLen(this->Len()-1); if ( REFERENCE ) { @@ -183,7 +183,7 @@ public: int ListID(){return listID_;} int& ListIDRef(){return listID_;} - tListMember():listID_(-1){}; + tListMember():listID_(-1){} private: int listID_; }; Modified: armagetronad/trunk/armagetronad/src/tools/tLocale.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tLocale.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tLocale.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -184,7 +184,7 @@ { T element; public: -tOutputItem(tOutput& o, const T& e): tOutputItemBase(o), element(e){}; +tOutputItem(tOutput& o, const T& e): tOutputItemBase(o), element(e){} virtual void Print(tString& target) const { target << element; } Modified: armagetronad/trunk/armagetronad/src/tools/tMemManager.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tMemManager.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tMemManager.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -99,8 +99,8 @@ class tMockMutex { public: - void acquire(){}; - void release(){}; + void acquire(){} + void release(){} }; static tMockMutex st_mutex; Modified: armagetronad/trunk/armagetronad/src/tools/tSafePTR.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tSafePTR.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tSafePTR.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -63,10 +63,10 @@ template<class T> class tCheckedPTR:public tCheckedPTRBase{ typedef T myclass; public: - tCheckedPTR(T *x):tCheckedPTRBase(x){}; - tCheckedPTR(const tCheckedPTR<T> &x):tCheckedPTRBase(x.target){}; - tCheckedPTR():tCheckedPTRBase(){}; - ~tCheckedPTR(){}; + tCheckedPTR(T *x):tCheckedPTRBase(x){} + tCheckedPTR(const tCheckedPTR<T> &x):tCheckedPTRBase(x.target){} + tCheckedPTR():tCheckedPTRBase(){} + ~tCheckedPTR(){} tCheckedPTR<T> &operator=(T *x){tCheckedPTRBase::operator=(x); return *this;} tCheckedPTR<T> &operator=(const tCheckedPTR<T> &x) @@ -93,11 +93,11 @@ template<class T> class tCheckedPTRConst:public tCheckedPTRBase{ typedef T myclass; public: - tCheckedPTRConst():tCheckedPTRBase(NULL){}; - tCheckedPTRConst(const T *x):tCheckedPTRBase(reinterpret_cast<void *>(x)){}; - tCheckedPTRConst(const tCheckedPTRConst<T> &x):tCheckedPTRBase(x.target){}; - tCheckedPTRConst(const tCheckedPTR<T> &x):tCheckedPTRBase(x.operator->()){}; - ~tCheckedPTRConst(){}; + tCheckedPTRConst():tCheckedPTRBase(NULL){} + tCheckedPTRConst(const T *x):tCheckedPTRBase(reinterpret_cast<void *>(x)){} + tCheckedPTRConst(const tCheckedPTRConst<T> &x):tCheckedPTRBase(x.target){} + tCheckedPTRConst(const tCheckedPTR<T> &x):tCheckedPTRBase(x.operator->()){} + ~tCheckedPTRConst(){} tCheckedPTRConst<T> &operator=(const T *x) {tCheckedPTRBase::operator=(reinterpret_cast<T *>(x)); return *this;} @@ -194,7 +194,7 @@ tControlledPTR(T *x):target(x){AddRef();} tControlledPTR(const tCheckedPTR<T> &x):target(x.operator->()){AddRef();} tControlledPTR(const tControlledPTR<T> &x):target(x.target){AddRef();} - tControlledPTR():target(NULL){}; + tControlledPTR():target(NULL){} tControlledPTR<T> &operator=(T *x){ @@ -281,7 +281,7 @@ ~tControlledPTR(){ Release(); - }; + } }; template<class T> class tJUST_CONTROLLED_PTR{ @@ -305,7 +305,7 @@ tJUST_CONTROLLED_PTR(T *x):target(x){AddRef();} tJUST_CONTROLLED_PTR(const tCheckedPTR<T> &x):target(x.operator->()){AddRef();} tJUST_CONTROLLED_PTR(const tJUST_CONTROLLED_PTR<T> &x):target(x.target){AddRef();} - tJUST_CONTROLLED_PTR():target(NULL){}; + tJUST_CONTROLLED_PTR():target(NULL){} tJUST_CONTROLLED_PTR<T> &operator=(T *x){ @@ -372,7 +372,7 @@ ~tJUST_CONTROLLED_PTR(){ Release(); - }; + } }; @@ -424,8 +424,8 @@ // not thread-safe mutex struct tNonMutex { - void acquire(){}; - void release(){}; + void acquire(){} + void release(){} }; template< class T, class MUTEX = tNonMutex > class tReferencable @@ -433,8 +433,8 @@ friend class tStackObject< T >; public: - tReferencable() :refCtr_(0) {}; - tReferencable ( const tReferencable& ) :refCtr_(0) {}; + tReferencable() :refCtr_(0) {} + tReferencable ( const tReferencable& ) :refCtr_(0) {} tReferencable& operator = ( const tReferencable& ){ return *this; } void AddRef () const Modified: armagetronad/trunk/armagetronad/src/tools/tToDo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tToDo.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tools/tToDo.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -39,8 +39,8 @@ class tMockMutex { public: - void acquire(){}; - void release(){}; + void acquire(){} + void release(){} }; static tMockMutex st_mutex; Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -411,7 +411,7 @@ // don't see new walls if ( hitTime_ > hitOwner_->LastTime() - sg_chatBotNewWallBlindness && hitOwner_ != owned ) { - ehit = false; + ehit = NULL; hit = 1E+40; return false; } Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -1574,11 +1574,19 @@ } } + +// checks for gaps +// front: front sensor +// side: side sensor +// dir: direction side sensor is pointing at +// norm: length of front wall +// def: default gap size to return +// tolerance: filled with value small compared to geometry static REAL sg_Gap( gSensor const & front, gSensor const & side, eCoord const & dir, REAL norm, REAL def, REAL & tolerance ) { if ( side.ehit && side.ehit->Other() ) { - // determine the adistance of the two endpoints of the side edge + // determine the distance of the two endpoints of the side edge // to the wall in front of us REAL gap1 = ( front.ehit->Vec()*( *side.ehit->Point() - *front.ehit->Point() ) )/norm; REAL gap2 = ( front.ehit->Vec()*( *side.ehit->Other()->Point() - *front.ehit->Point() ) )/norm; @@ -1606,11 +1614,99 @@ } } +/* +// determines the built time of a sensor hit +static REAL sg_BuildTime( eSensor const & sensor ) +{ + if( !sensor.ehit ) + { + return 0; + } + + eWall * wall = sensor.ehit->GetWall(); + if( !wall ) + { + return 0; + } + + // see if it is a player wall + gPlayerWall const * playerWall = dynamic_cast<gPlayerWall const *>( wall ); + if ( !playerWall ) + return 0; + + // get the approximate time the wall was drawn + REAL alpha = .5f; + // try to get a more accurate value + if ( playerWall->Edge() ) + { + // get the position of the collision point + alpha = playerWall->Edge()->Ratio( sensor.before_hit ); + } + + return playerWall->Time( alpha ); +} +*/ + +// checks whether the path between side1 and side2 is a 'backdoor', a 'cheap' way +// out of a trap. Open play etiquette demands that you follow enemies that trap you and +// not turn around and escape round the back. +static bool sg_GapBackdoorHelper( gSensor const & side1, gSensor const & side2, int dir ) +{ + // assume side1 is the side with the enemy trail. + if( side1.type != gSENSOR_ENEMY ) + { + return true; + } + + // it also needs to lead *away* from us + if( side1.lr != dir ) + { + return true; + } + + /* Bad idea. produces false positives. + // and if the other side is our own wall... + if( side2.type == gSENSOR_TEAMMATE || side2.type == gSENSOR_SELF ) + { + // then side1 needs to be newer. + REAL time1 = sg_BuildTime( side1 ); + REAL time2 = sg_BuildTime( side2 ); + + if( time1 < time2 ) + { + return true; + } + } + */ + + return false; +} + +static bool sg_GapBackdoor( gSensor const & side1, gSensor const & side2, int dir ) +{ + if( !side1.ehit || !side2.ehit ) + { + return true; + } + + // going between two of your own wall is not backdooring + if( side1.type == gSENSOR_SELF && side2.type == gSENSOR_SELF ) + { + return false; + } + + return sg_GapBackdoorHelper( side1, side2, dir ) && + sg_GapBackdoorHelper( side2, side1, -dir ); +} + static REAL sg_rubberCycleMinDistanceGap = .0f; // if != 0, CYCLE_RUBBER_MINDISTANCE effectively is never bigger than this value times the size of any detected gaps the cylce can squeeze through. +static REAL sg_rubberCycleMinDistanceGapBackdoor = .0f;// if != 0, CYCLE_RUBBER_MINDISTANCE effectively is never bigger than this value times the size of any detected backdoor gaps the cylce can squeeze through. If = 0, sg_rubberCycleMinDistanceGap applies. static REAL sg_rubberCycleMinDistanceGapSide = .5f; // Gaps may be detected only if the cycle is able to drive into them in this time static nSettingItemWatched<REAL> c_rcmdg("CYCLE_RUBBER_MINDISTANCE_GAP", sg_rubberCycleMinDistanceGap, nConfItemVersionWatcher::Group_Bumpy, 14 ); +static nSettingItemWatched<REAL> c_rcmdgbd("CYCLE_RUBBER_MINDISTANCE_GAP_BACKDOOR", + sg_rubberCycleMinDistanceGapBackdoor, nConfItemVersionWatcher::Group_Bumpy, 17 ); static nSettingItem<REAL> c_rcmdgs("CYCLE_RUBBER_MINDISTANCE_GAP_SIDE", sg_rubberCycleMinDistanceGapSide); @@ -1746,7 +1842,7 @@ REAL rubberCycleMinDistanceGapDistance = sg_rubberCycleMinDistanceGapSide * Speed(); - if ( sg_rubberCycleMinDistanceGap > 0 ) + if ( sg_rubberCycleMinDistanceGap > 0 || sg_rubberCycleMinDistanceGapBackdoor > 0 ) { // determine the width of the gap previous grinders left for ( int dir = -1; dir < 2; dir += 2 ) @@ -1754,6 +1850,7 @@ // see if cached value is still good REAL & gapCache = gap_[(dir+1)/2]; bool & keepLooking = keepLookingForGap_[(dir+1)/2]; + bool & backdoor = gapIsBackdoor_[(dir+1)/2]; if ( gapCache > fr.hit && keepLooking ) { @@ -1763,7 +1860,7 @@ eCoord dirCast = Grid()->GetDirection(wn); bool gapFound = false; - for ( int back = -1; back <= 2; ++back ) + for ( int back = 0; back <= 2; ++back ) { // determine next direction when turning into dir int wn2 = wn; @@ -1783,7 +1880,6 @@ REAL tolerance; REAL minGap = sg_Gap( fr, side, dirDrive, norm, fr.hit * .5, tolerance ); - while ( minGap > tolerance ) { // last test: see if there really is a gap after that wall ends @@ -1812,6 +1908,8 @@ { gapCache = minGap; + backdoor = sg_GapBackdoor( fr, side, dir ); + // bail out of outer loop back = 100; } @@ -1830,18 +1928,46 @@ // if there was no gap detected so far, there is no gap. if ( gapCache > 5E+19 ) + { gapCache = 0; + backdoor = false; + } } } } // fetch cache, ignoring zeroes - REAL gap = ( ( gap_[0] > 0 ? gap_[0] : 1E+30 ) < ( gap_[1] > 0 ? gap_[1] : 1E+30 ) ) ? gap_[0] : gap_[1]; + int gapIndex = ( ( gap_[0] > 0 ? gap_[0] : 1E+30 ) < ( gap_[1] > 0 ? gap_[1] : 1E+30 ) ) ? 0 : 1; + REAL gap = gap_[gapIndex]; if ( gap > 0 ) { - REAL minDistanceGap = gap * sg_rubberCycleMinDistanceGap; - if ( stopDistance > minDistanceGap ) - stopDistance = minDistanceGap; + // find correct gap factor. Normal... + REAL gapFactor = sg_rubberCycleMinDistanceGap; + if( sg_rubberCycleMinDistanceGapBackdoor > 0 && gapIsBackdoor_[gapIndex] ) + { + // or backdoor. + gapFactor = sg_rubberCycleMinDistanceGapBackdoor; + } + + if ( gapFactor > 0 ) + { + if( gapFactor > 1 ) + { + // larger that 1 gap factors just increase the minimal stop distance. + stopDistance *= gapFactor; + } + else + { + // apply gap factor to measured gap + REAL minDistanceGap = gap * gapFactor; + + // smaller then 1 gap factors are relative to the measured gap. + if ( stopDistance > minDistanceGap ) + { + stopDistance = minDistanceGap; + } + } + } } } } @@ -3323,6 +3449,7 @@ gap_[0] = gap_[1] = 1E+30; keepLookingForGap_[0] = keepLookingForGap_[1] = true; + gapIsBackdoor_[0] = gapIsBackdoor_[1] = true; // turn winding numbers int wn = windingNumberWrapped_; @@ -4139,6 +4266,7 @@ gap_[0] = gap_[1] = 1E+30; keepLookingForGap_[0] = keepLookingForGap_[1] = true; + gapIsBackdoor_[0] = gapIsBackdoor_[1] = true; alive_ = 1; Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -236,6 +236,7 @@ mutable REAL gap_[2]; //!< when driving towards a wall, this is set to the maximal distance we need to approach it so that when the cycle turns, it can squeeze through any gaps mutable bool keepLookingForGap_[2]; //!< flags telling the system whether it is worthwile to look for further, smaller, gaps + mutable bool gapIsBackdoor_[2]; //!< flags indicating whether gaps are backdoors eCoord lastTurnPos_; //!< the location of the last turn REAL lastTurnTimeRight_; //!< the time of the last turn right Modified: armagetronad/trunk/armagetronad/src/tron/gMenus.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gMenus.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gMenus.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -88,8 +88,8 @@ static tSettingItem< int > sg_consoleHistoryMaxSizeConf("HISTORY_SIZE_CONSOLE",sg_consoleHistoryMaxSize); class ArmageTron_feature_menuitem: public uMenuItemSelection<int>{ - void NewChoice(uSelectItem<bool> *){}; - void NewChoice(char *,bool ){}; + void NewChoice(uSelectItem<bool> *){} + void NewChoice(char *,bool ){} public: ArmageTron_feature_menuitem(uMenu *m,char const * tit,char const * help,int &targ) :uMenuItemSelection<int>(m,tit,help,targ){ @@ -107,13 +107,13 @@ rFEAT_ON); } - ~ArmageTron_feature_menuitem(){}; + ~ArmageTron_feature_menuitem(){} }; class ArmageTron_texmode_menuitem: public uMenuItemSelection<int>{ - void NewChoice(uSelectItem<bool> *){}; - void NewChoice(char *,bool ){}; + void NewChoice(uSelectItem<bool> *){} + void NewChoice(char *,bool ){} public: ArmageTron_texmode_menuitem(uMenu *m,char const * tit,int &targ, bool font=false) @@ -148,7 +148,7 @@ #endif } - ~ArmageTron_texmode_menuitem(){}; + ~ArmageTron_texmode_menuitem(){} }; static tConfItem<bool> ab("ALPHA_BLEND",sr_alphaBlend); @@ -793,7 +793,7 @@ m->RequestSpaceBelow(.2); } - ~ArmageTron_color_menuitem(){}; + ~ArmageTron_color_menuitem(){} virtual REAL SpaceRight(){return .2;} Modified: armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -73,7 +73,7 @@ gServerInfo():menuItem(NULL), show(true) { - }; + } virtual ~gServerInfo(); Modified: armagetronad/trunk/armagetronad/src/tron/gServerFavorites.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gServerFavorites.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gServerFavorites.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -85,7 +85,7 @@ , confAddress_( sg_ConfName( ID, prefix, "_ADDRESS"), address_ ) , confPort( sg_ConfName( ID, prefix, "_PORT"), port_ ) { - }; + } //! connects to the server void Connect() Modified: armagetronad/trunk/armagetronad/src/tron/gSpawn.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gSpawn.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gSpawn.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -40,7 +40,7 @@ public: gSpawnPoint(const eCoord &loc,const eCoord &dir); - ~gSpawnPoint(){}; + ~gSpawnPoint(){} //enters valid spawn eCoordinates and direction in loc and dir void Spawn(eCoord &loc,eCoord &dir); Modified: armagetronad/trunk/armagetronad/src/tron/gWall.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gWall.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/tron/gWall.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -2439,7 +2439,7 @@ // for other reasons if ( !IsDangerousApartFromHoles( a, time ) ) { - return false; + return NULL; } const gPlayerWallCoord* coord = &coords_(IndexAlpha(a)); Modified: armagetronad/trunk/armagetronad/src/ui/uInput.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uInput.cpp 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/ui/uInput.cpp 2011-07-10 18:22:34 UTC (rev 9551) @@ -278,7 +278,7 @@ class tConfItem_key:public tConfItemBase{ public: tConfItem_key():tConfItemBase("KEYBOARD"){} - ~tConfItem_key(){}; + ~tConfItem_key(){} // write the complete keymap virtual void WriteVal(std::ostream &s){ @@ -379,6 +379,7 @@ while (run){ if (run->ID() == id) return static_cast<uActionPlayer*>(run); + run = run->Next(); } return NULL; Modified: armagetronad/trunk/armagetronad/src/ui/uMenu.h =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uMenu.h 2011-07-10 10:07:54 UTC (rev 9550) +++ armagetronad/trunk/armagetronad/src/ui/uMenu.h 2011-07-10 18:22:34 UTC (rev 9551) @@ -149,7 +149,7 @@ friend class uMenu; int idnum; - uMenuItem(){}; + uMenuItem(){} protected: uMenu *menu; tOutput helpText; @@ -180,17 +180,17 @@ virtual tString Help(){return tString(helpText);} // displays the menuitem at position x,y. set selected to true // if the item is currently under the cursor - virtual void Render(REAL ,REAL ,REAL =1,bool =0){}; + virtual void Render(REAL ,REAL ,REAL =1,bool =0){} virtual void RenderBackground(){ menu->GenericBackground(); - }; + } // if the user presses left/right on menuitem - virtual void LeftRight(int ){}; //lr=-1:left lr=+1: right - virtual void LeftRightRelease(){}; + virtual void LeftRight(int ){} //lr=-1:left lr=+1: right + virtual void LeftRightRelease(){} - virtual void Enter(){}; // if the user presses enter/space on menu + virtual void Enter(){} // if the user presses enter/space on menu virtual bool Event(SDL_Event &){return false;} // if the key c is // pressed,mouse moved ... @@ -228,7 +228,7 @@ // if the item is currently under the cursor virtual void Render(REAL x,REAL y,REAL alpha=1,bool selected=0){ DisplayTextSpecial(x,y,tString(t),selected,alpha); - }; + } virtual void Enter(){menu->Exit();} // if the user presses enter/space on menu @@ -371,7 +371,7 @@ const tOutput &help,int &targ, int mi,int ma,int step=1); - ~uMenuItemInt(){}; + ~uMenuItemInt(){} virtual void LeftRight(int); @@ -398,7 +398,7 @@ const tOutput &help,REAL &targ, REAL mi,REAL ma,REAL step=1); - ~uMenuItemReal(){}; + ~uMenuItemReal(){} virtual void LeftRight(int); @@ -495,7 +495,7 @@ virtual void Render(REAL x,REAL y,REAL alpha=1,bool selected=0); //!< Renders the search suggestion if needed and calls uMenuItemString::Render() virtual void RenderBackground(){ menu->GenericBackground(menu->GetTop()); - }; + } }; // ***************************************************** @@ -597,7 +597,7 @@ Reload(); } - virtual ~uMenuItemFileSelection() {}; + virtual ~uMenuItemFileSelection() {} void SetDir( const char *dir ) { dir_ = dir; } void SetFileSpec( const char *fileSpec ) { fileSpec_ = fileSpec; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-19 08:30:16
|
Revision: 9559 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9559&view=rev Author: z-man Date: 2011-07-19 08:30:05 +0000 (Tue, 19 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9550 to 9557: ------------------------------------------------------------------------ r9557 | z-man | 2011-07-19 10:10:07 +0200 (Tue, 19 Jul 2011) | 2 lines refactoring so we can later easily upload non-tarballs ------------------------------------------------------------------------ r9556 | z-man | 2011-07-19 07:01:11 +0200 (Tue, 19 Jul 2011) | 2 lines Fixing autopackage build for non-default package names. ------------------------------------------------------------------------ r9555 | z-man | 2011-07-19 06:57:30 +0200 (Tue, 19 Jul 2011) | 2 lines Fixing build with recent gcc/glibc versions: hacking in -D=_GNU_SOURCE=1. It's already added by SDL on the client, so it probably doesn't hurt. ------------------------------------------------------------------------ r9554 | z-man | 2011-07-18 19:36:42 +0200 (Mon, 18 Jul 2011) | 2 lines Adding lp-project-upload for later customization. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9550&view=rev Modified Paths: -------------- armagetronad/trunk/build/package/Makefile armagetronad/trunk/build/package/default.apspec Added Paths: ----------- armagetronad/trunk/build/scripts/lp-upload Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9550 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9557 Modified: armagetronad/trunk/build/package/Makefile =================================================================== --- armagetronad/trunk/build/package/Makefile 2011-07-19 08:29:56 UTC (rev 9558) +++ armagetronad/trunk/build/package/Makefile 2011-07-19 08:30:05 UTC (rev 9559) @@ -39,9 +39,11 @@ COMMONSED=${STATICSED} ${XMLSED} -CLIENTSED=-e "s,-dedicated,,g" -e "s,Advanced Server,Advanced,g" -e "s,--disable-glout,," -e "s,^\#client_,," -e "s,--enable-initscripts,--disable-initscripts," -e "s,--enable-armathentication,," -SERVERSED= +CLIENTSED=-e "s,-dedicated,,g" -e "s,Advanced Server,Advanced,g" -e "s,--disable-glout,," -e "s,^\#client_,," -e "s,--enable-initscripts,--disable-initscripts," -e "s,--enable-armathentication,," \ +-e "s,ShortName:.*,ShortName: ${PACKAGE}," +SERVERSED= -e "s,ShortName:.*,ShortName: ${PACKAGE}-dedicated," + # regular server and client builds, static/dynamic linking of libxml as is best SED.client=$(CLIENTSED) $(COMMONSED) SED.server=$(SERVERSED) ${COMMONSED} Modified: armagetronad/trunk/build/package/default.apspec =================================================================== --- armagetronad/trunk/build/package/default.apspec 2011-07-19 08:29:56 UTC (rev 9558) +++ armagetronad/trunk/build/package/default.apspec 2011-07-19 08:30:05 UTC (rev 9559) @@ -10,7 +10,7 @@ Summary: Armagetron Advanced is a light cycle game. URL: http://www.armagetronad.net/ License: GNU General Public License, Version 2 -SoftwareVersion: CVS +SoftwareVersion: SVN_OR_BZR AutopackageTarget: 1.2 # Only uncomment InterfaceVersion if your package exposes interfaces to other software, @@ -38,7 +38,7 @@ # should be removed before building. export CPPFLAGS="-DDEFAULT_SDL_AUDIODRIVER=alsa" -APBUILD_STATIC="xml2 ZThread GLEW ftgl" DEBUGLEVEL=0 prepareBuild --src ../../armagetronad --disable-sysinstall --disable-restoreold --disable-desktop --disable-glout --enable-uninstall="package remove armagetronad-dedicated" --localstatedir=/var --enable-etc --enable-initscripts --enable-automakedefaults --enable-useradd --enable-armathentication +CPPFLAGS=-D_GNU_SOURCE=1 APBUILD_STATIC="xml2 ZThread GLEW ftgl" DEBUGLEVEL=0 prepareBuild --src ../../armagetronad --disable-sysinstall --disable-restoreold --disable-desktop --disable-glout --enable-uninstall="package remove armagetronad-dedicated" --localstatedir=/var --enable-etc --enable-initscripts --enable-automakedefaults --enable-useradd --enable-armathentication [BuildUnprepare] unprepareBuild Copied: armagetronad/trunk/build/scripts/lp-upload (from rev 9557, armagetronad/branches/0.2.8/build/scripts/lp-upload) =================================================================== --- armagetronad/trunk/build/scripts/lp-upload (rev 0) +++ armagetronad/trunk/build/scripts/lp-upload 2011-07-19 08:30:05 UTC (rev 9559) @@ -0,0 +1,131 @@ +#!/usr/bin/python + +# Copyright (c) 2009 Canonical Ltd. +# +# 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, or (at your option) any +# later version. +# +# lp-set-dup 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. + +# Authors: +# Martin Pitt <mar...@ub...>, based on +# http://blog.launchpad.net/api/recipe-for-uploading-files-via-the-api +# +# actually ripped from lp-project-upload. Modified as lp-upload for +# armagetronad by: +# Manuel Moos <z-...@us...> + +'''Upload a release tarball and builds to a Launchpad project.''' + +import sys, datetime, os.path, subprocess, tempfile, os + +from ubuntutools.lp.libsupport import get_launchpad +from launchpadlib.errors import HTTPError + +def create_release(project, version): + '''Create new release and milestone for LP project.''' + + print 'Release %s could not be found for project. Create it? (Y/n)' % version + answer = sys.stdin.readline().strip() + if answer.startswith('n'): + sys.exit(0) + if len(proj.series) != 1: + print >> sys.stderr, 'Does not support creating releases if more than one series exists.' + sys.exit(3) + release_date = datetime.date.today().strftime('%Y-%m-%d') + series = proj.series[0] + milestone = series.newMilestone(name=version, + date_targeted=release_date) + return milestone.createProductRelease(date_released=release_date) + +def edit_file(prefix, description): + (fd, f) = tempfile.mkstemp(prefix=prefix+'.') + os.write(fd, '\n\n#------\n# Please enter the %s here. Lines which start with "#" are ignored.\n' % + description) + os.close(fd) + subprocess.call(['sensible-editor', f]) + content = '' + for l in open(f): + if l.startswith('#'): + continue + content += l + + return content.strip() + +# +# main +# + +if len(sys.argv) < 4: + print >> sys.stderr, '''Upload a release tarball to a Launchpad project. + +Usage: %s <project name> <version> <tarball> <optional builds>''' % sys.argv[0] + sys.exit(1) + +(project, version, tarball) = sys.argv[1:] + +def prepare_file( filename ): + # Get the signature, if available. + signature = filename + '.asc' + if not os.path.exists(signature): + print 'Calling GPG to create ' + filename + ' signature...' + if subprocess.call(['gpg', '--armor', '--sign', '--detach-sig', filename]) != 0: + print >> sys.stderr, 'gpg failed, aborting' + +def upload_file( filename, description, mime_type, file_type ): + # Get the file contents. + file_content = open(filename, 'r').read() + + signature = filename + '.asc' + + if os.path.exists(signature): + signature_content = open(signature, 'r').read() + else: + signature_content = None + + # Create a new product release file. + release.add_file(filename=filename, description='release tarball', + file_content=file_content, content_type='appplication/x-gzip', + file_type='Code Release Tarball', signature_filename=signature, + signature_content=signature_content) + +try: + lp = get_launchpad('ubuntu-dev-tools') +except Exception, e: + print >> sys.stderr, 'Could not connect to Launchpad:', str(e) + sys.exit(2) + +try: + # Look up the project using the Launchpad instance. + proj = lp.projects[project] + # Find the release in the project's releases collection. + release = None + for rel in proj.releases: + if rel.version == version: + release = rel + break + if not release: + release = create_release(proj, version) + + prepare_file(tarball) + + changelog = edit_file('changelog', 'changelog') + if changelog: + release.changelog = changelog + release_notes = edit_file('releasenotes', 'release notes') + if release_notes: + release.release_notes = release_notes + + upload_file(tarball, 'release tarball','appplication/x-gzip', 'Code Release Tarball') + + release.lp_save() + +except HTTPError, e: + print 'An error happened in the upload:', e.content + sys.exit(1) + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-19 09:06:03
|
Revision: 9562 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9562&view=rev Author: z-man Date: 2011-07-19 09:05:57 +0000 (Tue, 19 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9557 to 9561: ------------------------------------------------------------------------ r9558 | bazaaarmagetron | 2011-07-19 10:29:56 +0200 (Tue, 19 Jul 2011) | 1 line Daniel Lee Harple: Only require one authenticated user to be in the set to be whitelisted as enemies from the same IP. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9557&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9557 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9561 Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-19 08:43:38 UTC (rev 9561) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-19 09:05:57 UTC (rev 9562) @@ -443,7 +443,7 @@ allow_enemies_same_ip_help If set to 1, this allows two players that apparently come from the same machine to fight for points with each other. allow_enemies_same_client_help If set to 1, this allows two players that play on the same client to fight for points with each other. -whitelist_enemies_username_help Allow a set of authenticated players to be enemies, even if they come from the same IP address. Usage: WHITELIST_ENEMIES_USERNAME <authenticated name1> <authenticated name2> ... +whitelist_enemies_username_help Allow players from the same IP address to be enemies if one of them is authenticated, and in this list. WHITELIST_ENEMIES_USERNAME <authenticated name1> <authenticated name2> ... whitelist_enemies_ip_help Allow any players from the specified IP address to be enemies. Usage: WHITELIST_ENEMIES_IP <ip1> ... whitelist_enemies_success Added \1 entries to the whitelist. Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-19 08:43:38 UTC (rev 9561) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-19 09:05:57 UTC (rev 9562) @@ -9121,7 +9121,8 @@ { return( HasEntry( ip_addresses_whitelist_, a->GetMachine().GetIP() ) || - ( HasEntry( usernames_whitelist_, a->GetLogName() ) && HasEntry( usernames_whitelist_, b->GetLogName() ) ) + HasEntry( usernames_whitelist_, a->GetLogName() ) || + HasEntry( usernames_whitelist_, b->GetLogName() ) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-19 09:56:00
|
Revision: 9565 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9565&view=rev Author: z-man Date: 2011-07-19 09:55:54 +0000 (Tue, 19 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9561 to 9563: ------------------------------------------------------------------------ r9563 | bazaaarmagetron | 2011-07-19 11:10:13 +0200 (Tue, 19 Jul 2011) | 17 lines author: Bazaarmagetron Automatic merging of commits that would change history order: ------------------------------------------------------------ revno: 1282.1.2 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Mon 2011-07-18 21:46:08 -0400 message: Added ENCODING ladderlog event. (switched to utf-8 here) ------------------------------------------------------------ revno: 1282.1.1 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Wed 2011-07-13 00:49:08 -0400 message: WHITELIST_ENEMIES_USERNAME requires authentication support to be enabled ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9561&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9561 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9563 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2011-07-19 09:24:33 UTC (rev 9564) +++ armagetronad/trunk/armagetronad/NEWS 2011-07-19 09:55:54 UTC (rev 9565) @@ -122,6 +122,8 @@ if they come from the same IP address and ALLOW_ENEMIES_SAME_IP is disabled (which is its default setting). - GAME_END, NEW_MATCH, and NEW_ROUND ladderlog events include date and time. +- Added ENCODING ladderlog event, which specifies the encoding for data in + ladderlog.txt. Changes since 0.2.8.3_rc4: ========================== Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-19 09:24:33 UTC (rev 9564) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-19 09:55:54 UTC (rev 9565) @@ -808,6 +808,7 @@ ladderlog_write_death_frag_help Write to ladderlog: DEATH_FRAG <prey> <predator> ladderlog_write_death_suicide_help Write to ladderlog: DEATH_SUICIDE <player> ladderlog_write_death_teamkill_help Write to ladderlog: DEATH_TEAMKILL <prey> <predator> +ladderlog_write_encoding_help Write to ladderlog: ENCODING <charset>. Specifies the encoding for data in ladderlog.txt. ladderlog_write_game_end_help Write to ladderlog: GAME_END <date and time> ladderlog_write_game_time_help Write to ladderlog: GAME_TIME <time> (see also: GAME_TIME_INTERVAL) ladderlog_write_match_winner_help Write to ladderlog: MATCH_WINNER <team> <players> Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-19 09:24:33 UTC (rev 9564) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-19 09:55:54 UTC (rev 9565) @@ -9171,11 +9171,12 @@ // Assumes both "a" and "b" are from the same IP address. bool CanBeEnemies( const ePlayerNetID * a, const ePlayerNetID * b ) const { - return( - HasEntry( ip_addresses_whitelist_, a->GetMachine().GetIP() ) || - HasEntry( usernames_whitelist_, a->GetLogName() ) || - HasEntry( usernames_whitelist_, b->GetLogName() ) - ); + bool enemies = HasEntry( ip_addresses_whitelist_, a->GetMachine().GetIP() ); +#ifdef KRAWALL_SERVER + enemies |= a->IsAuthenticated() && HasEntry( usernames_whitelist_, a->GetLogName() ); + enemies |= b->IsAuthenticated() && HasEntry( usernames_whitelist_, b->GetLogName() ); +#endif + return enemies; } void AddUsernames( std::istream & s ) @@ -9217,11 +9218,13 @@ static eEnemiesWhitelist se_enemiesWhitelist; +#ifdef KRAWALL_SERVER void se_WhiteListEnemiesUsername( std::istream & s ) { se_enemiesWhitelist.AddUsernames( s ); } static tConfItemFunc se_whiteListEnemiesUsernameConfItemFunc( "WHITELIST_ENEMIES_USERNAME", se_WhiteListEnemiesUsername ); +#endif void se_WhiteListEnemiesIP( std::istream & s ) { Modified: armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp 2011-07-19 09:24:33 UTC (rev 9564) +++ armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp 2011-07-19 09:55:54 UTC (rev 9565) @@ -762,6 +762,10 @@ sg_LanguageInit(); atexit(tLocale::Clear); + static eLadderLogWriter sg_encodingWriter( "ENCODING", true ); + sg_encodingWriter << "utf-8"; + sg_encodingWriter.write(); + if ( commandLine.Execute() ) { gCycle::PrivateSettings(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-20 08:24:44
|
Revision: 9573 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9573&view=rev Author: z-man Date: 2011-07-20 08:24:37 +0000 (Wed, 20 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9563 to 9572: ------------------------------------------------------------------------ r9572 | z-man | 2011-07-20 05:04:32 +0200 (Wed, 20 Jul 2011) | 2 lines Detecting common .deb files, helpful authorization failure error reminder. ------------------------------------------------------------------------ r9571 | z-man | 2011-07-20 04:48:46 +0200 (Wed, 20 Jul 2011) | 2 lines No redundant uploads. ------------------------------------------------------------------------ r9570 | z-man | 2011-07-20 04:26:02 +0200 (Wed, 20 Jul 2011) | 2 lines Adapting and using launchpad upload python script. ------------------------------------------------------------------------ r9569 | z-man | 2011-07-20 04:22:56 +0200 (Wed, 20 Jul 2011) | 2 lines Updated to the state of the branch. ------------------------------------------------------------------------ r9568 | z-man | 2011-07-19 15:07:50 +0200 (Tue, 19 Jul 2011) | 2 lines Updating what I can build. ------------------------------------------------------------------------ r9567 | z-man | 2011-07-19 15:07:35 +0200 (Tue, 19 Jul 2011) | 2 lines Disabling uninstaller, debian takes care of it. ------------------------------------------------------------------------ r9566 | z-man | 2011-07-19 14:09:41 +0200 (Tue, 19 Jul 2011) | 2 lines Fixing uninstall script generation recursion if DESTDIR is set at configure time. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9563&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/batch/make/uninstall armagetronad/trunk/build/WorkMakefile armagetronad/trunk/build/debian/rules armagetronad/trunk/build/doc/releasenotes.txt armagetronad/trunk/build/make.conf.template armagetronad/trunk/build/scripts/lp-upload Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9563 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9572 Modified: armagetronad/trunk/armagetronad/batch/make/uninstall =================================================================== --- armagetronad/trunk/armagetronad/batch/make/uninstall 2011-07-20 03:04:32 UTC (rev 9572) +++ armagetronad/trunk/armagetronad/batch/make/uninstall 2011-07-20 08:24:37 UTC (rev 9573) @@ -41,12 +41,12 @@ DEST=$(pwd)/.foruninstall # test for recursion -if echo ${DESTDIR} | grep ${DEST}; then +if echo ${DESTDIR} | grep "\.foruninstall$"; then echo "Recursion detected, aborting." exit 0 fi -if DESTDIR=${DEST} ${MAKE} install > /dev/null; then +if ${MAKE} DESTDIR=${DEST} install > /dev/null; then echo "Success!" else echo "Failure :(" Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-07-20 03:04:32 UTC (rev 9572) +++ armagetronad/trunk/build/WorkMakefile 2011-07-20 08:24:37 UTC (rev 9573) @@ -13,7 +13,7 @@ include IncludesMakefile3 # everything z-man can build at home and work -z-man-home: tarsource zipsource webdoc windoc autopackage ubuntu-hardy +z-man-home: tarsource zipsource webdoc windoc autopackage ubuntu-lucid z-man-work: autopackage-legacyserver autopackage-client # other builders are invited to add their build sets. @@ -336,7 +336,7 @@ # * build debian package * # ***************************************** # - cd $<; debian/rules binary + cd $<; fakeroot debian/rules binary deb: debianbuild $(UPLOAD)/.tag # @@ -406,7 +406,7 @@ # * uploading ubuntu source to ppa * # *********************************** # - cd $(RCDIR) && dput ${PACKAGE}_${DEBVERSION}$*_source.changes + cd $(RCDIR) && dput ppa:armagetronad-dev/ppa ${PACKAGE}_${DEBVERSION}$*_source.changes #real targets for the user upload-ubuntu: xupload-ubuntu-$(RC) @@ -431,15 +431,25 @@ rm -rf ap-$* touch $@ -upload: $(UPLOAD)/.tag +upload-lp: $(SOURCEDIR)/.tag $(UPLOAD)/.tag # # ***************************************** + # * uploading compiled files to lp * + # ***************************************** + # + cp doc/releasenotes.txt $(UPLOAD)/ + cp $(SOURCEDIR)/ChangeLog $(UPLOAD)/ + cd ${UPLOAD}; ../../../../scripts/lp-upload armagetronad "$(SERIES)" "$(VERSION)" *.gz *.bz2 *.zip *.deb *.package *.rpm + +upload-sf: $(UPLOAD)/.tag + # + # ***************************************** # * uploading compiled files to sf * # ***************************************** # cp doc/releasenotes.txt $(UPLOAD)/ - unix2dos $(UPLOAD)/releasenotes.txt + todos $(UPLOAD)/releasenotes.txt cd ${UPLOAD}; mkdir -p new/$(VERSION); rsync -avP -e ssh new z-man,arm...@fr...:/home/frs/project/a/ar/armagetronad/; rmdir new/$(VERSION); rmdir new; rsync -avP -e ssh * z-man,arm...@fr...:/home/frs/project/a/ar/armagetronad/new/$(VERSION)/ TOEMPTYLINE=sed -e "s,^$$,," -e "t q" -e "p" -e "d" -e ": q" -e "q" Modified: armagetronad/trunk/build/debian/rules =================================================================== --- armagetronad/trunk/build/debian/rules 2011-07-20 03:04:32 UTC (rev 9572) +++ armagetronad/trunk/build/debian/rules 2011-07-20 08:24:37 UTC (rev 9573) @@ -51,14 +51,14 @@ configure-stamp.client: dh_testdir mkdir client - cd client && sh ../configure $(confflags) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --enable-glout + cd client && sh ../configure $(confflags) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --enable-glout --disable-uninstall cd client && perl -pi -e 's/\s-lpng\b//; s/\s-lz\b//' `find -name Makefile` touch $@ configure-stamp.server: dh_testdir mkdir server - cd server && sh ../configure $(confflags) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --disable-glout + cd server && sh ../configure $(confflags) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --disable-glout --disable-uninstall cd server && perl -pi -e 's/\s-lpng\b//; s/\s-lz\b//' `find -name Makefile` touch $@ Modified: armagetronad/trunk/build/doc/releasenotes.txt =================================================================== --- armagetronad/trunk/build/doc/releasenotes.txt 2011-07-20 03:04:32 UTC (rev 9572) +++ armagetronad/trunk/build/doc/releasenotes.txt 2011-07-20 08:24:37 UTC (rev 9573) @@ -1,6 +1,4 @@ -This is a release candidate for Armagetron Advanced 0.2.8.3, which -is planned to be our final release in the 0.2.8 and 0.2 series, apart -from bugfixes and security updates, of course. 0.2.8.3 rounds the -features of the 0.2 development series off with additions like the -new authentication system for players, rendering performance improvements -and better team management in the game. \ No newline at end of file +This is a random build from the current development state of the 0.2.8 +branch that last produced release 0.2.8.3. Maybe it leads to a 0.2.9 +release, but probably the first stable version containing these +minor new features here will be 0.4. Modified: armagetronad/trunk/build/make.conf.template =================================================================== --- armagetronad/trunk/build/make.conf.template 2011-07-20 03:04:32 UTC (rev 9572) +++ armagetronad/trunk/build/make.conf.template 2011-07-20 08:24:37 UTC (rev 9573) @@ -7,6 +7,9 @@ #prefix to install the program to PREFIX=/usr/local +# Launchpad series +SERIES=0.2.8 + # RPM build root #RPMBUILDROOT="%{_tmppath}/%{name}-%{version}-root" Modified: armagetronad/trunk/build/scripts/lp-upload =================================================================== --- armagetronad/trunk/build/scripts/lp-upload 2011-07-20 03:04:32 UTC (rev 9572) +++ armagetronad/trunk/build/scripts/lp-upload 2011-07-20 08:24:37 UTC (rev 9573) @@ -27,18 +27,20 @@ from ubuntutools.lp.libsupport import get_launchpad from launchpadlib.errors import HTTPError -def create_release(project, version): +def create_release(project, series_name, version): '''Create new release and milestone for LP project.''' - print 'Release %s could not be found for project. Create it? (Y/n)' % version - answer = sys.stdin.readline().strip() - if answer.startswith('n'): - sys.exit(0) - if len(proj.series) != 1: - print >> sys.stderr, 'Does not support creating releases if more than one series exists.' + series = None + for ser in proj.series: + if ser.display_name == series_name: + series = ser + break + if not series: + print >> sys.stderr, 'Series %s not found, available:' % series_name + for s in proj.series.entries: + print '%s: %s' % (s['display_name'], s['summary']) sys.exit(3) release_date = datetime.date.today().strftime('%Y-%m-%d') - series = proj.series[0] milestone = series.newMilestone(name=version, date_targeted=release_date) return milestone.createProductRelease(date_released=release_date) @@ -62,12 +64,15 @@ # if len(sys.argv) < 4: - print >> sys.stderr, '''Upload a release tarball to a Launchpad project. + print >> sys.stderr, '''Upload a release to a Launchpad project. -Usage: %s <project name> <version> <tarball> <optional builds>''' % sys.argv[0] +Usage: %s <project name> <series> <version> <builds>''' % sys.argv[0] sys.exit(1) -(project, version, tarball) = sys.argv[1:] +(project, series, version) = sys.argv[1:4] +version=version.replace('_','-') +builds = sys.argv[4:] +#print builds def prepare_file( filename ): # Get the signature, if available. @@ -80,27 +85,83 @@ def upload_file( filename, description, mime_type, file_type ): # Get the file contents. file_content = open(filename, 'r').read() + print "adding %s: %s, %s, %s..." % (filename, file_type, description, mime_type) + for f in release.files: + if filename == os.path.split(f.self_link)[-1]: + print "Already exists, delete it from %s first if you want to re-upload it." % release.self_link + return + signature = filename + '.asc' - + if os.path.exists(signature): signature_content = open(signature, 'r').read() else: signature_content = None - + # Create a new product release file. - release.add_file(filename=filename, description='release tarball', - file_content=file_content, content_type='appplication/x-gzip', - file_type='Code Release Tarball', signature_filename=signature, + release.add_file(filename=filename, description=description, + file_content=file_content, content_type=mime_type, + file_type=file_type, signature_filename=signature, signature_content=signature_content) + + print "done." try: lp = get_launchpad('ubuntu-dev-tools') except Exception, e: print >> sys.stderr, 'Could not connect to Launchpad:', str(e) + print >> sys.stderr, 'use "manage-credentials create -c ubuntu-dev-tools --level 2" to authorize this application, maybe clear out ~/.cache/lp_credentials.' sys.exit(2) try: + uploads=[] + for f in builds: + if os.path.exists(f): + prepare_file(f) + basename, extension = os.path.splitext(f) + basename, secondextension = os.path.splitext(basename) + basename, thirdextension = os.path.splitext(basename) + # print basename, thirdextension, secondextension, extension + + # default types + mime_type="application/octet-stream" + file_type="Installer file" + description="Unknown" + + if secondextension == ".src" or thirdextension == ".src": + file_type="Code Release Tarball" + description="Source Tarball" + if extension == '.bz2': + mime_type="application/bzip2" + if extension == '.gz': + mime_type="application/x-gzip" + if extension == '.zip': + mime_type="application/zip" + description="Source zip for Windows builds" + else: + if extension == ".package": + description="Autopackage Installer for Linux" + if extension == ".deb": + description="Debian Package" + if extension == ".dmg": + description="OSX Disk Image" + mime_type="application/x-apple-diskimage" + if extension == ".exe": + description="Windows Installer" + mime_type="application/exe" + if "dedicated" in f: + description="Server " + description + else: + if "-common" in f and extension == ".deb": + description="Common " + description + else: + description="Client " + description + + #print f,description,mime_type,file_type + + uploads.append((f,description,mime_type,file_type)) + # Look up the project using the Launchpad instance. proj = lp.projects[project] # Find the release in the project's releases collection. @@ -108,21 +169,35 @@ for rel in proj.releases: if rel.version == version: release = rel + print "Found release %s already existing." % version break if not release: - release = create_release(proj, version) + print "Creating release %s..." % version + release = create_release(proj, series, version) + + print "Setting changelog..." + changelog = "ChangeLog" + if os.path.exists(changelog): + release.changelog = open(changelog, 'r').read().strip() + else: + changelog = edit_file('changelog', 'changelog') + if changelog: + release.changelog = changelog + + print "Setting release notes..." + release_notes = "releasenotes.txt" + if os.path.exists(release_notes): + release.release_notes = open(release_notes, 'r').read().strip() + else: + release_notes = edit_file('releasenotes', 'release notes') + if release_notes: + release.release_notes = release_notes - prepare_file(tarball) + print "Uploading..." + for upload in uploads: + upload_file(upload[0], upload[1], upload[2], upload[3]) + # upload_file(tarball, 'release tarball','appplication/x-gzip', 'Code Release Tarball') - changelog = edit_file('changelog', 'changelog') - if changelog: - release.changelog = changelog - release_notes = edit_file('releasenotes', 'release notes') - if release_notes: - release.release_notes = release_notes - - upload_file(tarball, 'release tarball','appplication/x-gzip', 'Code Release Tarball') - release.lp_save() except HTTPError, e: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-20 10:54:19
|
Revision: 9576 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9576&view=rev Author: z-man Date: 2011-07-20 10:54:13 +0000 (Wed, 20 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9572 to 9575: ------------------------------------------------------------------------ r9574 | z-man | 2011-07-20 12:31:49 +0200 (Wed, 20 Jul 2011) | 2 lines Made compatible with make -j. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9572&view=rev Modified Paths: -------------- armagetronad/trunk/build/WorkMakefile Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9572 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9575 Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-07-20 10:42:10 UTC (rev 9575) +++ armagetronad/trunk/build/WorkMakefile 2011-07-20 10:54:13 UTC (rev 9576) @@ -114,11 +114,11 @@ # ${TESTVERSION} rm -f $@ - mkdir -p tarballs/unpack - rm -rf tarballs/unpack/* - cd tarballs/unpack && tar -xf ../$(PACKAGE)-$(VERSION).src.tar - cd tarballs/unpack && tar -czf ../$(PACKAGE)-$(VERSION).src.tar.gz * - rm -rf tarballs/unpack + mkdir -p tarballs/unpack2 + rm -rf tarballs/unpack2/* + cd tarballs/unpack2 && tar -xf ../$(PACKAGE)-$(VERSION).src.tar + cd tarballs/unpack2 && tar -czf ../$(PACKAGE)-$(VERSION).src.tar.gz * + rm -rf tarballs/unpack2 mv tarballs/$(PACKAGE)-$(VERSION).src.tar.gz $@ test -r $@ touch $@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-20 12:49:56
|
Revision: 9579 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9579&view=rev Author: z-man Date: 2011-07-20 12:49:45 +0000 (Wed, 20 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9575 to 9578: ------------------------------------------------------------------------ r9578 | z-man | 2011-07-20 14:37:57 +0200 (Wed, 20 Jul 2011) | 2 lines Patching uninstaller out of ubuntu build. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9575&view=rev Modified Paths: -------------- armagetronad/trunk/build/WorkMakefile Added Paths: ----------- armagetronad/trunk/build/patches/ armagetronad/trunk/build/patches/ubuntu.patch Removed Paths: ------------- armagetronad/trunk/build/patches/ubuntu.patch Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9575 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9578 Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-07-20 12:37:57 UTC (rev 9578) +++ armagetronad/trunk/build/WorkMakefile 2011-07-20 12:49:45 UTC (rev 9579) @@ -363,6 +363,7 @@ # adapt the following line as ubuntu releases get updated bzr pull -d ../ubuntu || bzr branch lp:ubuntu/armagetronad ../ubuntu cp -ax ../ubuntu/debian $(UBUNTUSOURCEDIR)$*/debian + patch -p0 -d $(UBUNTUSOURCEDIR)$* < patches/ubuntu.patch # rebrand package # for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\./armagetronad./g" > $(UBUNTUSOURCEDIR)/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\.net/armagetronad.net/g" > $(UBUNTUSOURCEDIR)$*/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done Deleted: armagetronad/trunk/build/patches/ubuntu.patch =================================================================== --- armagetronad/branches/0.2.8/build/patches/ubuntu.patch 2011-07-20 12:37:57 UTC (rev 9578) +++ armagetronad/trunk/build/patches/ubuntu.patch 2011-07-20 12:49:45 UTC (rev 9579) @@ -1,13 +0,0 @@ -=== modified file 'debian/rules' ---- debian/rules 2009-11-27 12:17:04 +0000 -+++ debian/rules 2011-07-20 12:30:54 +0000 -@@ -33,7 +33,7 @@ - endif - - # Special options to ./configure for client and server builds. --SHARED_OPTS := --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --sysconfdir=/etc --disable-etc --datadir=/usr/share --disable-games --bindir=/usr/games --enable-binreloc CXXFLAGS="$(CFLAGS)" CFLAGS="$(CFLAGS)" -+SHARED_OPTS := --disable-uninstall --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --sysconfdir=/etc --disable-etc --datadir=/usr/share --disable-games --bindir=/usr/games --enable-binreloc CXXFLAGS="$(CFLAGS)" CFLAGS="$(CFLAGS)" - SERVER_OPTS := --disable-glout --disable-useradd --disable-init - CLIENT_OPTS := --enable-glout - - Copied: armagetronad/trunk/build/patches/ubuntu.patch (from rev 9578, armagetronad/branches/0.2.8/build/patches/ubuntu.patch) =================================================================== --- armagetronad/trunk/build/patches/ubuntu.patch (rev 0) +++ armagetronad/trunk/build/patches/ubuntu.patch 2011-07-20 12:49:45 UTC (rev 9579) @@ -0,0 +1,13 @@ +=== modified file 'debian/rules' +--- debian/rules 2009-11-27 12:17:04 +0000 ++++ debian/rules 2011-07-20 12:30:54 +0000 +@@ -33,7 +33,7 @@ + endif + + # Special options to ./configure for client and server builds. +-SHARED_OPTS := --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --sysconfdir=/etc --disable-etc --datadir=/usr/share --disable-games --bindir=/usr/games --enable-binreloc CXXFLAGS="$(CFLAGS)" CFLAGS="$(CFLAGS)" ++SHARED_OPTS := --disable-uninstall --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --sysconfdir=/etc --disable-etc --datadir=/usr/share --disable-games --bindir=/usr/games --enable-binreloc CXXFLAGS="$(CFLAGS)" CFLAGS="$(CFLAGS)" + SERVER_OPTS := --disable-glout --disable-useradd --disable-init + CLIENT_OPTS := --enable-glout + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-20 14:11:08
|
Revision: 9581 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9581&view=rev Author: z-man Date: 2011-07-20 14:10:58 +0000 (Wed, 20 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9578 to 9580: ------------------------------------------------------------------------ r9580 | z-man | 2011-07-20 15:46:10 +0200 (Wed, 20 Jul 2011) | 2 lines Removing indirect dependencies. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9578&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/configure.ac Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9578 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9580 Modified: armagetronad/trunk/armagetronad/configure.ac =================================================================== --- armagetronad/trunk/armagetronad/configure.ac 2011-07-20 13:46:10 UTC (rev 9580) +++ armagetronad/trunk/armagetronad/configure.ac 2011-07-20 14:10:58 UTC (rev 9581) @@ -966,8 +966,8 @@ AC_LANG([C]) -AC_CHECK_LIB(z, gzread,, -AC_MSG_ERROR([You need libz to compile ${progtitle}.])) +dnl AC_CHECK_LIB(z, gzread,, +dnl AC_MSG_ERROR([You need libz to compile ${progtitle}.])) AC_MSG_CHECKING(whether libpng is installed) if PNGLIBS=`libpng-config --libs`; then @@ -981,11 +981,11 @@ , AC_MSG_ERROR([You need libpng to compile ${progtitle}.])) -AC_CHECK_LIB(jpeg, jpeg_read_header,, - AC_MSG_WARN([ - libjpeg not found. Expect small graphical errors ( missing moviepack title screen ).] - ) -) +dnl AC_CHECK_LIB(jpeg, jpeg_read_header,, +dnl AC_MSG_WARN([ +dnl libjpeg not found. Expect small graphical errors ( missing moviepack title screen ).] +dnl ) +dnl ) AC_CHECK_LIB(SDL_image, IMG_Load,, dnl AC_CHECK_LIB(IMG, main,, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-20 21:50:54
|
Revision: 9585 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9585&view=rev Author: z-man Date: 2011-07-20 21:50:48 +0000 (Wed, 20 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9581 to 9584: ------------------------------------------------------------------------ r9584 | z-man | 2011-07-20 23:48:47 +0200 (Wed, 20 Jul 2011) | 2 lines Splitting lines to avoid merge hell ------------------------------------------------------------------------ r9583 | z-man | 2011-07-20 21:47:48 +0200 (Wed, 20 Jul 2011) | 2 lines Adding upload-ubuntu-all target to upload packets for all current releases into the ppa. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9581&view=rev Modified Paths: -------------- armagetronad/trunk/build/WorkMakefile Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9581 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9584 Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-07-20 21:48:47 UTC (rev 9584) +++ armagetronad/trunk/build/WorkMakefile 2011-07-20 21:50:48 UTC (rev 9585) @@ -414,6 +414,13 @@ echo $@ upload-ubuntu-%: xupload-ubuntu-$(RC)~% echo $@ +upload-ubuntu-all: \ +upload-ubuntu-hardy \ +upload-ubuntu-lucid \ +upload-ubuntu-maverick \ +upload-ubuntu-natty \ +upload-ubuntu-oneiric + echo $@ APFILE=$(RCDIR)/.package autopackage-client: $(APFILE).client This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-21 14:17:54
|
Revision: 9589 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9589&view=rev Author: z-man Date: 2011-07-21 14:17:48 +0000 (Thu, 21 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9584 to 9588: ------------------------------------------------------------------------ r9588 | bazaaarmagetron | 2011-07-21 16:12:39 +0200 (Thu, 21 Jul 2011) | 2 lines Manuel Moos: Merging forgotten -O0 intermediate compile speed optimization. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9584&view=rev Modified Paths: -------------- armagetronad/trunk/build/WorkMakefile armagetronad/trunk/build/scripts/copysrc Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9584 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9588 Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-07-21 14:12:39 UTC (rev 9588) +++ armagetronad/trunk/build/WorkMakefile 2011-07-21 14:17:48 UTC (rev 9589) @@ -250,7 +250,7 @@ mkdir $@ # configure and make documentation - CXXFLAGS=$(CXXFLAGS) docstyle=$* bash scripts/configure $@ $(SOURCEDIR) --prefix='/usr/local' --disable-glout + CXXFLAGS="$(CXXFLAGS) -O0" docstyle=$* bash scripts/configure $@ $(SOURCEDIR) --prefix='/usr/local' --disable-glout $(RCDIR)/doc.%: $(RCDIR)/doc.%.build # Modified: armagetronad/trunk/build/scripts/copysrc =================================================================== --- armagetronad/trunk/build/scripts/copysrc 2011-07-21 14:12:39 UTC (rev 9588) +++ armagetronad/trunk/build/scripts/copysrc 2011-07-21 14:17:48 UTC (rev 9589) @@ -40,7 +40,7 @@ rm -rf armagetronad-* rm -rf ${PACKAGE}-* rm -f *.tar.* -test -r config.h || progname="${PACKAGE}" progtitle="${PROGNAME}" docstyle=web $CWD/$AA_SOURCE/configure --prefix=/usr/local --disable-glout --enable-automakedefaults --disable-useradd --disable-etc --disable-initscripts || exit -1 +test -r config.h || progname="${PACKAGE}" progtitle="${PROGNAME}" CXXFLAGS="-O0" docstyle=web $CWD/$AA_SOURCE/configure --prefix=/usr/local --disable-glout --enable-automakedefaults --disable-useradd --disable-etc --disable-initscripts || exit -1 ${MAKE} distprep || exit -1 # call some idle makes to update includes and do stuff This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-21 16:06:54
|
Revision: 9591 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9591&view=rev Author: z-man Date: 2011-07-21 16:06:48 +0000 (Thu, 21 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9588 to 9590: ------------------------------------------------------------------------ r9590 | bazaaarmagetron | 2011-07-21 17:51:36 +0200 (Thu, 21 Jul 2011) | 5 lines author: Manuel Moos Merging two pure security fixes from ladle defense branch: Manuel Moos 2011-03-27 Don't process server ping responses in server mode. Unless you're the master server, of course. Manuel Moos 2011-03-26 Previenting crash when receiving a message with descriptor ID 399 with DEBUG enabled. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9588&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9588 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9590 Modified: armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp 2011-07-21 15:51:36 UTC (rev 9590) +++ armagetronad/trunk/armagetronad/src/network/nPriorizing.cpp 2011-07-21 16:06:48 UTC (rev 9591) @@ -440,7 +440,11 @@ #ifdef DEBUG_X -static nDescriptor testDescriptor( 399, NULL, NULL, "test" ); +static void test_handler( nMessage & m ) +{ +} + +static nDescriptor testDescriptor( 399, test_handler, "test" ); //static nDescriptor testDescriptor( 399, NULL, NULL, "test" ); #include "nNetObject.h" Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-21 15:51:36 UTC (rev 9590) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-21 16:06:48 UTC (rev 9591) @@ -1062,6 +1062,9 @@ void nServerInfo::GetSmallServerInfo( Network::SmallServerInfo const & info, nSenderInfo const & sender ) { + if ( !sn_IsMaster && sn_GetNetState() == nSERVER ) + return; + nServerInfoBase baseInfo; baseInfo.ReadSync( info.base(), sender ); @@ -1313,6 +1316,9 @@ void nServerInfo::GetBigServerInfo( Network::BigServerInfo const & info, nSenderInfo const & sender ) { + if ( !sn_IsMaster && sn_GetNetState() == nSERVER ) + return; + GetBigServerInfoCommon( info, sender ); } @@ -1374,7 +1380,7 @@ void nServerInfo::GetBigServerInfoMaster( Network::BigServerInfo const & info, nSenderInfo const & sender ) { - if ( sn_GetNetState() == nSERVER && FloodProtection( sender.SenderID() ) ) + if ( sn_GetNetState() == nSERVER ) return; nServerInfo *server = GetBigServerInfoCommon( info, sender ); @@ -1388,10 +1394,10 @@ void nServerInfo::GiveBigServerInfoMaster( Network::RequestBigServerInfoMaster const & info, nSenderInfo const & sender ) { - if ( FloodProtection( sender.SenderID() ) ) + if ( !sn_IsMaster ) return; - if ( !sn_IsMaster ) + if ( FloodProtection( sender.SenderID() ) ) return; // read info of desired server from message This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-21 20:32:17
|
Revision: 9594 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9594&view=rev Author: z-man Date: 2011-07-21 20:32:10 +0000 (Thu, 21 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9590 to 9592: ------------------------------------------------------------------------ r9592 | bazaaarmagetron | 2011-07-21 18:08:18 +0200 (Thu, 21 Jul 2011) | 2 lines Manuel Moos: Merging first turtle mode and syn cookie implementation. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9590&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.h armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp armagetronad/trunk/armagetronad/src/tools/tConsole.cpp armagetronad/trunk/armagetronad/src/tools/tConsole.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9590 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9592 Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2011-07-21 20:32:10 UTC (rev 9594) @@ -238,6 +238,8 @@ PING_FLOOD_TIME_50 20.0 # Minimum time for 50 ping packets to arrive. PING_FLOOD_TIME_100 100.0 # Minimum time for 100 ping packets to arrive. PING_FLOOD_GLOBAL .1 # The same times, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. +CONNECTION_FLOOD_SENSITIVITY .1 # The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection. +CONNECTION_LIMIT 100 # Maximum number of packets from unknown peers to handle at one # default settings for MOVE/KICK(_TO) Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-21 20:32:10 UTC (rev 9594) @@ -399,6 +399,8 @@ ping_flood_time_50_help Minimum time for 50 ping packets from one machine to arrive. ping_flood_time_100_help Minimum time for 100 ping packets from one machine to arrive. ping_flood_global_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. +connection_flood_sensitivity_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection. +connection_limit_help Maximum number of packets from unknown peers to handle at one shuffle_spam_messages_per_round_help Per round, per player limit on the number of shuffle messages displayed. A negative or zero value disables this check. spam_protection_repeat_help Minimum time between identical chat messages. @@ -1290,7 +1292,16 @@ #******************************************** #******************************************** +#******************************************** +#******************************************** +# +# console +# +#******************************************** +#******************************************** +console_repetition (\1 times)\n + #******************************************** #******************************************** # Modified: armagetronad/trunk/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-21 20:32:10 UTC (rev 9594) @@ -89,6 +89,8 @@ max_simulate_ahead_help UNDOCUMENTED predict_walls UNDOCUMENTED +force_turtle_mode_help Forces turtle mode, usually only active while a server is under attack. For testing only. + #************************************* #************************************* # Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 20:32:10 UTC (rev 9594) @@ -831,15 +831,101 @@ static void handleDefault( nMessage & m ) {} +// random offset +static int sn_GetRandomOffset() +{ + static tReproducibleRandomizer rand; + return rand.Get(0x7fffffff); +} + static void handleDefaultProtoBuf( Network::Dummy const & pb, nSenderInfo const & sender ) {} +// syn cookie +static int sn_SynTimestamp() +{ + static int offset = sn_GetRandomOffset(); + + return offset + tSysTimeFloat()/16; +} + +// a cookie consists of two shorts, each transmitted as MessageID +// of two consecutive fake login accept packets. They'll be sent back +// to the server inside ONE ack message by a real, non-spoofed client. +struct nCookie +{ + unsigned short first; + unsigned short second; + + nCookie(): first(0), second(0){} +}; + +static void sn_SynGenerateCookie(int stamp, nAddress const & sender, nCookie & ret) +{ + // just some random modulus. + static const unsigned int modulo = 0x7f71fa35; + stamp %= modulo; + + // calculate just some random checksum. Doesn't need to be any good, + // we can change it any time should someone be able to predict it. + int checksum = stamp; + int mul = ( stamp & 0x7fff ) + 3; + sockaddr const * sock = sender; + for(int i = sender.GetAddressLength()-1; i >= 0; --i ) + { + ++mul; + checksum += (checksum >> 16) * mul; + checksum += reinterpret_cast< char const * >( sock )[i]; + checksum %= modulo; + } + + // message IDs must not be 0, so we need to add a 1 offset and can't + // do the usual &0xffff / >>16 split. + ret.first = ( checksum % 0xfffe ) + 1; + ret.second = (checksum + 1 - ret.first)/0xfffe + 1; +} + +static void sn_SynGenerateCookie(int stamp, nSenderInfo const & sender, nCookie & ret) +{ + sn_SynGenerateCookie( stamp, peers[sender.SenderID()], ret ); +} + + +// ************************************************************* + + static nStreamDescriptor s_DefaultDescriptor( 0, handleDefault, "default" ); static nProtoBufDescriptor< Network::Dummy > s_DefaultProtoBufDescriptor( 0, handleDefaultProtoBuf ); // protobuf ack packets void sn_AckHandler( Network::Ack const & ack, nSenderInfo const & sender ) { + if( sender.SenderID() == MAXCLIENTS+1 ) + { + // check for syn cookie response + nCookie cookie; + if(ack.ack_ids_size() != 2) + { + return; + } + + cookie.first = ack.ack_ids(0); + cookie.second = ack.ack_ids(1); + + int stamp = sn_SynTimestamp(); + for(int offset=0; offset >= -1; --offset) + { + nCookie correct; + sn_SynGenerateCookie( stamp+offset, sender, correct ); + if( correct.first == cookie.first && correct.second == cookie.second ) + { + nMachine::GetMachine( sender.SenderID() ).Validate(); + } + } + + return; + } + for( int i = ack.ack_ids_size() - 1; i >= 0; --i ) { sn_Connections[sender.SenderID()].AckReceived(); @@ -848,7 +934,7 @@ } } -static nProtoBufDescriptor< Network::Ack > sn_ackDescriptor( 1, sn_AckHandler ); +static nProtoBufDescriptor< Network::Ack > sn_ackDescriptor( 1, sn_AckHandler, true ); // send ack message for received packets static void sn_SendAcks( int peer, bool immediately ) @@ -1306,9 +1392,15 @@ static void sn_LoginAcceptedHandler( Network::LoginAccepted const & accepted, nSenderInfo const & sender ) { // accepted.PrintDebugString(); - if ( sn_GetNetState() != nSERVER && sender.SenderID() == 0 ) { + + if(!accepted.has_net_id()) + { + // fake login accept sent only for cookie ack response. ignore. + return; + } + unsigned short id = accepted.net_id(); sn_Connections[0].diffCompression = accepted.options().diff_compression(); @@ -1510,6 +1602,47 @@ // the network stuff planned to send: tHeap<planned_send> send_queue[MAXCLIENTS+2]; +// defined in nServerInfo.cpp +extern bool FloodProtection( nMachine & machine, REAL timeFactor=1.0 ); + +// time factor for incoming connections, lower makes turtle mode kick in later +static REAL sn_minConnectionTimeGlobalFactor = 0.1; +static tSettingItem< REAL > sn_minPingTimeGlobal( "CONNECTION_FLOOD_SENSITIVITY", sn_minConnectionTimeGlobalFactor ); + +// enforce turtle mode +static bool sn_forceTurtleMode = false; +static tSettingItem< bool > sn_forceTurtleModeConf( "FORCE_TURTLE_MODE", sn_forceTurtleMode ); + +// number of packets from unknown sources to process each call to rec_peer +static int sn_connectionLimit = 100; +static tSettingItem< int > sn_connectionLimitConf( "CONNECTION_LIMIT", sn_connectionLimit ); + + +// checks for global flood events +static bool GlobalConnectionFloodProtection() +{ + static nMachine server; + + return sn_minConnectionTimeGlobalFactor > 0 && FloodProtection( server, sn_minConnectionTimeGlobalFactor ); +} + +// true while we're turtling from a flood +static bool sn_turtleMode = false; + +// report login failure. Or don't if we're flooded. +void sn_ReportFailure(int id, char const * reason) +{ + if( !sn_turtleMode ) + { + sn_DisconnectUser(id, reason); + } +} + +void sn_ReportFailure(nSenderInfo const & sender, char const * reason) +{ + sn_ReportFailure( sender.SenderID(), reason ); +} + void sn_LoginHandler_intermediate( nMessage &m ) { Network::Login login; @@ -1595,16 +1728,14 @@ con << tOutput( "$network_ban", machine.GetIP() , int(banned/60), reason.Len() > 1 ? reason : tOutput( "$network_ban_noreason" ) ); sn_DisconnectUser(sender.SenderID(), tOutput( "$network_kill_banned", int(banned/60), reason ) ); + + return; } // ignore multiple logins if( CountSameConnection( sender.SenderID() ) > 0 ) return; - // ignore login floods - if ( FloodProtection( sender.SenderID() ) ) - return; - bool success=false; int new_id = -1; @@ -1618,13 +1749,13 @@ version.ReadSync( login.version() ); if ( !mergedVersion.Merge( version, sn_CurrentVersion() ) ) { - sn_DisconnectUser( sender.SenderID(), "$network_kill_incompatible" ); + return sn_ReportFailure(sender, "$network_kill_incompatible"); } // expire 0.2.8 test versions, they have a security flaw if ( sn_lockOut028tTest && version.Max() >= 5 && version.Max() <= 10 ) { - sn_DisconnectUser( sender.SenderID(), "0.2.8_beta and 0.2.8.0_rc versions have a dangerous security flaw and are obsoleted, please upgrade to 0.2.8.2.1." ); + return sn_ReportFailure(sender, "0.2.8_beta and 0.2.8.0_rc versions have a dangerous security flaw and are obsoleted, please upgrade to 0.2.8.2.1."); } if ( sender.SenderID()!=MAXCLIENTS+1 ) @@ -1729,6 +1860,8 @@ else if (sender.SenderID()==MAXCLIENTS+1) { sn_DisconnectUserFull(MAXCLIENTS+1); + + return sn_ReportFailure(sender, "$network_kill_full"); } sn_UpdateCurrentVersion(); @@ -2186,6 +2319,10 @@ count ++; unsigned int id = peer; + + // set if only the first message of the packet is to be processed. + bool onlyReadFirstMessage = false; + // for(unsigned int i=1;i<=(unsigned int)maxclients;i++) int comp=nAddress::Compare( addrFrom, peers[claim_id] ); if ( comp == 0 ) // || claim_id == MAXCLIENTS+1 ) @@ -2199,6 +2336,95 @@ id = MAXCLIENTS+1; peers[ MAXCLIENTS+1 ] = addrFrom; sn_Connections[ MAXCLIENTS+1 ].socket = sn_Connections[peer].socket; + +// #define NO_GLOBAL_FLOODPROTECTION +#ifndef NO_GLOBAL_FLOODPROTECTION + // flood check for pings, logins and other potential nasties; as early as possible + if( sn_turtleMode && count > sn_connectionLimit*10 ) + { + continue; + } + + nMachine * machinePointer = nMachine::PeekMachine( peer ); + + if( sn_GetNetState() == nSERVER ) + { + // check whether we're currently getting flooded + sn_turtleMode = GlobalConnectionFloodProtection() || sn_forceTurtleMode; + + if( sn_turtleMode ) + { + // peek at descriptor + unsigned char const * b = buffer; + nBinaryReader reader(b, buffer+received); + unsigned short descriptor = sn_StripDescriptor( reader.ReadShort() ); + + // do some extra checks + if( descriptor == sn_StripDescriptor( sn_ackDescriptor.ID() ) ) + { + // this must be the cookie response triggered by the code below. + // allow it, but be careful to only read the first message. + onlyReadFirstMessage = true; + } + else if( descriptor == sn_StripDescriptor( sn_loginAcceptedDescriptor.ID() ) ) + { + // Hah. Nice trick. Won't work, though. + } + else if( !machinePointer || !machinePointer->IsValidated() ) + { + if( count > sn_connectionLimit ) + { + continue; + } + + // send fake login accept messages; the ack response whitelists the IP + nCookie cookie; + sn_SynGenerateCookie( sn_SynTimestamp(), peers[peer], cookie ); + Network::LoginAccepted emptyAccept; + tJUST_CONTROLLED_PTR< nProtoBufMessage< Network::LoginAccepted > > r + = sn_loginAcceptedDescriptor.Transform( emptyAccept ); + r->BendMessageID( cookie.first ); + r->SendImmediately(peer,false); + r = sn_loginAcceptedDescriptor.Transform( emptyAccept ); + r->BendMessageID( cookie.second ); + r->SendImmediately(peer,false); + int idback = ::sn_myNetID; + sn_myNetID = 1; // set a fake ID so the client doesn't consider the packet as a response from the server and messes up its ack data + nMessageBase::SendCollected(peer); + ::sn_myNetID = idback; + + /* + tJUST_CONTROLLED_PTR<nMessage> r = tNEW(nMessage)(login_accept); + r->BendMessageID( cookie.first ); + r->SendImmediately(peer,false); + r = tNEW(nMessage)(login_accept); + r->BendMessageID( cookie.second ); + r->SendImmediately(peer,false); + int idback = ::sn_myNetID; + sn_myNetID = 1; // set a fake ID so the client doesn't consider the packet as a response from the server and messes up its ack data + nMessage::SendCollected(peer); + ::sn_myNetID = idback; + */ + + // and ignore for now + continue; + } + } + + // IP is not spoofed or there is no + // current spoof heavy attack. Really look up the machine. + if( !machinePointer ) + { + machinePointer = &nMachine::GetMachine( peer ); + } + + // check individual flood protection (be lenient in turtle mode, login responses may have trouble getting through an attack) + if ( FloodProtection( *machinePointer, sn_turtleMode ? .2 : .1 ) ) + { + return; + } + } +#endif } try @@ -2286,7 +2512,7 @@ // do not ack the sn_loginIgnoredDescriptor packet that did not let you in. #ifdef DEBUG - if ( id > MAXCLIENTS ) + if ( id > MAXCLIENTS && sn_StripDescriptor( mess.DescriptorID() ) != sn_StripDescriptor( sn_loginAcceptedDescriptor.ID() ) ) { con << "Sending ack to login slot.\n"; } @@ -2324,6 +2550,12 @@ //else //con << "Message " << mess_id << ":" << id << " was not new.\n"; } + + // abort if we're only supoosed to process the first message + if( onlyReadFirstMessage ) + { + break; + } } } catch(nIgnore const &){ @@ -3184,6 +3416,7 @@ if((sn_Connections[MAXCLIENTS+1].socket = (*i).CheckNewConnection() ) != NULL) { rec_peer(MAXCLIENTS+1); + sn_Connections[MAXCLIENTS+1].socket = NULL; } } } @@ -4162,6 +4395,7 @@ : lastUsed_(tSysTimeFloat()) , banned_(-1) , players_(0) + , validated_(false) , decorators_(0) { kph_.Add(0,.1666); @@ -4231,20 +4465,57 @@ nMachinePTR & operator=(nMachinePTR const & other){ machine = other.machine; other.machine=0;return *this;} }; -typedef std::map< tString, nMachinePTR > nMachineMap; +typedef sockaddr nMachineKey; + +bool operator < ( nMachineKey const & a, nMachineKey const & b ) +{ + return reinterpret_cast< sockaddr_in const & >( a ).sin_addr.s_addr < reinterpret_cast< sockaddr_in const & >( b ).sin_addr.s_addr; +} + +typedef std::map< nMachineKey, nMachinePTR > nMachineMap; static nMachineMap & sn_GetMachineMap() { static nMachineMap map; return map; } -static nMachine & sn_LookupMachine( tString const & address ) +static nMachine & sn_LookupMachine( nMachineKey const * address ) { // get map of all machines and look address up nMachineMap & map = sn_GetMachineMap(); - return map[ address ].machine->SetIP( address ); + nMachine & ret = *map[ *address ].machine; + if( ret.GetIP().Len() <= 2 ) + { + nAddress addr; + sockaddr * target = addr; + *target = *address; + ret.SetIP( addr.GetAddress() ); + } + return ret; } +static nMachine * sn_PeekMachine( nMachineKey const * address ) +{ + // get map of all machines and look address up + nMachineMap & map = sn_GetMachineMap(); + nMachineMap::const_iterator i = map.find( *address ); + if( i != map.end() ) + { + return (*i).second.machine; + } + else + { + return NULL; + } +} + +static nMachine & sn_LookupMachine( tString const & address ) +{ + nAddress addr; + addr.SetAddress( address ); + return sn_LookupMachine( addr ); +} + // ******************************************************************************* // * // * GetMachine @@ -4285,18 +4556,48 @@ static nMachine invalid; return invalid; } - tString address; - peers[ userID ].GetAddress( address ); -#ifdef DEBUG_X - // add client ID so multiple connects from one machine are distinguished - tString newIP; - newIP << address << " " << userID; - address = newIP; -#endif + // delegate + return sn_LookupMachine( peers[userID] ); +} +// ******************************************************************************* +// * +// * PeekMachine +// * +// ******************************************************************************* +//! +//! @param userID the user ID to fetch the machine for +//! @return the machine the user ID belongs to +//! +// ******************************************************************************* + +nMachine * nMachine::PeekMachine( unsigned short userID ) +{ + // hardcoding: the server itself + if ( userID == 0 && sn_GetNetState() != nCLIENT ) + { + return &GetMachine( userID ); + } + + tASSERT( userID <= MAXCLIENTS+1 ); + + if( sn_GetNetState() != nSERVER ) + { + // invalid ID, return invalid machine (clients don't track machines) + return &GetMachine( userID ); + } + + // get address + tVERIFY( userID <= MAXCLIENTS+1 ); + if( !sn_Connections[userID].socket ) + { + // invalid ID, return invalid machine + return &GetMachine( userID ); + } + // delegate - return sn_LookupMachine( address ); + return sn_PeekMachine( peers[userID] ); } // safely delete iterator from map @@ -4564,7 +4865,7 @@ nMachine & machine = *(*iter).second.machine; // if ( machine.IsBanned() > 0 ) { - s << (*iter).first << " " << machine.IsBanned() << " " << machine.kph_ << " " << machine.GetBanReason() << "\n"; + s << machine.GetIP() << " " << machine.IsBanned() << " " << machine.kph_ << " " << machine.GetBanReason() << "\n"; } } } Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.h =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.h 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.h 2011-07-21 20:32:10 UTC (rev 9594) @@ -501,6 +501,10 @@ nMessageBase( const nDescriptorBase &, unsigned int messageID ); //!< create a new message with a given ID + void BendMessageID( int id ){ // bends the message ID. Use with extreme caution. + messageIDBig_ = id; + } + explicit nMessageBase( const nDescriptorBase & ); //!< create a new message with automatic ID // immediately send the message WITHOUT the queue; dangerous! @@ -731,7 +735,8 @@ bool operator == ( nMachine const & other ) const; //!< equality operator bool operator != ( nMachine const & other ) const; //!< inequality operator - static nMachine & GetMachine( unsigned short userID ); //!< fetches the machine information of a user + static nMachine & GetMachine( unsigned short userID ); //!< fetches the machine information of a user, creating it on demand + static nMachine * PeekMachine( unsigned short userID ); //!< fetches the machine information of a user, returning NULL if none is found static void Expire(); //!< expires machine information that is no longer needed static void KickSpectators(); //!< remove clients without players from the server @@ -743,6 +748,9 @@ void Ban( REAL time, tString const & reason ); //!< ban users from this machine for the given time REAL IsBanned() const; //!< returns the number of seconds users from this machine are currently banned for + bool IsValidated() const { return validated_; } + void Validate() { validated_ = true; } + // player accounting void AddPlayer(); //!< call when a player joins from this machine void RemovePlayer(); //!< call when a player rom this machine leaves @@ -759,6 +767,8 @@ int players_; //!< number of players coming from this machine currently REAL lastPlayerAction_; //!< time of the last player action + bool validated_; //!< true if the machine has been validated as a real client without spoofed IP + tString IP_; //!< IP address of the machine nMachineDecorator * decorators_; //!< list of decorators Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-21 20:32:10 UTC (rev 9594) @@ -962,6 +962,8 @@ bool protect = false; REAL diff = 0; int count = 0; + REAL tolerance = 0; + REAL minRelDiff = 10; // go through the different levels for ( i = sn_minPingCount-1; i >= 0; --i ) @@ -969,11 +971,19 @@ // this many pings should be tracked count = sn_minPingCounts[i]; diff = now - lastTime_[(lastTimeIndex_ + MAX - count) % MAX]; - REAL tolerance = sn_minPingTimes[i]*timeFactor; - if ( tolerance > 0 && diff < tolerance ) + tolerance = sn_minPingTimes[i]*timeFactor; + if ( tolerance > 0 ) { - protect = true; - break; + if( tolerance*minRelDiff < diff ) + { + minRelDiff = diff/tolerance; + } + + if( diff < tolerance ) + { + protect = true; + break; + } } } @@ -989,7 +999,7 @@ } // reset warning flag - if ( warned_ && now - lastTime_[(lastTimeIndex_ + MAX-2 ) % MAX] > sn_minPingTimes[ sn_minPingCount-1 ] ) + if ( warned_ && minRelDiff > 4 ) { con << "Flood protection ban of " << GetIP() << " removed.\n"; warned_ = false; @@ -1034,16 +1044,23 @@ static REAL sn_minPingTimeGlobalFactor = 0.1; static tSettingItem< REAL > sn_minPingTimeGlobal( "PING_FLOOD_GLOBAL", sn_minPingTimeGlobalFactor ); +// checks for global ping flood events +static bool GlobalPingFloodProtection() +{ + static nMachine server; + + return sn_minPingTimeGlobalFactor > 0 && FloodProtection( server, sn_minPingTimeGlobalFactor ); +} + // determines wheter the message comes from a flood attack; if so, reject it (return true) bool FloodProtection( int sender ) { - // get the machine infos - nMachine & server = nMachine::GetMachine( 0 ); - nMachine & peer = nMachine::GetMachine( sender ); - // only accept one ping per packet if ( !sn_firstInPacket ) { + // get the machine infos + nMachine & peer = nMachine::GetMachine( sender ); + GetQueryMessageStats( peer ).Block(); return true; @@ -1055,8 +1072,9 @@ if ( sn_minPingTimes[sn_minPingCount - 1] <= 0 ) return false; - // and delegate - return FloodProtection( peer ) || ( sn_minPingTimeGlobalFactor > 0 && FloodProtection( server, sn_minPingTimeGlobalFactor ) ); + // and delegate. Only do global check, the per-peer check has already been + // done earlier as the packet was received. + return GlobalPingFloodProtection(); } void nServerInfo::GetSmallServerInfo( Network::SmallServerInfo const & info, Modified: armagetronad/trunk/armagetronad/src/tools/tConsole.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tConsole.cpp 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/src/tools/tConsole.cpp 2011-07-21 20:32:10 UTC (rev 9594) @@ -164,8 +164,34 @@ // stored line static tString line_(""); -tConsole & tConsole::Print(tString s) +void tConsole::PrintLine(tString const & line, int repetitions) { + if( repetitions > 1 ) + { + // find the true line end. Sometimes, there are trailing color codes. + char const * lineEnd = strstr( line, "\n" ); + int length = line.Len()-2; + if( lineEnd ) + { + length = lineEnd - (char const *)line; + } + std::stringstream combined; + combined << line.SubStr(0, length) << " 0xffffff" << tOutput("$console_repetition", repetitions ); + + PrintLine( combined.str(), 1 ); + } + else + { + // print + if (s_betterConsole) + s_betterConsole->DoPrint( line ); + else + DoPrint( line ); + } +} + +tConsole & tConsole::Print(tString const & s) +{ // append to line line_ += s; @@ -184,15 +210,45 @@ // filter FilterLine( line_ ); - // print - tConsole * better = s_betterConsole; - if (better) + // check for repetitions + static tString lastLine("not the last line"); + static int repetitions = 0; + static int threshold = 1; + if( lastLine != line_ ) { - better->DoPrint( line_ ); + if( repetitions > 0 ) + { + PrintLine( lastLine, repetitions ); + } + + repetitions = 0; + threshold = 1; + lastLine = line_; } else - DoPrint( line_ ); + { + repetitions++; + if( threshold < 10 || repetitions >= threshold ) + { + PrintLine( line_, repetitions ); + + if( threshold < 10 ) + { + threshold++; + } + else + { + threshold*=10; + } + repetitions = 0; + } + line_ = ""; + return *this; + } + + PrintLine( line_, 1 ); + line_ = ""; } Modified: armagetronad/trunk/armagetronad/src/tools/tConsole.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tConsole.h 2011-07-21 16:31:52 UTC (rev 9593) +++ armagetronad/trunk/armagetronad/src/tools/tConsole.h 2011-07-21 20:32:10 UTC (rev 9594) @@ -78,7 +78,7 @@ virtual ~tConsole(); - tConsole & Print(tString s); + tConsole & Print(tString const & s); template<class T> tConsole & operator<<(const T&x){ tColoredString s; @@ -105,6 +105,7 @@ private: static tConsole *s_betterConsole; + void PrintLine(tString const & s, int repetitions); virtual tConsole & DoPrint(const tString& s); virtual void DoCenterDisplay(const tString& s,REAL timeout=5,REAL r=1,REAL g=1,REAL b=1); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-21 21:38:35
|
Revision: 9596 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9596&view=rev Author: z-man Date: 2011-07-21 21:38:27 +0000 (Thu, 21 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9592 to 9594: ------------------------------------------------------------------------ r9593 | bazaaarmagetron | 2011-07-21 18:31:52 +0200 (Thu, 21 Jul 2011) | 4 lines author: Manuel Moos Merging one pure security fix: Manuel Moos 2011-03-29 Correctly ignoring fat packets and checking which clients to kick. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9592&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9592 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9594 Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 20:46:22 UTC (rev 9595) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 21:38:27 UTC (rev 9596) @@ -2258,7 +2258,10 @@ static nMessageFifo receivedMessages; // the growing buffer we read messages into +#ifndef DEDICATED const int serverMaxAcceptedSize=2000; +#endif + static tArray< unsigned char > storage(2000); int maxReceive = 0; maxReceive = storage.Len(); unsigned char * buffer = 0; buffer = &storage[0]; @@ -2276,6 +2279,7 @@ { if ( received >= maxReceive ) { +#ifndef DEDICATED // the message was too long to receive. What to do? if ( sn_GetNetState() != nSERVER || received < serverMaxAcceptedSize ) { @@ -2287,16 +2291,55 @@ tERR_WARN( "Oversized network packet received. Read buffer has been enlargened to catch it the next time."); - // no use in processing the truncated packet. Some messages may get lost, - // but that's better than the inevitable network error and connection - // termination that expects us if we go on. - continue; } else +#endif { - // terminate the connection - sn_DisconnectUser( peer, "$network_kill_error" ); + // packet WAAAAY too large. + static float totalFatsoes = 10; // number of oversized packages checked + static float clientFatsoes = 10; // number of oversized pacakges that could be attributed to clients + static float bother = 5; // counter that determines whether we bother to check. + bother+=clientFatsoes; + + // what follows is work, so we only do it if it payed off in the past + // if this block is entered not at all by error, no biggie. The clients + // will time out eventually. + if(bother>totalFatsoes) + { + bother-=totalFatsoes; + + // increase total stat + totalFatsoes++; + + // If it's from a connected client, + // terminate the connection. If not, it's an attack and + // we should rather ignore it. + bool success = false; + for( int id=MAXCLIENTS; id > 0; --id ) + { + if (sn_Connections[id].socket && peers[id] == addrFrom) + { + sn_DisconnectUser( id, "$network_kill_error" ); + success=true; + } + } + + // count the successfully removed client + if( success ) + clientFatsoes++; + + // scale down the stats + const float factor=.99; + totalFatsoes*=factor; + clientFatsoes*=factor; + bother*=factor; + } } + + // no use in processing the truncated packet. Some messages may get lost, + // but that's better than the inevitable network error and connection + // termination that expects us if we go on. + continue; } unsigned char const * currentRead = buffer; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-21 21:48:07
|
Revision: 9597 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9597&view=rev Author: z-man Date: 2011-07-21 21:48:01 +0000 (Thu, 21 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9594 to 9596: ------------------------------------------------------------------------ r9595 | bazaaarmagetron | 2011-07-21 22:46:22 +0200 (Thu, 21 Jul 2011) | 2 lines Manuel Moos: Merging refinements to turtle mode. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9594&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/tools/tRecorder.cpp armagetronad/trunk/armagetronad/src/tools/tRecorder.h armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.cpp armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9594 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9596 Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-21 21:48:01 UTC (rev 9597) @@ -401,6 +401,8 @@ ping_flood_global_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. connection_flood_sensitivity_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection. connection_limit_help Maximum number of packets from unknown peers to handle at one +turtle_mode_activated Server is under attack. Turtle mode activated.\n +turtle_mode_deactivated The attack seems to have stopped for now. Turtle mode deactivated.\n shuffle_spam_messages_per_round_help Per round, per player limit on the number of shuffle messages displayed. A negative or zero value disables this check. spam_protection_repeat_help Minimum time between identical chat messages. @@ -570,6 +572,7 @@ fast_forward_maxstep_help Maximum recording time between rendered frames in fast forward mode fast_forward_maxstep_real_help Maximum real time between rendered frames in fast forward mode fast_forward_maxstep_rel_help Maximum fraction of the time left until the end of FF mode between rendered frames +stop_recording_help Stops a currently running recording to save resources. Resuming is impossible. #******************************************** #******************************************** Modified: armagetronad/trunk/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-21 21:48:01 UTC (rev 9597) @@ -90,6 +90,7 @@ predict_walls UNDOCUMENTED force_turtle_mode_help Forces turtle mode, usually only active while a server is under attack. For testing only. +record_turtle_mode_help Keep debug recording even in turtle mode. Normally, it is stopped to keep the server responsive. The begginning of an attack is recorded anyway, of course. #************************************* #************************************* Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 21:48:01 UTC (rev 9597) @@ -1613,21 +1613,102 @@ static bool sn_forceTurtleMode = false; static tSettingItem< bool > sn_forceTurtleModeConf( "FORCE_TURTLE_MODE", sn_forceTurtleMode ); +// keep recording even in turtle mode +static bool sn_recordTurtleMode = false; +static tSettingItem< bool > sn_recordTurtleModeConf( "RECORD_TURTLE_MODE", sn_recordTurtleMode ); + // number of packets from unknown sources to process each call to rec_peer static int sn_connectionLimit = 100; static tSettingItem< int > sn_connectionLimitConf( "CONNECTION_LIMIT", sn_connectionLimit ); +// turtle mode control +class nTurtleControl +{ + REAL lastTurtleModeTime; // last time turtle mode was activated + bool setThisFrame; + // true while we're turtling from a flood + bool turtleMode; +public: + nTurtleControl() + : lastTurtleModeTime(-700) + , setThisFrame(false) + , turtleMode(false) + { + } + + operator bool() const + { + return turtleMode; + } + + // activates turtle mode. It will persist for at least 60 seconds. + void SetTurtleMode() + { + if( !setThisFrame ) + { + if( !turtleMode ) + { + // report + sn_ConsoleOut( tOutput("$turtle_mode_activated") ); + + // stop recording + if( !sn_recordTurtleMode && tRecorder::IsRecording() ) + { + tRecorder::StopRecording(); + } + } + + turtleMode = true; + setThisFrame = true; + lastTurtleModeTime = tSysTimeFloat(); + + } + } + + void Update() + { + setThisFrame = false; + if( lastTurtleModeTime + 60 < tSysTimeFloat() ) + { + if( turtleMode && !sn_forceTurtleMode ) + { + // report + sn_ConsoleOut( tOutput("$turtle_mode_deactivated") ); + } + + turtleMode = sn_forceTurtleMode; + } + } +}; +static nTurtleControl sn_turtleMode; + // checks for global flood events -static bool GlobalConnectionFloodProtection() +static inline bool GlobalConnectionFloodProtection() { static nMachine server; - return sn_minConnectionTimeGlobalFactor > 0 && FloodProtection( server, sn_minConnectionTimeGlobalFactor ); + if( sn_minConnectionTimeGlobalFactor > 0 && FloodProtection( server, sn_minConnectionTimeGlobalFactor ) ) + { + sn_turtleMode.SetTurtleMode(); + } + + return sn_turtleMode; } -// true while we're turtling from a flood -static bool sn_turtleMode = false; +// checks for individual flood events +bool IndividualConnectionFloodProtection( nMachine * machine, int peer ) +{ + // IP is not spoofed or there is no + // current spoof heavy attack. Really look up the machine. + if( !machine ) + { + machine = &nMachine::GetMachine( peer ); + } + + // check individual flood protection (be lenient in turtle mode, login responses may have trouble getting through an attack) + return FloodProtection( *machine, sn_turtleMode ? .2 : 1 ); +} // report login failure. Or don't if we're flooded. void sn_ReportFailure(int id, char const * reason) @@ -2251,6 +2332,7 @@ static void rec_peer(unsigned int peer){ tASSERT( sn_Connections[peer].socket ); + sn_turtleMode.Update(); nMachine::Expire(); // temporary fifo for received messages @@ -2304,6 +2386,7 @@ // what follows is work, so we only do it if it payed off in the past // if this block is entered not at all by error, no biggie. The clients // will time out eventually. + bool success = false; if(bother>totalFatsoes) { bother-=totalFatsoes; @@ -2314,7 +2397,6 @@ // If it's from a connected client, // terminate the connection. If not, it's an attack and // we should rather ignore it. - bool success = false; for( int id=MAXCLIENTS; id > 0; --id ) { if (sn_Connections[id].socket && peers[id] == addrFrom) @@ -2326,7 +2408,9 @@ // count the successfully removed client if( success ) + { clientFatsoes++; + } // scale down the stats const float factor=.99; @@ -2334,6 +2418,17 @@ clientFatsoes*=factor; bother*=factor; } + + if( !success ) + { + // check for global and local spam (just for reporting, the packet + // is going to get blocked either way) + if( !GlobalConnectionFloodProtection() ) + { + peers[ MAXCLIENTS+1] = addrFrom; + IndividualConnectionFloodProtection( NULL, MAXCLIENTS+1 ); + } + } } // no use in processing the truncated packet. Some messages may get lost, @@ -2388,12 +2483,12 @@ continue; } - nMachine * machinePointer = nMachine::PeekMachine( peer ); + nMachine * machine = nMachine::PeekMachine( peer ); if( sn_GetNetState() == nSERVER ) { // check whether we're currently getting flooded - sn_turtleMode = GlobalConnectionFloodProtection() || sn_forceTurtleMode; + GlobalConnectionFloodProtection(); if( sn_turtleMode ) { @@ -2413,7 +2508,7 @@ { // Hah. Nice trick. Won't work, though. } - else if( !machinePointer || !machinePointer->IsValidated() ) + else if( !machine || !machine->IsValidated() ) { if( count > sn_connectionLimit ) { @@ -2455,17 +2550,11 @@ } // IP is not spoofed or there is no - // current spoof heavy attack. Really look up the machine. - if( !machinePointer ) + // current spoof heavy attack. Check closer. + if( IndividualConnectionFloodProtection( machine, peer ) ) { - machinePointer = &nMachine::GetMachine( peer ); + continue; } - - // check individual flood protection (be lenient in turtle mode, login responses may have trouble getting through an attack) - if ( FloodProtection( *machinePointer, sn_turtleMode ? .2 : .1 ) ) - { - return; - } } #endif } Modified: armagetronad/trunk/armagetronad/src/tools/tRecorder.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tRecorder.cpp 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/src/tools/tRecorder.cpp 2011-07-21 21:48:01 UTC (rev 9597) @@ -82,6 +82,27 @@ return IsRecording() || IsPlayingBack(); } +// ***************************************************************************************** +// * +// * Stop +// * +// ***************************************************************************************** +//! +//! +// ***************************************************************************************** + +void tRecorderBase::StopRecording( void ) +{ + return tRecording::Stop(); +} +static void st_StopRecording(std::istream &) +{ + tRecorderBase::StopRecording(); +} + +static tConfItemFunc snm("STOP_RECORDING",&st_StopRecording); + + // ******************************************************************************************* // * // * Record Modified: armagetronad/trunk/armagetronad/src/tools/tRecorder.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tRecorder.h 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/src/tools/tRecorder.h 2011-07-21 21:48:01 UTC (rev 9597) @@ -87,6 +87,7 @@ static bool IsRecording(); //!< returns whether there is a recording running static bool IsPlayingBack(); //!< returns whether there is a playback running static bool IsRunning(); //!< returns whether recording or playback are running + static void StopRecording(); //!< stops recording }; //! simple interface to recording functionality Modified: armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.cpp 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.cpp 2011-07-21 21:48:01 UTC (rev 9597) @@ -86,6 +86,20 @@ // ****************************************************************************************** // * +// * Stop +// * +// ****************************************************************************************** +//! +//! +// ****************************************************************************************** + +void tRecording::Stop() +{ + currentRecording_ = NULL; +} + +// ****************************************************************************************** +// * // * tRecording // * // ****************************************************************************************** Modified: armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.h 2011-07-21 21:38:27 UTC (rev 9596) +++ armagetronad/trunk/armagetronad/src/tools/tRecorderInternal.h 2011-07-21 21:48:01 UTC (rev 9597) @@ -45,6 +45,7 @@ public: tRecording () ; //!< default constructor + static void Stop () ; //!< stops recording typedef std::ostream STREAM ; //!< stream typedef protected: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-21 22:17:00
|
Revision: 9599 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9599&view=rev Author: z-man Date: 2011-07-21 22:16:54 +0000 (Thu, 21 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9596 to 9598: ------------------------------------------------------------------------ r9598 | bazaaarmagetron | 2011-07-21 23:55:20 +0200 (Thu, 21 Jul 2011) | 4 lines author: Manuel Moos Merging security fix: Manuel Moos 2011-03-30 Fixing lenleft checks to avoid reading beyond the end of the message. The actually relevant changes here were already implemented on trunk due to the new protobuf stuff. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9596&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9596 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9598 Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 21:55:20 UTC (rev 9598) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 22:16:54 UTC (rev 9599) @@ -2531,19 +2531,6 @@ nMessageBase::SendCollected(peer); ::sn_myNetID = idback; - /* - tJUST_CONTROLLED_PTR<nMessage> r = tNEW(nMessage)(login_accept); - r->BendMessageID( cookie.first ); - r->SendImmediately(peer,false); - r = tNEW(nMessage)(login_accept); - r->BendMessageID( cookie.second ); - r->SendImmediately(peer,false); - int idback = ::sn_myNetID; - sn_myNetID = 1; // set a fake ID so the client doesn't consider the packet as a response from the server and messes up its ack data - nMessage::SendCollected(peer); - ::sn_myNetID = idback; - */ - // and ignore for now continue; } @@ -2695,7 +2682,7 @@ } catch(nKillHim) { - con << "nKillHim signal caught.\n"; + con << "nKillHim signal caught: "; sn_DisconnectUser(id, "$network_kill_error"); } catch( tGenericException & e ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-22 09:09:10
|
Revision: 9601 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9601&view=rev Author: z-man Date: 2011-07-22 09:09:03 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9598 to 9600: ------------------------------------------------------------------------ r9600 | bazaaarmagetron | 2011-07-22 00:23:24 +0200 (Fri, 22 Jul 2011) | 2 lines Manuel Moos: Merging rest of turtle mode implementation and some other small improvements. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9598&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/language/french.txt armagetronad/trunk/armagetronad/language/polish.txt armagetronad/trunk/armagetronad/language/spanish.txt armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp armagetronad/trunk/armagetronad/src/tools/tConsole.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9598 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9600 Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2011-07-22 09:09:03 UTC (rev 9601) @@ -240,7 +240,9 @@ PING_FLOOD_GLOBAL .1 # The same times, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. CONNECTION_FLOOD_SENSITIVITY .1 # The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection. CONNECTION_LIMIT 100 # Maximum number of packets from unknown peers to handle at one +ANTI_SPOOF 0 # If set to 1, checks connecting clients for spoofed IPs are done. Only clients passing a connectivity test are allowed in. This is done in turtle mode automatically, but may be useful to have on at all times. + # default settings for MOVE/KICK(_TO) # default kick reason given for the KICK console command Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2011-07-22 09:09:03 UTC (rev 9601) @@ -2501,7 +2501,7 @@ network_error_timeout Verbindung zu Benutzer \1 verloren.\n network_error_shortmessage Benutzer \1 sendet eine unzul\xE4ssige (zu kurze) Nachricht.\n network_error_overflow Benutzer \1 kommt mit dem Netzwerkverkehr nicht hinterher.\n -network_killuser Beseitige Benutzer \1, Ping \2.\n +network_killuser Beseitige Benutzer \1, Ping \2, IP \3: \4\n network_statistics1 Zeit: \1 Sekunden\n network_statistics2 Gesendet: \2 Bytes in \3 Paketen (\4 Bytes/s)\n network_statistics3 Empfangen: \5 Bytes in \6 Paketen (\7 Bytes/s)\n Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-22 09:09:03 UTC (rev 9601) @@ -401,6 +401,7 @@ ping_flood_global_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. connection_flood_sensitivity_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection. connection_limit_help Maximum number of packets from unknown peers to handle at one +anti_spoof_help If set to 1, checks connecting clients for spoofed IPs. Only clients passing a connectivity test are allowed in. This is done in turtle mode automatically, but may be useful to have on at all times. turtle_mode_activated Server is under attack. Turtle mode activated.\n turtle_mode_deactivated The attack seems to have stopped for now. Turtle mode deactivated.\n @@ -2750,7 +2751,7 @@ network_error_timeout User \1 timed out.\n network_error_shortmessage User \1's message was too short.\n network_error_overflow User \1 is unable to keep up with the network traffic.\n -network_killuser Killing user \1, ping \2.\n +network_killuser Killing user \1, ping \2, IP \3: \4\n network_statistics1 Time: \1 seconds\n network_statistics2 Sent: \2 bytes in \3 packets (\4 bytes/s)\n network_statistics3 Received: \5 bytes in \6 packets (\7 bytes/s)\n @@ -2783,10 +2784,11 @@ network_kill_log User \1 kicked, reason given to him: \2\n network_redirect \n\nYou will now be redirected to the server \1:\2. You can prevent that by pressing ESC.\n network_kill_preface Reason given by server: -network_kill_maxidgrabber It ran out of IDs; your client was the one occupying most of them for himself. The reason for this can be a bug. +network_kill_maxidgrabber It ran out of IDs; your client was the one occupying most of them for itself. The reason for this can be a bug. network_kill_maxiduser It ran out of IDs; your client was the one occupying most of them. network_kill_cheater It assumed you are cheating. If that is untrue, it is a bug you should report. network_kill_error An error occurred while processing messages from your client. This usually indicates a client or server bug. +network_kill_servercomplete Server list transfer complete. network_kill_timeout You timed out. network_kill_logout You logged out regularly. network_kill_incompatible You are running a version incompatible with the server. Modified: armagetronad/trunk/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-22 09:09:03 UTC (rev 9601) @@ -89,7 +89,7 @@ max_simulate_ahead_help UNDOCUMENTED predict_walls UNDOCUMENTED -force_turtle_mode_help Forces turtle mode, usually only active while a server is under attack. For testing only. +force_turtle_mode_help Forces turtle mode, usually only active while a server is under attack. For testing, mainly. record_turtle_mode_help Keep debug recording even in turtle mode. Normally, it is stopped to keep the server responsive. The begginning of an attack is recorded anyway, of course. #************************************* Modified: armagetronad/trunk/armagetronad/language/french.txt =================================================================== --- armagetronad/trunk/armagetronad/language/french.txt 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/language/french.txt 2011-07-22 09:09:03 UTC (rev 9601) @@ -1740,7 +1740,7 @@ network_error_timeout Le temps de l'utilisateur \1 est ecoule.\n network_error_shortmessage Le message de l'utilisateur \1 est trop court.\n network_error_overflow L'utilisateur \1 ne sait pas suivre le trafic du reseau.\n -network_killuser Fin de l'utilisateur \1, ping \2.\n +network_killuser Fin de l'utilisateur \1, ping \2, IP \3: \4\n network_statistics1 Duree: \1 secondes\n network_statistics2 Envoyes: \2 octets dans \3 paquets (\4 octets/s)\n network_statistics3 Recus: \5 octets dans \6 paquets (\7 octets/s)\n Modified: armagetronad/trunk/armagetronad/language/polish.txt =================================================================== --- armagetronad/trunk/armagetronad/language/polish.txt 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/language/polish.txt 2011-07-22 09:09:03 UTC (rev 9601) @@ -2516,7 +2516,7 @@ network_error_timeout Użytkownik \1 przekroczył limit czasu.\n network_error_shortmessage Wiadomość użytkownika \1 była zbyt krótka.\n network_error_overflow Użytkownik \1 nie jest w stanie utrzymać przesyłu danych.\n -network_killuser Usuwanie użytkownika \1, ping \2.\n +network_killuser Usuwanie użytkownika \1, ping \2, IP: \3, \4\n network_statistics1 Czas: \1 sek.\n network_statistics2 Wysłano: \2 bajtów w \3 pakietach (\4 bajtów/s)\n network_statistics3 Otrzymano: \5 bajtów w \6 pakietach (\7 bajtów/s)\n Modified: armagetronad/trunk/armagetronad/language/spanish.txt =================================================================== --- armagetronad/trunk/armagetronad/language/spanish.txt 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/language/spanish.txt 2011-07-22 09:09:03 UTC (rev 9601) @@ -1997,7 +1997,7 @@ network_error_timeout El usuario \1 excedi\xF3 el tiempo.\n network_error_shortmessage El mensaje del usuario \1 era muy corto.\n network_error_overflow El usuario \1 no es capaz de mantener el tr\xE1fico de red.\n -network_killuser Eliminando el usuario \1, ping \2.\n +network_killuser Eliminando el usuario \1, ping \2, IP \3: \4\n network_statistics1 Tiempo: \1 segundos\n network_statistics2 Enviado: \2 bytes en \3 paquetes (\4 bytes/s)\n network_statistics3 Recibido: \5 bytes en \6 paquetes (\7 bytes/s)\n Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-22 09:09:03 UTC (rev 9601) @@ -194,6 +194,7 @@ nConnectionInfo sn_Connections[MAXCLIENTS+2]; static nAddress peers[MAXCLIENTS+2]; // the same logic for the peer adresses. +static nAddress lastPeers[MAXCLIENTS+2]; // the peers last connected to each slot static int timeouts[MAXCLIENTS+2]; #define ACKBACK 1000 @@ -1617,6 +1618,11 @@ static bool sn_recordTurtleMode = false; static tSettingItem< bool > sn_recordTurtleModeConf( "RECORD_TURTLE_MODE", sn_recordTurtleMode ); +// enforce the anti-spoof login part of turtle mode at all times +static bool sn_synCookie = false; +static tSettingItem< bool > sn_synCookieConf( "ANTI_SPOOF", sn_synCookie ); + + // number of packets from unknown sources to process each call to rec_peer static int sn_connectionLimit = 100; static tSettingItem< int > sn_connectionLimitConf( "CONNECTION_LIMIT", sn_connectionLimit ); @@ -1684,11 +1690,11 @@ static nTurtleControl sn_turtleMode; // checks for global flood events -static inline bool GlobalConnectionFloodProtection() +static inline bool GlobalConnectionFloodProtection( REAL extraFactor = 1.0f ) { static nMachine server; - if( sn_minConnectionTimeGlobalFactor > 0 && FloodProtection( server, sn_minConnectionTimeGlobalFactor ) ) + if( sn_minConnectionTimeGlobalFactor > 0 && FloodProtection( server, sn_minConnectionTimeGlobalFactor*extraFactor ) ) { sn_turtleMode.SetTurtleMode(); } @@ -1697,7 +1703,7 @@ } // checks for individual flood events -bool IndividualConnectionFloodProtection( nMachine * machine, int peer ) +bool IndividualConnectionFloodProtection( nMachine * machine, int peer, REAL extraFactor = 1.0f ) { // IP is not spoofed or there is no // current spoof heavy attack. Really look up the machine. @@ -1707,7 +1713,7 @@ } // check individual flood protection (be lenient in turtle mode, login responses may have trouble getting through an attack) - return FloodProtection( *machine, sn_turtleMode ? .2 : 1 ); + return FloodProtection( *machine, ( sn_turtleMode ? .2 : 1 ) * extraFactor ); } // report login failure. Or don't if we're flooded. @@ -2329,6 +2335,10 @@ typedef std::deque< tJUST_CONTROLLED_PTR< nMessageBase > > nMessageFifo; +// from nServerInfo.cpp +extern nProtoBufDescriptor< Network::RequestSmallServerInfo > sn_requestSmallServerInfoDescriptor; +extern nProtoBufDescriptor< Network::RequestBigServerInfo > sn_requestBigServerInfoDescriptor; + static void rec_peer(unsigned int peer){ tASSERT( sn_Connections[peer].socket ); @@ -2423,10 +2433,11 @@ { // check for global and local spam (just for reporting, the packet // is going to get blocked either way) - if( !GlobalConnectionFloodProtection() ) + REAL severity = received*.5/MAX_MESS_LEN; + if( !GlobalConnectionFloodProtection( severity ) ) { peers[ MAXCLIENTS+1] = addrFrom; - IndividualConnectionFloodProtection( NULL, MAXCLIENTS+1 ); + IndividualConnectionFloodProtection( NULL, MAXCLIENTS+1, severity ); } } } @@ -2470,6 +2481,14 @@ } else { + // check for communication from last partner + if( claim_id > 0 && 0 == nAddress::Compare( addrFrom, lastPeers[claim_id] ) ) + { + // ignore. The peer think it's still a client, but it's wrong. + // new login packets, pings etc. all come with claim_id == 0. + continue; + } + // assume it's a new connection id = MAXCLIENTS+1; peers[ MAXCLIENTS+1 ] = addrFrom; @@ -2490,7 +2509,7 @@ // check whether we're currently getting flooded GlobalConnectionFloodProtection(); - if( sn_turtleMode ) + if( sn_turtleMode || sn_synCookie ) { // peek at descriptor unsigned char const * b = buffer; @@ -2508,6 +2527,13 @@ { // Hah. Nice trick. Won't work, though. } + else if( !sn_turtleMode && + ( descriptor == sn_StripDescriptor( sn_requestSmallServerInfoDescriptor.ID() ) || + descriptor == sn_StripDescriptor( sn_requestBigServerInfoDescriptor.ID() ) ) ) + { + // Pings. Let them in unless we're under real attack. + onlyReadFirstMessage = true; + } else if( !machine || !machine->IsValidated() ) { if( count > sn_connectionLimit ) @@ -3546,6 +3572,7 @@ case nCLIENT: rec_peer(0); + sn_Connections[MAXCLIENTS+1].socket = NULL; break; case nSTANDALONE: @@ -3615,8 +3642,13 @@ bool printMessage = false; // is it worth printing a message for this event? + tString reasonString( reason ); + if (sn_Connections[i].socket) { + // store IP:port for later + lastPeers[i] = peers[i]; + nMessageBase::SendCollected(i); // to make sure... @@ -3625,7 +3657,7 @@ for(int j=2;j>=0;j--){ nProtoBufMessage< Network::LoginDenied > * mess = sn_loginDeniedDescriptor.CreateMessage(); mess->ClearMessageID(); - mess->AccessProtoBuf().set_reason( reason ); + mess->AccessProtoBuf().set_reason( reasonString ); // write redirection if ( redirectTo ) @@ -3659,7 +3691,7 @@ if ( printMessage ) { - con << tOutput( "$network_killuser", i, sn_Connections[i].ping.GetPing() ); + con << tOutput( "$network_killuser", i, sn_Connections[i].ping.GetPing(), peers[i].ToString(), reasonString ); } // clear address, socket and send queue Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2011-07-22 09:09:03 UTC (rev 9601) @@ -710,10 +710,10 @@ static nProtoBufDescriptor< Network::BigServerInfo > sn_bigServerInfoDescriptorMaster(54,nServerInfo::GetBigServerInfoMaster, true); // request small server information from master server/broadcast -static nProtoBufDescriptor< Network::RequestSmallServerInfo > sn_requestSmallServerInfoDescriptor(52,nServerInfo::GiveSmallServerInfo, true); +nProtoBufDescriptor< Network::RequestSmallServerInfo > sn_requestSmallServerInfoDescriptor(52,nServerInfo::GiveSmallServerInfo, true); // request big server information from master server/broadcast -static nProtoBufDescriptor< Network::RequestBigServerInfo > sn_requestBigServerInfoDescriptor(53,nServerInfo::GiveBigServerInfo, true); +nProtoBufDescriptor< Network::RequestBigServerInfo > sn_requestBigServerInfoDescriptor(53,nServerInfo::GiveBigServerInfo, true); static nProtoBufDescriptor< Network::RequestBigServerInfoMaster > sn_requestBigServerInfoDescriptorMaster(55,nServerInfo::GiveBigServerInfoMaster, true); // used to transfer the rest of the server info (name, number of players, etc) @@ -900,6 +900,7 @@ double lastTime_[MAX]; // log of the last times the server was pinged by this client int lastTimeIndex_; // the current index in the array bool warned_; // flag to avoid warning spam in the log file + REAL timeFactor_; // locked time factor tString GetIP() { @@ -956,6 +957,19 @@ // determines whether this client should be considered flooding bool FloodProtection( REAL timeFactor ) { + if( warned_ && timeFactor < timeFactor_ ) + { + // restore time factor + timeFactor = timeFactor_; + } + else + { + // store passed time factor for next time + timeFactor_ = timeFactor; + } + + + int i; double now = tSysTimeFloat(); @@ -966,15 +980,23 @@ REAL minRelDiff = 10; // go through the different levels - for ( i = sn_minPingCount-1; i >= 0; --i ) + int lowest = 0; + + // only check 10 and 20 ping limit for the default timefactor + if( timeFactor < 1 && sn_minPingTimes[sn_minPingCount-1] > 0 ) { + // lowest = 2; + } + + for ( i = sn_minPingCount-1; i >= lowest; --i ) + { // this many pings should be tracked count = sn_minPingCounts[i]; diff = now - lastTime_[(lastTimeIndex_ + MAX - count) % MAX]; tolerance = sn_minPingTimes[i]*timeFactor; if ( tolerance > 0 ) { - if( tolerance*minRelDiff < diff ) + if( tolerance*minRelDiff > diff ) { minRelDiff = diff/tolerance; } @@ -2340,13 +2362,17 @@ sn_Timeout[i] = tSysTimeFloat() + .2f; } - // defend against DOS attacks: Kill idle clients + // defend against DoS attacks: Kill idle clients if(sn_Timeout[i] < tSysTimeFloat()) + { + sn_DisconnectUser(i, "$network_kill_servercomplete"); + continue; + } + else if (!sn_Requested[i] && sn_Timeout[i] < tSysTimeFloat() + 60.0f) + { sn_DisconnectUser(i, "$network_kill_timeout"); - - if (!sn_Requested[i] && sn_Timeout[i] < tSysTimeFloat() + 60.0f) - sn_DisconnectUser(i, "$network_kill_timeout"); - + continue; + } } if (sn_Transmitting[i] && sn_MessagesPending(i) < 3) Modified: armagetronad/trunk/armagetronad/src/tools/tConsole.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tConsole.cpp 2011-07-21 22:23:24 UTC (rev 9600) +++ armagetronad/trunk/armagetronad/src/tools/tConsole.cpp 2011-07-22 09:09:03 UTC (rev 9601) @@ -266,7 +266,7 @@ } tConsole & tConsole::DoPrint(const tString& s){ - std::cout << s; + std::cout << tColoredString::RemoveColors(s); std::cout.flush(); return *this; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-22 09:17:28
|
Revision: 9604 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9604&view=rev Author: z-man Date: 2011-07-22 09:17:22 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9600 to 9603: ------------------------------------------------------------------------ r9603 | bazaaarmagetron | 2011-07-22 11:13:17 +0200 (Fri, 22 Jul 2011) | 2 lines Manuel Moos: Removing logging code that caused a fake leak warning. ------------------------------------------------------------------------ r9602 | bazaaarmagetron | 2011-07-22 11:12:37 +0200 (Fri, 22 Jul 2011) | 2 lines Manuel Moos: Merging bugfix (inability to respond to syn cookie challenges) ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9600&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9600 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9603 Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-22 09:13:17 UTC (rev 9603) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-07-22 09:17:22 UTC (rev 9604) @@ -9484,7 +9484,7 @@ eUncannyTimingDetector::eUncannyTimingSettings::~eUncannyTimingSettings() { -#ifdef DEBUG +#ifdef DEBUG_X #ifdef DEDICATED con << "Best ratio achieved for " << timescale*1000 << "ms stat: " << bestRatio << "\n"; #endif Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-22 09:13:17 UTC (rev 9603) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-22 09:17:22 UTC (rev 9604) @@ -2876,6 +2876,7 @@ { if (x==nCLIENT) { + // sn_Connections[MAXCLIENTS+1].socket = NULL; sn_DisconnectAll(); } else @@ -3572,7 +3573,6 @@ case nCLIENT: rec_peer(0); - sn_Connections[MAXCLIENTS+1].socket = NULL; break; case nSTANDALONE: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-25 22:17:55
|
Revision: 9623 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9623&view=rev Author: z-man Date: 2011-07-25 22:17:48 +0000 (Mon, 25 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9603 to 9622: ------------------------------------------------------------------------ r9622 | z-man | 2011-07-25 19:38:02 +0200 (Mon, 25 Jul 2011) | 2 lines Adding Windows adn Mac builds to search pattern. ------------------------------------------------------------------------ r9621 | z-man | 2011-07-25 19:34:32 +0200 (Mon, 25 Jul 2011) | 3 lines Rebranding Windows and Mac build names if the builder forgot. Limiting LP changelog upload to 1000 lines, they get displayed on webpages. ------------------------------------------------------------------------ r9618 | z-man | 2011-07-22 19:52:42 +0200 (Fri, 22 Jul 2011) | 2 lines Rebranding Windows installers. ------------------------------------------------------------------------ r9617 | z-man | 2011-07-22 19:24:48 +0200 (Fri, 22 Jul 2011) | 1 line Made installers rebrandable. ------------------------------------------------------------------------ r9615 | z-man | 2011-07-22 14:09:30 +0200 (Fri, 22 Jul 2011) | 3 lines Empty commit for just the SVN merge markers. Also, note: SVN merge tracking isn't very good at avoiding conflicts for later merges. Just saying. ------------------------------------------------------------------------ r9614 | z-man | 2011-07-22 13:54:46 +0200 (Fri, 22 Jul 2011) | 2 lines Updated NEWS. ------------------------------------------------------------------------ r9605 | bazaaarmagetron | 2011-07-22 11:40:26 +0200 (Fri, 22 Jul 2011) | 2 lines Manuel Moos: Softening and elaborating on turtle mode messages. Most observed turtle mode events so far were false alarms. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9603&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/win32/armagetronad.nsi armagetronad/trunk/armagetronad/win32/armagetronad_dedicated.nsi armagetronad/trunk/build/WorkMakefile armagetronad/trunk/build/scripts/winsrc armagetronad/trunk/build_visualc/armagetronad.nsi armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9603 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9622 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/armagetronad/NEWS 2011-07-25 22:17:48 UTC (rev 9623) @@ -125,6 +125,19 @@ - Added ENCODING ladderlog event, which specifies the encoding for data in ladderlog.txt. +Changes since 0.2.8.3.1: +- security fix: old style action commands from clients no loger cause hangs and crashes +- security fix: oversized packets are ignored properly +- security fix: never read one byte outside of the received buffer +- compiler compatibility: adapted to gcc 4.60 + +Changes since 0.2.8.3: +- fixed temporary sound disappearance when alt-tabbing away and back +- default subcultures are now distributed +- enable 32 bit color depth at desktop resolution +- no more display lists for SiS cards +- spelling mistakes and missing German translations + Changes since 0.2.8.3_rc4: ========================== - New setting: KEEP_PLAYER_SLOT allows the server to kick (preferably) spectators Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-07-25 22:17:48 UTC (rev 9623) @@ -402,8 +402,8 @@ connection_flood_sensitivity_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection. connection_limit_help Maximum number of packets from unknown peers to handle at one anti_spoof_help If set to 1, checks connecting clients for spoofed IPs. Only clients passing a connectivity test are allowed in. This is done in turtle mode automatically, but may be useful to have on at all times. -turtle_mode_activated Server is under attack. Turtle mode activated.\n -turtle_mode_deactivated The attack seems to have stopped for now. Turtle mode deactivated.\n +turtle_mode_activated Server is under heavy load. Turtle mode activated. Communication with new clients is on a budget.\n +turtle_mode_deactivated The high load seems to have normalized for now. Turtle mode deactivated.\n shuffle_spam_messages_per_round_help Per round, per player limit on the number of shuffle messages displayed. A negative or zero value disables this check. spam_protection_repeat_help Minimum time between identical chat messages. Modified: armagetronad/trunk/armagetronad/win32/armagetronad.nsi =================================================================== --- armagetronad/trunk/armagetronad/win32/armagetronad.nsi 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/armagetronad/win32/armagetronad.nsi 2011-07-25 22:17:48 UTC (rev 9623) @@ -1,9 +1,10 @@ ; Armagetron Advanced Client Setup Script -!define PRODUCT_NAME "Armagetron Advanced" +!define PRODUCT_BASENAME "Armagetron Advanced" +!define PRODUCT_NAME "${PRODUCT_BASENAME}" !define PRODUCT_VERSION "CVS" !define PRODUCT_PUBLISHER "Armagetron Advanced Team" !define PRODUCT_WEB_SITE "http://armagetronad.net" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\armagetronad.exe" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_BASENAME}\armagetronad.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" @@ -56,7 +57,7 @@ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "armagetronad-${PRODUCT_VERSION}.win32.exe" -InstallDir "$PROGRAMFILES\Armagetron Advanced" +InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show @@ -72,20 +73,20 @@ File "Armagetron Forums.url" # install desktop shortcut for current user - CreateShortCut "$DESKTOP\Armagetron Advanced.lnk" "$INSTDIR\armagetronad.exe" + CreateShortCut "$DESKTOP\${PRODUCT_BASENAME}.lnk" "$INSTDIR\armagetronad.exe" # install start menu for all users SetShellVarContext all - CreateDirectory "$SMPROGRAMS\Armagetron Advanced" + CreateDirectory "$SMPROGRAMS\${PRODUCT_BASENAME}" CreateDirectory "$APPDATA\Armagetron" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" File "armagetronad.exe" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced.lnk" "$INSTDIR\armagetronad.exe" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Record.lnk" "$INSTDIR\armagetronad.exe" '--record "$DESKTOP\ArmagetronAdvancedDebugRecording.aarec"' - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Playback.lnk" "$INSTDIR\armagetronad.exe" '--playback "$DESKTOP\ArmagetronAdvancedDebugRecording.aarec"' - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Benchmark.lnk" "$INSTDIR\armagetronad.exe" '--benchmark --playback "$DESKTOP\ArmagetronAdvancedDebugRecording.aarec"' - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced User Data.lnk" "$APPDATA\Armagetron" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced System Data.lnk" "$INSTDIR" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME}.lnk" "$INSTDIR\armagetronad.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Record.lnk" "$INSTDIR\armagetronad.exe" '--record "$DESKTOP\ArmagetronAdvancedDebugRecording.aarec"' + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Playback.lnk" "$INSTDIR\armagetronad.exe" '--playback "$DESKTOP\ArmagetronAdvancedDebugRecording.aarec"' + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Benchmark.lnk" "$INSTDIR\armagetronad.exe" '--benchmark --playback "$DESKTOP\ArmagetronAdvancedDebugRecording.aarec"' + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} User Data.lnk" "$APPDATA\Armagetron" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} System Data.lnk" "$INSTDIR" SetOutPath "$INSTDIR\config" File ".\config\*.cfg" File ".\config\*.srv" @@ -97,10 +98,10 @@ File "*.txt" File "*.dll" SetOutPath "$INSTDIR\doc" - File ".\doc\*.html" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" "$INSTDIR\doc\index.html" + File /nonfatal ".\doc\*.html" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Documentation.lnk" "$INSTDIR\doc\index.html" SetOutPath "$INSTDIR\doc\net" - File ".\doc\net\*.html" + File /nonfatal ".\doc\net\*.html" SetOutPath "$INSTDIR" File "iconv.dll" File "jpeg.dll" @@ -124,7 +125,7 @@ SectionEnd Section -AdditionalIcons - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced.lnk" "$INSTDIR\uninst.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall ${PRODUCT_NAME}.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post @@ -174,18 +175,18 @@ RMDir "$INSTDIR\config" RMDir "$INSTDIR" - Delete "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" - Delete "$DESKTOP\Armagetron Advanced.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Record.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Playback.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Benchmark.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced User Data.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced System Data.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall ${PRODUCT_NAME}.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Documentation.lnk" + Delete "$DESKTOP\${PRODUCT_NAME}.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Record.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Playback.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Benchmark.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} User Data.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} System Data.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Armagetron Forums.lnk" - RMDir "$SMPROGRAMS\Armagetron Advanced" + RMDir "$SMPROGRAMS\${PRODUCT_NAME}" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" Modified: armagetronad/trunk/armagetronad/win32/armagetronad_dedicated.nsi =================================================================== --- armagetronad/trunk/armagetronad/win32/armagetronad_dedicated.nsi 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/armagetronad/win32/armagetronad_dedicated.nsi 2011-07-25 22:17:48 UTC (rev 9623) @@ -1,9 +1,10 @@ ; Armagetron Advanced Dedicated Server Setup Script -!define PRODUCT_NAME "Armagetron Advanced Dedicated Server" +!define PRODUCT_BASENAME "Armagetron Advanced" +!define PRODUCT_NAME "${PRODUCT_BASENAME} Dedicated Server" !define PRODUCT_VERSION "CVS" !define PRODUCT_PUBLISHER "Armagetron Advanced Team" !define PRODUCT_WEB_SITE "http://armagetronad.sf.net" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\armagetronad_dedicated.exe" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_BASENAME}\armagetronad_dedicated.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" @@ -55,7 +56,7 @@ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "armagetronad-dedicated-${PRODUCT_VERSION}.win32.exe" -InstallDir "$PROGRAMFILES\Armagetron Advanced Dedicated" +InstallDir "$PROGRAMFILES\${PRODUCT_BASENAME} Dedicated" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show @@ -71,14 +72,14 @@ File "Armagetron Forums.url" # install desktop entry for current user - CreateShortCut "$DESKTOP\Armagetron Advanced Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" + CreateShortCut "$DESKTOP\${PRODUCT_BASENAME} Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" # install start menu for all users SetShellVarContext all - CreateDirectory "$SMPROGRAMS\Armagetron Advanced" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" + CreateDirectory "$SMPROGRAMS\${PRODUCT_BASENAME}" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" File "armagetronad_dedicated.exe" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" SetOutPath "$INSTDIR\config" File ".\config\*.cfg" File ".\config\*.srv" @@ -89,10 +90,10 @@ SetOutPath "$INSTDIR" File "*.txt" SetOutPath "$INSTDIR\doc" - File ".\doc\*.html" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" "$INSTDIR\doc\index.html" + File /nonfatal ".\doc\*.html" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Documentation.lnk" "$INSTDIR\doc\index.html" SetOutPath "$INSTDIR\doc\net" - File ".\doc\net\*.html" + File /nonfatal ".\doc\net\*.html" SetOutPath "$INSTDIR\language" File ".\language\*.*" SetOutPath "$INSTDIR" @@ -113,7 +114,7 @@ SectionEnd Section -AdditionalIcons - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced Server.lnk" "$INSTDIR\uninst_dedicated.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Uninstall ${PRODUCT_BASENAME} Server.lnk" "$INSTDIR\uninst_dedicated.exe" SectionEnd Section -Post @@ -162,13 +163,13 @@ RMDir "$INSTDIR\config" RMDir "$INSTDIR" - Delete "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced Server.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" - Delete "$DESKTOP\Armagetron Advanced Server.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Server.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\Uninstall ${PRODUCT_BASENAME} Server.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\Documentation.lnk" + Delete "$DESKTOP\${PRODUCT_BASENAME} Server.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Server.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\Armagetron Forums.lnk" - RMDir "$SMPROGRAMS\Armagetron Advanced" + RMDir "$SMPROGRAMS\${PRODUCT_BASENAME}" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/build/WorkMakefile 2011-07-25 22:17:48 UTC (rev 9623) @@ -301,7 +301,7 @@ # # test "$(AA_VISUALC)" != "" || { echo -e "\nCVS module armagetronad_build_visualc needs to be checked out parallel to this directory for Windows source build.\n"; false; } rm -rf $@ $@-proto $(RCDIR)/$(PACKAGE) - VERSION=$(VERSION) bash scripts/winsrc $@-proto $(SOURCEDIR) $(WINBUILDDIR) $(WINDOCDIR) $(VERSION) + PROGNAME=$(PROGNAME) VERSION=$(VERSION) bash scripts/winsrc $@-proto $(SOURCEDIR) $(WINBUILDDIR) $(WINDOCDIR) $(VERSION) mv $@-proto $@ touch $@ @@ -438,17 +438,21 @@ rm -rf ap-$* touch $@ -upload-lp: $(SOURCEDIR)/.tag $(UPLOAD)/.tag +# rename renegade uploads +upload-rename: $(UPLOAD)/.tag + if test $(PACKAGE) != armagetronad; then cd $(UPLOAD); for f in armagetronad*; do if echo $$f | egrep "armagetronad-0|armagetronad-dedicated-0" > /dev/null; then mv $$f $$(echo $$f | sed -e "s,armagetronad,$(PACKAGE),"); fi; done; fi + +upload-lp: $(SOURCEDIR)/.tag $(UPLOAD)/.tag upload-rename # # ***************************************** # * uploading compiled files to lp * # ***************************************** # cp doc/releasenotes.txt $(UPLOAD)/ - cp $(SOURCEDIR)/ChangeLog $(UPLOAD)/ - cd ${UPLOAD}; ../../../../scripts/lp-upload armagetronad "$(SERIES)" "$(VERSION)" *.gz *.bz2 *.zip *.deb *.package *.rpm + head -n 1000 $(SOURCEDIR)/ChangeLog > $(UPLOAD)/ChangeLog + cd ${UPLOAD}; ../../../../scripts/lp-upload armagetronad "$(SERIES)" "$(VERSION)" *.gz *.bz2 *.zip *.deb *.package *.rpm *.exe *.dmg -upload-sf: $(UPLOAD)/.tag +upload-sf: $(UPLOAD)/.tag upload-rename # # ***************************************** # * uploading compiled files to sf * Modified: armagetronad/trunk/build/scripts/winsrc =================================================================== --- armagetronad/trunk/build/scripts/winsrc 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/build/scripts/winsrc 2011-07-25 22:17:48 UTC (rev 9623) @@ -27,7 +27,10 @@ for f in ${WINDIR}/win32/*.nsi; do #echo Adapting installer script $f... mv $f $f.in - sed < $f.in > $f -e "s,define PRODUCT_VERSION.*$,define PRODUCT_VERSION \"${VERSION}\"," + sed < $f.in > $f \ + -e "s,define PRODUCT_VERSION.*$,define PRODUCT_VERSION \"${VERSION}\","\ + -e "s,define PRODUCT_BASENAME.*$,define PRODUCT_BASENAME \"${PROGNAME}\"," \ + rm $f.in done Modified: armagetronad/trunk/build_visualc/armagetronad.nsi =================================================================== --- armagetronad/trunk/build_visualc/armagetronad.nsi 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/build_visualc/armagetronad.nsi 2011-07-25 22:17:48 UTC (rev 9623) @@ -1,9 +1,10 @@ ; Armagetron Advanced Client Setup Script -!define PRODUCT_NAME "Armagetron Advanced" +!define PRODUCT_BASENAME "Armagetron Advanced" +!define PRODUCT_NAME "${PRODUCT_BASENAME}" !define PRODUCT_VERSION "CVS" !define PRODUCT_PUBLISHER "Armagetron Advanced Team" !define PRODUCT_WEB_SITE "http://armagetronad.net" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\armagetronad.exe" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_BASENAME}\armagetronad.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" @@ -56,7 +57,7 @@ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "armagetronad-${PRODUCT_VERSION}.win32.exe" -InstallDir "$PROGRAMFILES\Armagetron Advanced" +InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show @@ -78,20 +79,20 @@ File "Armagetron Forums.url" # install desktop shortcut for current user - CreateShortCut "$DESKTOP\Armagetron Advanced.lnk" "$INSTDIR\armagetronad.exe" + CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\armagetronad.exe" # install start menu for all users SetShellVarContext all - CreateDirectory "$SMPROGRAMS\Armagetron Advanced" + CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" CreateDirectory "$APPDATA\Armagetron" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" File "armagetronad.exe" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced.lnk" "$INSTDIR\armagetronad.exe" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Record.lnk" "$INSTDIR\armagetronad.exe" '--record "%USERPROFILE%\Desktop\ArmagetronAdvancedDebugRecording.aarec"' - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Playback.lnk" "$INSTDIR\armagetronad.exe" '--playback "%USERPROFILE%\Desktop\ArmagetronAdvancedDebugRecording.aarec"' - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Benchmark.lnk" "$INSTDIR\armagetronad.exe" '--benchmark --playback "%USERPROFILE%\Desktop\ArmagetronAdvancedDebugRecording.aarec"' - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced User Data.lnk" "$APPDATA\Armagetron" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced System Data.lnk" "$INSTDIR" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\armagetronad.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Record.lnk" "$INSTDIR\armagetronad.exe" '--record "%USERPROFILE%\Desktop\ArmagetronAdvancedDebugRecording.aarec"' + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Playback.lnk" "$INSTDIR\armagetronad.exe" '--playback "%USERPROFILE%\Desktop\ArmagetronAdvancedDebugRecording.aarec"' + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Benchmark.lnk" "$INSTDIR\armagetronad.exe" '--benchmark --playback "%USERPROFILE%\Desktop\ArmagetronAdvancedDebugRecording.aarec"' + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} User Data.lnk" "$APPDATA\Armagetron" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} System Data.lnk" "$INSTDIR" SetOutPath "$INSTDIR\config" File ".\config\*.cfg" File ".\config\*.srv" @@ -103,10 +104,10 @@ File "*.txt" File "*.dll" SetOutPath "$INSTDIR\doc" - File ".\doc\*.html" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" "$INSTDIR\doc\index.html" + File /nonfatal ".\doc\*.html" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Documentation.lnk" "$INSTDIR\doc\index.html" SetOutPath "$INSTDIR\doc\net" - File ".\doc\net\*.html" + File /nonfatal ".\doc\net\*.html" SetOutPath "$INSTDIR" File "iconv.dll" File "jpeg.dll" @@ -135,7 +136,7 @@ SectionEnd Section -AdditionalIcons - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced.lnk" "$INSTDIR\uninst.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall ${PRODUCT_NAME}.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post @@ -184,18 +185,18 @@ RMDir "$INSTDIR\config" RMDir "$INSTDIR" - Delete "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" - Delete "$DESKTOP\Armagetron Advanced.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Record.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Playback.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Benchmark.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced User Data.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced System Data.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall ${PRODUCT_NAME}.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Documentation.lnk" + Delete "$DESKTOP\${PRODUCT_NAME}.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Record.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Playback.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} Benchmark.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} User Data.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} System Data.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Armagetron Forums.lnk" - RMDir "$SMPROGRAMS\Armagetron Advanced" + RMDir "$SMPROGRAMS\${PRODUCT_NAME}" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" Modified: armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi =================================================================== --- armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi 2011-07-25 17:38:02 UTC (rev 9622) +++ armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi 2011-07-25 22:17:48 UTC (rev 9623) @@ -1,9 +1,10 @@ ; Armagetron Advanced Dedicated Server Setup Script -!define PRODUCT_NAME "Armagetron Advanced Dedicated Server" +!define PRODUCT_BASENAME "Armagetron Advanced" +!define PRODUCT_NAME "${PRODUCT_BASENAME} Dedicated Server" !define PRODUCT_VERSION "CVS" !define PRODUCT_PUBLISHER "Armagetron Advanced Team" !define PRODUCT_WEB_SITE "http://armagetronad.sf.net" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\armagetronad_dedicated.exe" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_BASENAME}\armagetronad_dedicated.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" @@ -55,7 +56,7 @@ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "armagetronad-dedicated-${PRODUCT_VERSION}.win32.exe" -InstallDir "$PROGRAMFILES\Armagetron Advanced Dedicated" +InstallDir "$PROGRAMFILES\${PRODUCT_BASENAME} Dedicated" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show @@ -71,14 +72,14 @@ File "Armagetron Forums.url" # install desktop entry for current user - CreateShortCut "$DESKTOP\Armagetron Advanced Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" + CreateShortCut "$DESKTOP\${PRODUCT_BASENAME} Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" # install start menu for all users SetShellVarContext all - CreateDirectory "$SMPROGRAMS\Armagetron Advanced" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" + CreateDirectory "$SMPROGRAMS\${PRODUCT_BASENAME}" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Armagetron Forums.lnk" "$INSTDIR\Armagetron Forums.url" File "armagetronad_dedicated.exe" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" SetOutPath "$INSTDIR\config" File ".\config\*.cfg" File ".\config\*.srv" @@ -89,10 +90,10 @@ SetOutPath "$INSTDIR" File "*.txt" SetOutPath "$INSTDIR\doc" - File ".\doc\*.html" - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" "$INSTDIR\doc\index.html" + File /nonfatal ".\doc\*.html" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Documentation.lnk" "$INSTDIR\doc\index.html" SetOutPath "$INSTDIR\doc\net" - File ".\doc\net\*.html" + File /nonfatal ".\doc\net\*.html" SetOutPath "$INSTDIR\language" File ".\language\*.*" SetOutPath "$INSTDIR" @@ -113,7 +114,7 @@ SectionEnd Section -AdditionalIcons - CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced Server.lnk" "$INSTDIR\uninst_dedicated.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_BASENAME}\Uninstall ${PRODUCT_BASENAME} Server.lnk" "$INSTDIR\uninst_dedicated.exe" SectionEnd Section -Post @@ -162,13 +163,13 @@ RMDir "$INSTDIR\config" RMDir "$INSTDIR" - Delete "$SMPROGRAMS\Armagetron Advanced\Uninstall Armagetron Advanced Server.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Documentation.lnk" - Delete "$DESKTOP\Armagetron Advanced Server.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Server.lnk" - Delete "$SMPROGRAMS\Armagetron Advanced\Armagetron Forums.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\Uninstall ${PRODUCT_BASENAME} Server.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\Documentation.lnk" + Delete "$DESKTOP\${PRODUCT_BASENAME} Server.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\${PRODUCT_BASENAME} Server.lnk" + Delete "$SMPROGRAMS\${PRODUCT_BASENAME}\Armagetron Forums.lnk" - RMDir "$SMPROGRAMS\Armagetron Advanced" + RMDir "$SMPROGRAMS\${PRODUCT_BASENAME}" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-07-26 19:11:44
|
Revision: 9625 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9625&view=rev Author: z-man Date: 2011-07-26 19:11:38 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9622 to 9624: ------------------------------------------------------------------------ r9624 | bazaaarmagetron | 2011-07-26 20:06:27 +0200 (Tue, 26 Jul 2011) | 2 lines Manuel Moos: Merging various timer improvements. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9622&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/src/engine/eTimer.cpp armagetronad/trunk/armagetronad/src/engine/eTimer.h armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.h armagetronad/trunk/armagetronad/src/tools/tError.cpp armagetronad/trunk/armagetronad/src/tron/gCycle.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9622 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9624 Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2011-07-26 19:11:38 UTC (rev 9625) @@ -569,6 +569,12 @@ BROWSER_NUM_QUERIES 3 # number of queries per try BROWSER_CONTACTLOSS 4 # number of failed contact attemps before a server can be considered lost +# delayed timer sync packets are culled from the stats with a force proportional to +# CULL_DELAY_MIN+max( CULL_DELAY_END-t , 0 )*CULL_DELAY_PER_SECOND +CULL_DELAY_END 3 +CULL_DELAY_PER_SECOND 3 +CULL_DELAY_MIN 10 + TIMER_SYNC_START_FUDGE 0.1 # fudge factor: the game timer tends to be late at the start of the round. This fudge factor compensates for it by hacking it a bit into the future. TIMER_SYNC_START_FUDGE_STOP 2.0 # the round time at which fudging is stopped. Modified: armagetronad/trunk/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2011-07-26 19:11:38 UTC (rev 9625) @@ -47,8 +47,9 @@ simulate_receive_packet_loss_help UNDOCUMENTED simulate_send_packet_loss_help UNDOCUMENTED spawn_point_group_size_help UNDOCUMENTED -timer_sync_start_fudge_help UNDOCUMENTED -timer_sync_start_fudge_stop_help UNDOCUMENTED +cull_delay_end_help UNDOCUMENTED +cull_delay_per_second_help UNDOCUMENTED +cull_delay_min_help UNDOCUMENTED master_idle_help UNDOCUMENTED master_port_help UNDOCUMENTED master_query_interval_help UNDOCUMENTED Modified: armagetronad/trunk/armagetronad/src/engine/eTimer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTimer.cpp 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/src/engine/eTimer.cpp 2011-07-26 19:11:38 UTC (rev 9625) @@ -36,9 +36,10 @@ #include "eLagCompensation.h" #include "rSysdep.h" - #include "eTimer.pb.h" +// #include <fstream> + eTimer *se_mainGameTimer=NULL; // from nNetwork.C; used to sync time with the server @@ -118,28 +119,52 @@ } } -static REAL se_timerStartFudge = 0.0; -static tSettingItem<REAL> se_timerStartFudgeConf("TIMER_SYNC_START_FUDGE",se_timerStartFudge); -static REAL se_timerStartFudgeStop = 2.0; -static tSettingItem<REAL> se_timerStartFudgeStopConf("TIMER_SYNC_START_FUDGE_STOP",se_timerStartFudgeStop); - void eTimer::ReadSync( Engine::TimerSync const & sync, nSenderInfo const & sender ) { nNetObject::ReadSync( sync.base(), sender ); - bool checkDrift = true; + if( sn_GetNetState() != nCLIENT || sender.SenderID() != 0 ) + { + return; + } + // read in the remote time + remoteCurrentTime_ = sync.time(); + remoteSpeed_ = sync.speed(); + sync_ = true; + //std::cerr << "Got sync:" << remote_currentTime << ":" << speed << '\n'; +} +static REAL se_cullDelayEnd=3.0; // end of extra delay cull +static REAL se_cullDelayPerSecond=3.0; // delay cull drop per second +static REAL se_cullDelayMin=10.0; // plateau of delay cull after extra + +static tSettingItem< REAL > se_cullDelayEndConf( "CULL_DELAY_END", se_cullDelayEnd ); +static tSettingItem< REAL > se_cullDelayPerSecondConf( "CULL_DELAY_PER_SECOND", se_cullDelayPerSecond ); +static tSettingItem< REAL > se_cullDelayMinConf( "CULL_DELAY_MIN", se_cullDelayMin ); + +void eTimer::ProcessSync() +{ + sync_ = false; + + bool checkDrift = true; + // determine the best estimate of the start time offset that reproduces the sent remote // time and its expected quality. REAL remoteStartTimeOffset = 0; REAL remoteTimeNonQuality = 0; + + // determine ping + nPingAverager & pingAverager = sn_Connections[0].ping; + REAL ping = pingAverager.GetPing(); + REAL pingVariance = pingAverager.GetFastAverager().GetAverageVariance(); + { - //REAL oldTime=currentTime; - REAL remote_currentTime = sync.time(); - REAL remoteSpeed = sync.speed(); - + // adapt remote time a little, we're processing syncs with a frame delay + REAL remote_currentTime = remoteCurrentTime_ + averageSpf_.GetAverage(); + REAL remoteSpeed = remoteSpeed_; + // forget about earlier syncs if the speed changed if ( fabs( speed - remoteSpeed ) > 10 * EPS ) { @@ -150,11 +175,6 @@ speed = remoteSpeed; - // determine ping - nPingAverager & averager = sn_Connections[sender.SenderID()].ping; - // pingAverager_.Add( rawAverager.GetPing(), remote_currentTime > .01 ? remote_currentTime : .01 ); - REAL ping = averager.GetPing(); - // add half our ping (see Einsteins SRT on clock syncronisation) REAL real_remoteTime=remote_currentTime+ping*speed*.5; @@ -167,16 +187,8 @@ else remote_currentTime=real_remoteTime; - // HACK: warp time into the future at the beginning of the round. - // I can't explain why this is required; without it, the timer is late. - if ( remote_currentTime < se_timerStartFudgeStop ) - { - remote_currentTime += ping * ( se_timerStartFudgeStop - remote_currentTime ) * se_timerStartFudge; - checkDrift = false; - } - // determine quality from ping variance - remoteTimeNonQuality = averager.GetFastAverager().GetAverageVariance(); + remoteTimeNonQuality = pingVariance; // determine start time remoteStartTimeOffset = smoothedSystemTime_ - startTime_ - remote_currentTime; @@ -216,6 +228,40 @@ // add the variance to the non-quality, along with an offset to avoid division by zero remoteTimeNonQuality += 0.00001 + 4 * qualityTester_.GetAverageVariance(); +#ifdef DEBUG_X + con << "T=" << smoothedSystemTime_ << " " << lastRemoteTime_ << ", Q= " << remoteTimeNonQuality << ", P= " << ping << " +/- " << sqrt(pingVariance) << " Time offset: " << remoteStartTimeOffset << " : " << startTimeOffset_.GetAverage() << "\n"; + + std::ofstream plot("timesync.txt",std::ios_base::app); + plot << smoothedSystemTime_ << " " << remoteStartTimeOffset << " " << startTimeOffset_.GetAverage() << "\n"; +#endif + + // check for unusually delayed packets, give them lower weight + REAL delay = remoteStartTimeOffset - startTimeOffset_.GetAverage(); + if( delay > 0 ) + { + // fluctuations up to the ping variance are acceptable, + // (plus some extra factors, like a 1 ms offset and 10% of the current ping) + // severity will be < 1 for those + REAL severity = delay*delay/(.000001 + pingVariance + .01*ping*ping); + // but it is culled above 1 + if( severity > 1 ) + { + severity = pow(severity,.25); + } + + REAL cullFactor = (se_cullDelayEnd-lastRemoteTime_)*se_cullDelayPerSecond; + if( cullFactor < 0 ) + { + cullFactor = 0; + } + cullFactor += se_cullDelayMin; + +#ifdef DEBUG_X + con << "severity=" << severity << ", cull= " << cullFactor << "\n"; +#endif + remoteTimeNonQuality *= 1+(cullFactor-1)*severity; + } + // add the offset to the statistics, weighted by the quality startTimeOffset_.Add( remoteStartTimeOffset, 1/remoteTimeNonQuality ); } @@ -251,8 +297,8 @@ } void eTimer::SyncTime(){ - // get current system time { + // get current system time and store it double newTime=tSysTimeFloat(); static bool smooth = se_SmoothTime(); @@ -296,6 +342,13 @@ // store and average frame times spf_ = timeStep; + + // process sync now before an unusually large timestep messes up averageSpf_. + if( sync_ ) + { + ProcessSync(); + } + if ( timeStep > 0 && speed > 0 ) { averageSpf_.Add( timeStep ); @@ -363,6 +416,8 @@ startTimeOffset_.Add(100,EPS); startTimeOffset_.Add(-100,EPS); + sync_ = false; + qualityTester_.Reset(); static const REAL qual = sqrt(1/EPS); qualityTester_.Add(qual,EPS); Modified: armagetronad/trunk/armagetronad/src/engine/eTimer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTimer.h 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/src/engine/eTimer.h 2011-07-26 19:11:38 UTC (rev 9625) @@ -74,6 +74,10 @@ REAL lastStartTime_; //!< last received start time REAL lastRemoteTime_; //!< last received time + bool sync_; //!< is a sync ready to process? + REAL remoteCurrentTime_, remoteSpeed_; //!< if so, the sync data + void ProcessSync(); //!< processes the sync data + // the current game time is always smoothedSystemTime_ - ( startTime_ + startTimeSmoothedOffset_ ). REAL spf_; //!< last frame time Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2011-07-26 19:11:38 UTC (rev 9625) @@ -4215,6 +4215,21 @@ return 0; } +// ******************************************************************************************* +// * +// * GetWeight +// * +// ******************************************************************************************* +//! +//! @return the current total weight +//! +// ******************************************************************************************* + +REAL nAverager::GetWeight( void ) const +{ + return weight_; +} + // ******************************************************************************* // * // * operator << @@ -4463,9 +4478,12 @@ void nPingAverager::Timestep( REAL decay ) { - snail_.Timestep( decay * .02 ); - slow_.Timestep ( decay * .2 ); - fast_.Timestep ( decay * 2 ); + if( snail_.GetWeight() > 100 ) + snail_.Timestep( decay * .02 ); + if( slow_.GetWeight() > 30 ) + slow_.Timestep ( decay * .2 ); + if( fast_.GetWeight() > 10 ) + fast_.Timestep ( decay * 2 ); } // ******************************************************************************************* Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.h =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.h 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.h 2011-07-26 19:11:38 UTC (rev 9625) @@ -266,6 +266,7 @@ REAL GetAverage() const; //!< returns the average value REAL GetDataVariance() const; //!< returns the variance of the data ( average of (value-average)^2 ) REAL GetAverageVariance() const; //!< returns the expected variance of the returned average + REAL GetWeight() const; //!< returns the current weight void Timestep( REAL decay ); //!< lets all values decay, so they can be replaced by new ones void Add( REAL value, REAL weight=1 ); //!< adds a value to the average void Reset(); //!< resets average to zero Modified: armagetronad/trunk/armagetronad/src/tools/tError.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tError.cpp 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/src/tools/tError.cpp 2011-07-26 19:11:38 UTC (rev 9625) @@ -57,10 +57,10 @@ { std::cerr << caption << ": " << message << "\n"; st_Breakpoint(); - static bool error = true; // to disable the error if it is inconvenient right now and you think it may not be fatal + static bool error = false; // to disable the error if it is inconvenient right now and you think it may not be fatal if ( error ) { - throw 1; //tSimpleException( message, caption ); + // throw 1; //tSimpleException( message, caption ); exit(-1); } } Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2011-07-26 18:06:27 UTC (rev 9624) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2011-07-26 19:11:38 UTC (rev 9625) @@ -5331,7 +5331,7 @@ if ( correctPosSmooth.NormSquared() > .1f ) { std::cout << "Lag slide! " << correctPosSmooth << "\n"; - resimulate_ = true; +// resimulate_ = true; } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-08-02 02:53:06
|
Revision: 9639 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9639&view=rev Author: z-man Date: 2011-08-02 02:52:59 +0000 (Tue, 02 Aug 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9624 to 9638: ------------------------------------------------------------------------ r9638 | z-man | 2011-08-02 04:43:59 +0200 (Tue, 02 Aug 2011) | 2 lines Adding patch for server vardir sanity. ------------------------------------------------------------------------ r9637 | bazaaarmagetron | 2011-08-01 21:11:47 +0200 (Mon, 01 Aug 2011) | 2 lines Manuel Moos: Don't copy the whole root directory if visualc or codeblocks are not set. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9624&view=rev Modified Paths: -------------- armagetronad/trunk/build/WorkMakefile Added Paths: ----------- armagetronad/trunk/build/patches/ubuntu-vardir.patch Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9624 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9638 Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-08-02 02:43:59 UTC (rev 9638) +++ armagetronad/trunk/build/WorkMakefile 2011-08-02 02:52:59 UTC (rev 9639) @@ -364,6 +364,8 @@ bzr pull -d ../ubuntu || bzr branch lp:ubuntu/armagetronad ../ubuntu cp -ax ../ubuntu/debian $(UBUNTUSOURCEDIR)$*/debian patch -p0 -d $(UBUNTUSOURCEDIR)$* < patches/ubuntu.patch +# for later. Fixes var dir location of dedicated server, now it would break stuff. +# patch -p0 -d $(UBUNTUSOURCEDIR)$* < patches/ubuntu-vardir.patch # rebrand package # for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\./armagetronad./g" > $(UBUNTUSOURCEDIR)/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\.net/armagetronad.net/g" > $(UBUNTUSOURCEDIR)$*/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done Copied: armagetronad/trunk/build/patches/ubuntu-vardir.patch (from rev 9638, armagetronad/branches/0.2.8/build/patches/ubuntu-vardir.patch) =================================================================== --- armagetronad/trunk/build/patches/ubuntu-vardir.patch (rev 0) +++ armagetronad/trunk/build/patches/ubuntu-vardir.patch 2011-08-02 02:52:59 UTC (rev 9639) @@ -0,0 +1,18 @@ +=== modified file 'debian/armagetronad-dedicated.wrapper' +--- debian/armagetronad-dedicated.wrapper 2007-04-24 11:38:26 +0000 ++++ debian/armagetronad-dedicated.wrapper 2011-07-28 17:13:30 +0000 +@@ -5,11 +5,11 @@ + DATADIR=/usr/share/games/armagetronad + CONFDIR=/etc/armagetronad + +-CMDLINE="--datadir $DATADIR --configdir $CONFDIR -d" +- + # Source configuration variables. + . /etc/default/armagetronad-dedicated + ++CMDLINE="--datadir $DATADIR --configdir $CONFDIR --userdatadir $VARDIR -d" ++ + # Array for keeping track of start times. + declare -a STARTDATE_LOG + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-08-02 14:41:57
|
Revision: 9644 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9644&view=rev Author: z-man Date: 2011-08-02 14:41:51 +0000 (Tue, 02 Aug 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9638 to 9643: ------------------------------------------------------------------------ r9643 | bazaaarmagetron | 2011-08-02 14:46:30 +0200 (Tue, 02 Aug 2011) | 1 line Manuel Moos: Doing rebranding in place so patches can actually work. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9638&view=rev Modified Paths: -------------- armagetronad/trunk/build/WorkMakefile Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9638 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9514,9529-9643 Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2011-08-02 12:46:30 UTC (rev 9643) +++ armagetronad/trunk/build/WorkMakefile 2011-08-02 14:41:51 UTC (rev 9644) @@ -368,7 +368,7 @@ # patch -p0 -d $(UBUNTUSOURCEDIR)$* < patches/ubuntu-vardir.patch # rebrand package # for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\./armagetronad./g" > $(UBUNTUSOURCEDIR)/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done - for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\.net/armagetronad.net/g" > $(UBUNTUSOURCEDIR)$*/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done + for f in $(UBUNTUSOURCEDIR)$*/debian/*; do test -d $$f || sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\.net/armagetronad.net/g" --e "s/${PACKAGE}\.source/armagetronad.source/g" > $$f.out; mv $$f.out $$f; done chmod 755 $(UBUNTUSOURCEDIR)$*/debian/rules # build changelog DIST="`echo $* | sed -e s/^[0-9]*// -e s/.*~//`"; test -z $$DIST && DIST=hardy; sed -e "s/@distribution@/$$DIST/g" -e "s/@package@/$(PACKAGE)/g" -e "s/@version@/${DEBVERSION}$*/g" -e "s;@date@;$$(date -R);g" < doc/ubuntu-changelog.txt > $(UBUNTUSOURCEDIR)$*/debian/changelog This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |