Пример #1
0
        /// <summary>
        /// Áбí·þÎñ
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void Auth_HandleRealmList(NetState netState, PacketReader packetReader)
        {
            AuthExtendData extendData = netState.GetComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID);

            if (extendData == null)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleRealmList(...) - extendData == null error!");
                return;
            }

            if (extendData.IsLoggedIn == false)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleRealmList(...) - extendData.IsLoggedIn == false error!");
                return;
            }

            if (extendData.IsAuthenticated == false)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleRealmList(...) - extendData.IsAuthenticated == false error!");
                return;
            }

            byte iCommandID = packetReader.ReadByte();
            uint iUnk       = packetReader.ReadUInt32();

            netState.Send(new Auth_RealmListResult());
        }
Пример #2
0
        /// <summary>
        /// 登陆握手
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void Auth_HandleAuthChallenge(NetState netState, PacketReader packetReader)
        {
            AuthExtendData extendData = netState.GetComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID);

            if (extendData == null)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleAuthChallenge(...) - extendData == null error!");
                return;
            }

            if (extendData.IsLoggedIn == true)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleAuthChallenge(...) - extendData.IsLoggedIn == false error!");
                return;
            }

            extendData.AuthChallenge.AuthLogonChallenge = AuthLogonChallenge.ReadAuthLogonChallenge(packetReader);

            // 版本验证
            if (extendData.AuthChallenge.AuthLogonChallenge.Build > (ushort)CLIENT_VERSIONS.CLIENT_MAX || extendData.AuthChallenge.AuthLogonChallenge.Build < (ushort)CLIENT_VERSIONS.CLIENT_MIN)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_WRONG_BUILD_NUMBER));
                return;
            }

            // 帐号是否存在
            WowAccount wowAccount = WowAccountHandler.GetAccount(extendData.AuthChallenge.AuthLogonChallenge.AccountName);

            if (wowAccount == null)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_NO_ACCOUNT));
                return;
            }
            extendData.WowAccount = wowAccount;

            // 帐号是否停用
            if (wowAccount.Banned)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_ACCOUNT_CLOSED));
                return;
            }

            // 帐号是否在线
            if (wowAccount.Locked)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_ACCOUNT_FREEZED));
                return;
            }

            // 成功 更新IP
            WowAccountHandler.UpdateAccountLastIP(wowAccount.AccountName, netState.NetAddress.Address.ToString());

            // 登陆成功
            extendData.IsLoggedIn = true;

            // 获取SRP的Key
            extendData.SRP = new SecureRemotePassword(true, wowAccount.AccountName, wowAccount.Password);

            netState.Send(new Auth_AuthChallengeResult(extendData.SRP));
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="newNetState"></param>
        internal static void AuthInitializeNetState(object sender, NetStateInitEventArgs netStateInit)
        {
            if (netStateInit.NetStateInit != null)
            {
                // 初始化客户端
                AuthExtendData extendData = new AuthExtendData();

                netStateInit.NetStateInit.RegisterComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID, extendData);

                // 获取包的ID
                netStateInit.NetStateInit.ReceiveBuffer.ThreadEventPacketID += new EventHandler <PacketIdInfoEventArgs>(AuthGetPacketID);

                // 截获输出的信息包
                netStateInit.NetStateInit.EventSendPacket += new EventHandler <NetStateSendPacketEventArgs>(AuthSendPacket);
            }
            else
            {
                Debug.WriteLine("ProcessNet.Auth_InitializeNetState(...) - newNetState != null && newNetState.ExtendData == null error!");
            }
        }
Пример #4
0
        /// <summary>
        /// 登陆验证
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void Auth_HandleAuthProof(NetState netState, PacketReader packetReader)
        {
            AuthExtendData extendData = netState.GetComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID);

            if (extendData == null)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_AuthProof(...) - extendData == null error!");
                return;
            }

            if (extendData.IsLoggedIn == false)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_AuthProof(...) - extendData.IsLoggedIn == false error!");
                return;
            }

            extendData.AuthProof.AuthLogonProof = AuthLogonProof.ReadAuthLogonProof(packetReader);

            extendData.SRP.PublicEphemeralValueA = extendData.AuthProof.AuthLogonProof.PublicEphemeralValueA;

            if (extendData.SRP.IsClientProofValid(extendData.AuthProof.AuthLogonProof.ClientProof) == false)
            {
                // Authentication failed.
                //netState.Send( new RealmList_AuthProofResultError( RealmListErrorsInfo.LOGIN_NO_ACCOUNT ) );
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_NO_ACCOUNT));
                return;
            }

            // 添加到全局的Key中
            SrpHandler.AddSRP(extendData.WowAccount.AccountName, extendData.SRP);

            // we're authenticated now :)
            extendData.IsAuthenticated = true;

            netState.Send(new Auth_AuthProofResult(extendData.SRP));
        }
Пример #5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="newNetState"></param>
        internal static void AuthInitializeNetState( object sender, NetStateInitEventArgs netStateInit )
        {
            if ( netStateInit.NetStateInit != null )
            {
                // 初始化客户端
                AuthExtendData extendData = new AuthExtendData();

                netStateInit.NetStateInit.RegisterComponent<AuthExtendData>( AuthExtendData.COMPONENT_ID, extendData );

                // 获取包的ID
                netStateInit.NetStateInit.ReceiveBuffer.ThreadEventPacketID += new EventHandler<PacketIdInfoEventArgs>( AuthGetPacketID );
                
                // 截获输出的信息包
                netStateInit.NetStateInit.EventSendPacket += new EventHandler<NetStateSendPacketEventArgs>( AuthSendPacket );
            }
            else
                Debug.WriteLine( "ProcessNet.Auth_InitializeNetState(...) - newNetState != null && newNetState.ExtendData == null error!" );
        }