diff --git a/docs/pokerth.asn1 b/docs/pokerth.asn1 index 89e74cd2..585fccc7 100644 --- a/docs/pokerth.asn1 +++ b/docs/pokerth.asn1 @@ -339,7 +339,7 @@ NetGameInfo ::= SEQUENCE { }, proposedGuiSpeed INTEGER(1..11), delayBetweenHands INTEGER(5..20), -- These are seconds - playerActionTimeout INTEGER(5..60), -- These are seconds + playerActionTimeout INTEGER(0..60), -- These are seconds firstSmallBlind INTEGER(1..20000), endRaiseSmallBlindValue INTEGER(0..1000000), startMoney INTEGER(1..1000000), diff --git a/src/net/common/servergame.cpp b/src/net/common/servergame.cpp index 4a445d29..162ce6af 100644 --- a/src/net/common/servergame.cpp +++ b/src/net/common/servergame.cpp @@ -1002,9 +1002,16 @@ ServerGame::CheckPassword(const string &password) const } bool -ServerGame::CheckSettings(const GameData &data, const string &password) +ServerGame::CheckSettings(const GameData &data, const string &password, ServerMode mode) { bool retVal = true; + if (mode != SERVER_MODE_LAN) + { + if (data.playerActionTimeoutSec < 5) + { + retVal = false; + } + } if (data.gameType == GAME_TYPE_RANKING) { if ((data.startMoney != RANKING_GAME_START_CASH) diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index 3a636744..817fb7c1 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -1315,10 +1315,13 @@ ServerGameStateWaitPlayerAction::Enter(boost::shared_ptr server) int timeoutSec = server->GetGameData().playerActionTimeoutSec + SERVER_PLAYER_TIMEOUT_ADD_DELAY_SEC; #endif - server->GetStateTimer1().expires_from_now(boost::posix_time::seconds(timeoutSec)); - server->GetStateTimer1().async_wait( - boost::bind( - &ServerGameStateWaitPlayerAction::TimerTimeout, this, boost::asio::placeholders::error, server)); + if (timeoutSec != SERVER_PLAYER_TIMEOUT_ADD_DELAY_SEC) // minimum value means unlimited thinking time + { + server->GetStateTimer1().expires_from_now(boost::posix_time::seconds(timeoutSec)); + server->GetStateTimer1().async_wait( + boost::bind( + &ServerGameStateWaitPlayerAction::TimerTimeout, this, boost::asio::placeholders::error, server)); + } } void diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 02e4098f..ff22e96b 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -1405,7 +1405,7 @@ ServerLobbyThread::HandleNetPacketCreateGame(SessionWrapper session, const std:: { SendJoinGameFailed(session.sessionData, gameId, NTF_NET_JOIN_GUEST_FORBIDDEN); } - else if (!ServerGame::CheckSettings(tmpData, password)) + else if (!ServerGame::CheckSettings(tmpData, password, GetServerMode())) { SendJoinGameFailed(session.sessionData, gameId, NTF_NET_JOIN_INVALID_SETTINGS); } diff --git a/src/net/servergame.h b/src/net/servergame.h index fa72eac2..88588931 100644 --- a/src/net/servergame.h +++ b/src/net/servergame.h @@ -70,7 +70,7 @@ public: bool IsPasswordProtected() const; bool CheckPassword(const std::string &password) const; - static bool CheckSettings(const GameData &data, const std::string &password); + static bool CheckSettings(const GameData &data, const std::string &password, ServerMode mode); const GameData &GetGameData() const; boost::shared_ptr GetPlayerDataByUniqueId(unsigned playerId) const; diff --git a/src/third_party/asn1/NetGameInfo.c b/src/third_party/asn1/NetGameInfo.c index dab3d377..2f46f44c 100644 --- a/src/third_party/asn1/NetGameInfo.c +++ b/src/third_party/asn1/NetGameInfo.c @@ -349,7 +349,7 @@ memb_playerActionTimeout_constraint_1(asn_TYPE_descriptor_t *td, const void *spt value = *(const long *)sptr; - if((value >= 5 && value <= 60)) { + if((value >= 0 && value <= 60)) { /* Constraint check succeeded */ return 0; } else {