diff options
| -rw-r--r-- | src/trinityrealm/AuthCodes.h | 15 | ||||
| -rw-r--r-- | src/trinityrealm/AuthSocket.cpp | 33 | ||||
| -rw-r--r-- | src/trinityrealm/AuthSocket.h | 1 | ||||
| -rw-r--r-- | src/trinityrealm/CMakeLists.txt | 1 | 
4 files changed, 26 insertions, 24 deletions
diff --git a/src/trinityrealm/AuthCodes.h b/src/trinityrealm/AuthCodes.h index 53ae2236bcd..e0bfcf96ce7 100644 --- a/src/trinityrealm/AuthCodes.h +++ b/src/trinityrealm/AuthCodes.h @@ -72,8 +72,19 @@ enum LoginResult  //2.4.3 build 8606  //3.1.3 build 9947  //3.1.3 build 10146 Chinese build -//3.2.2a build 10505 -#define EXPECTED_TRINITY_CLIENT_BUILD        {10505, 10146, 9947, 8606, 5875, 6005, 0} +#define POST_BC_ACCEPTED_CLIENT_BUILD                 {10505, 10146, 9947, 8606, 0} +#define PRE_BC_ACCEPTED_CLIENT_BUILD                  {5875, 6005, 0} + +#define POST_BC_EXP_FLAG                              0x2 +#define PRE_BC_EXP_FLAG                               0x1 +#define NO_VALID_EXP_FLAG                             0x0 + +namespace AuthHelper +{ +    bool IsAcceptedClientBuild(int build); +    bool IsPostBCAcceptedClientBuild(int build); +    bool IsPreBCAcceptedClientBuild(int build); +};  #endif diff --git a/src/trinityrealm/AuthSocket.cpp b/src/trinityrealm/AuthSocket.cpp index bd79fc5d207..a19d16106f3 100644 --- a/src/trinityrealm/AuthSocket.cpp +++ b/src/trinityrealm/AuthSocket.cpp @@ -379,6 +379,7 @@ bool AuthSocket::_HandleLogonChallenge()      _login = (const char*)ch->I;      _build = ch->build; +    _expversion = (AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : NO_VALID_EXP_FLAG) + (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG);      ///- Normalize account name      //utf8ToUpperOnlyLatin(_login); -- client already send account in expected form @@ -549,22 +550,10 @@ bool AuthSocket::_HandleLogonProof()      sAuthLogonProof_C lp;      ibuf.Read((char *)&lp, sizeof(sAuthLogonProof_C)); -    ///- Check if the client has one of the expected version numbers -    bool valid_version = false; -    int accepted_versions[] = EXPECTED_TRINITY_CLIENT_BUILD; -    for (int i = 0; accepted_versions[i]; ++i) -    { -        if (_build == accepted_versions[i]) -        { -            valid_version = true; -            break; -        } -    } -      /// <ul><li> If the client has no valid version -    if (!valid_version) +    if (_expversion == NO_VALID_EXP_FLAG)      { -        ///- Check if we have the apropriate patch on the disk +        ///- Check if we have the appropriate patch on the disk          // 24 = len("./patches/65535enGB.mpq")+1          char tmp[24]; @@ -706,7 +695,7 @@ bool AuthSocket::_HandleLogonProof()          sha.UpdateBigNumbers(&A, &M, &K, NULL);          sha.Finalize(); -        if (_build == 8606 || _build == 9947 || _build == 10146 || _build == 10505)//2.4.3, 3.1.3 and 3.2.2a clients (10146 is Chinese build for 3.1.3) +        if (_expversion & POST_BC_EXP_FLAG)//2.4.3 and 3.1.3 clients (10146 is Chinese build for 3.1.3)          {              sAuthLogonProof_S proof;              memcpy(proof.M2, sha.GetDigest(), 20); @@ -909,14 +898,14 @@ bool AuthSocket::_HandleRealmList()      RealmList built_realmList;      for (rlm = m_realmList.begin(); rlm != m_realmList.end(); ++rlm)      { -        if (_build == 8606 || _build == 9947 || _build == 10146 || _build == 10505)//2.4.3, 3.1.3 and 3.2.2a clients +        if ( _expversion & POST_BC_EXP_FLAG )//2.4.3 and 3.1.3 cliens          {              if (rlm->second.gamebuild == _build)                  built_realmList.AddRealm(rlm->second);          } -        else if (_build == 5875 || _build == 6005)//1.12.1 and 1.12.2 clients are compatible with eachother +        else if ( _expversion & PRE_BC_EXP_FLAG )//1.12.1 and 1.12.2 clients are compatible with eachother          { -            if (rlm->second.gamebuild == 5875 || rlm->second.gamebuild == 6005) +            if ( AuthHelper::IsPreBCAcceptedClientBuild ( rlm->second.gamebuild ) )                  built_realmList.AddRealm(rlm->second);          } @@ -925,7 +914,7 @@ bool AuthSocket::_HandleRealmList()      ///- Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm)      ByteBuffer pkt;      pkt << (uint32) 0; -    if (_build == 8606 || _build == 9947 || _build == 10146 || _build == 10505)//only 2.4.3, 3.1.3 and 3.2.2a clients +    if (  _expversion & POST_BC_EXP_FLAG )//only 2.4.3 and 3.1.3 cliens          pkt << (uint16) built_realmList.size();      else          pkt << (uint32) built_realmList.size(); @@ -948,7 +937,7 @@ bool AuthSocket::_HandleRealmList()          uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0;          pkt << i->second.icon;                             // realm type -        if (i->second.gamebuild == 10505 || i->second.gamebuild == 9947 || i->second.gamebuild == 10146 || i->second.gamebuild == 8606)//only 2.4.3, 3.1.3 and 3.2.2a clients +        if ( _expversion & POST_BC_EXP_FLAG )//only 2.4.3 and 3.1.3 cliens              pkt << lock;                                       // if 1, then realm locked          pkt << i->second.color;                            // if 2, then realm is offline          pkt << i->first; @@ -956,13 +945,13 @@ bool AuthSocket::_HandleRealmList()          pkt << i->second.populationLevel;          pkt << AmountOfCharacters;          pkt << i->second.timezone;                          // realm category -        if (i->second.gamebuild == 10505 || i->second.gamebuild == 9947 || i->second.gamebuild == 10146 || i->second.gamebuild == 8606)//2.4.3, 3.1.3 and 3.2.2a clients +        if ( _expversion & POST_BC_EXP_FLAG )//2.4.3 and 3.1.3 clients              pkt << (uint8) 0x2C;                                // unk, may be realm number/id?          else              pkt << (uint8) 0x0; //1.12.1 and 1.12.2 clients      } -    if (_build == 10505 || _build == 9947 || _build == 10146 || _build == 8606)//2.4.3, 3.1.3 and 3.2.2a clients +    if ( _expversion & POST_BC_EXP_FLAG )//2.4.3 and 3.1.3 cliens      {          pkt << (uint8) 0x10;          pkt << (uint8) 0x00; diff --git a/src/trinityrealm/AuthSocket.h b/src/trinityrealm/AuthSocket.h index ecfdd159000..474ead86599 100644 --- a/src/trinityrealm/AuthSocket.h +++ b/src/trinityrealm/AuthSocket.h @@ -79,6 +79,7 @@ class AuthSocket: public TcpSocket          // between enUS and enGB, which is important for the patch system          std::string _localizationName;          uint16 _build; +        uint8 _expversion;          AccountTypes _accountSecurityLevel;  };  #endif diff --git a/src/trinityrealm/CMakeLists.txt b/src/trinityrealm/CMakeLists.txt index 85c2120b5da..e39dc088e90 100644 --- a/src/trinityrealm/CMakeLists.txt +++ b/src/trinityrealm/CMakeLists.txt @@ -1,6 +1,7 @@  ########### next target ###############  SET(trinity-realm_SRCS +AuthCodes.cpp  AuthCodes.h  AuthSocket.cpp  AuthSocket.h  | 
