Exemplo n.º 1
0
        /// <summary>
        /// Encryptes the specified packet.
        /// </summary>
        public byte[] Encrypt(byte[] Packet)
        {
            int Add = 2;

            for (int I = 0; I < 24; I++)
            {
                int Val = Add + this.Nonce[I];
                this.Nonce[I] = (byte)Val;
                Add           = Val / 256;
            }

            return(PepperCrypto.SecretBox(Packet, this.Nonce, this.SecretKey));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Decryptes the specified packet.
        /// </summary>
        public byte[] Decrypt(byte[] Packet)
        {
            int Add = 2;

            for (int i = 0; i < 24; i++)
            {
                int Val = Add + this.Nonce[i];
                this.Nonce[i] = (byte)Val;
                Add           = Val / 256;
            }

            return(PepperCrypto.SecretBoxOpen(Packet, this.Nonce, this.SecretKey));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="Message">The message.</param>
        public void SendMessage(Message Message)
        {
            if (this.Device.Token.IsConnected)
            {
                if (Message.IsServerToClientMessage == false)
                {
                    Message.Encode();

                    byte[] Decrypted = Message.Stream.ToArray();
                    byte[] Encrypted = null;

                    if (this.SendEncrypter != null)
                    {
                        Encrypted = this.SendEncrypter.Encrypt(Decrypted);
                    }
                    else
                    {
                        if (this.PepperInit.State > 0)
                        {
                            if (this.PepperInit.State == 2)
                            {
                                this.PepperInit.ServerPublicKey = PepperFactory.PublicKey;
                                Encrypted = PepperCrypto.SendPepperLogin(ref this.PepperInit, Decrypted);
                            }
                        }
                        else
                        {
                            Encrypted = PepperCrypto.SendPepperAuthentification(ref this.PepperInit, Decrypted);
                        }
                    }

                    Message.Stream.SetByteArray(Encrypted);

                    NetworkTcp.Send(Message.ToBytes, this.Device.Token);
                }
                else
                {
                    Logging.Warning(this.GetType(), "ClientToServer != false at SendMessage(Message " + Message.Type + ").");
                }
            }
            // else
            {
                // Logging.Warning(this.GetType(), "[" + this.Device.BotId + "] IsConnected != true at SendMessage(Message " + Message.Type + ").");
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="Message">The message.</param>
        public void SendMessage(Message Message)
        {
            Logging.Info(typeof(NetworkTcp), "Sending " + Message.GetType().Name + ".");

            if (this.Device.Token.IsConnected)
            {
                if (Message.IsServerToClientMessage)
                {
                    Message.Encode();

                    byte[] Bytes = Message.Stream.ToArray();

                    if (this.SendEncrypter == null)
                    {
                        if (this.PepperInit.State > 0)
                        {
                            if (this.PepperInit.State == 1)
                            {
                                Bytes = PepperCrypto.SendPepperAuthentificationResponse(ref this.PepperInit, Bytes);
                            }
                            else
                            {
                                if (this.PepperInit.State == 3)
                                {
                                    Bytes = PepperCrypto.SendPepperLoginResponse(ref this.PepperInit, out this.SendEncrypter, out this.ReceiveEncrypter, Bytes);
                                }
                            }
                        }
                    }
                    else
                    {
                        Bytes = this.SendEncrypter.Encrypt(Bytes);
                    }

                    Message.Stream.SetByteArray(Bytes);

                    NetworkTcp.Send(this.WriteHeader(Message), this.Device.Token);
                    HandlerFactory.MessageHandle(this.Device, Message); // TODO : Probably call Task.Wait().
                }
                else
                {
                    Logging.Error(this.GetType(), "Message.IsServerToClientMessage != true at SendMessage(Message " + Message.Type + ").");
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        internal void SendMessage(Message Message)
        {
            if (Message.Device.Connected)
            {
                if (Message.IsServerToClientMessage)
                {
                    byte[] Bytes = Message.Data.ToArray();

                    if (this.SendEncrypter == null)
                    {
                        if (this.PepperInit.State > 0)
                        {
                            if (this.PepperInit.State == 1)
                            {
                                Bytes = PepperCrypto.SendPepperAuthentificationResponse(ref this.PepperInit, Bytes);
                            }
                            else
                            {
                                if (this.PepperInit.State == 3)
                                {
                                    Bytes = PepperCrypto.SendPepperLoginResponse(ref this.PepperInit, out this.SendEncrypter, out this.ReceiveEncrypter, Bytes);
                                }
                            }
                        }
                    }
                    else
                    {
                        Bytes = this.SendEncrypter.Encrypt(Bytes);
                    }

                    Message.Data.SetByteArray(Bytes);

                    Resources.TCPGateway.Send(Message);
                    Logging.Info(this.GetType(), "Packet " + ConsolePad.Padding(Message.GetType().Name) + "    sent to    " + Message.Device.Socket.RemoteEndPoint + ".");
                }
                else
                {
                    Logging.Info(this.GetType(), "SendMessage() - Trying to send a client to server message. (" + Message.Type + ")");
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="Message">The message.</param>
        public void SendMessage(Message Message)
        {
            Logging.Info(typeof(NetworkTcp), "Sending " + Message.GetType().Name + " to " + this.Device.Token.Socket.RemoteEndPoint + ".");

            if (this.Device.Token.IsConnected)
            {
                // Message.Encode();

                byte[] Bytes = Message.Stream.ToArray();

                if (this.SendEncrypter == null)
                {
                    if (this.PepperInit.State > 0)
                    {
                        if (this.PepperInit.State == 1)
                        {
                            Bytes = PepperCrypto.SendPepperAuthentificationResponse(ref this.PepperInit, Bytes);
                        }
                        else
                        {
                            if (this.PepperInit.State == 3)
                            {
                                Bytes = PepperCrypto.SendPepperLoginResponse(ref this.PepperInit, out this.SendEncrypter, out this.ReceiveEncrypter, Bytes);
                            }
                        }
                    }
                }
                else
                {
                    Bytes = this.SendEncrypter.Encrypt(Bytes);
                }

                Message.Stream.SetByteArray(Bytes);

                Logging.Info(this.GetType(), BitConverter.ToString(Message.ToBytes));

                NetworkTcp.Send(Message.ToBytes, this.Device.Token);
                HandlerFactory.MessageHandle(this.Device, Message).Wait();
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Receives the message.
        /// </summary>
        public void ReceiveMessage(short Type, short Version, byte[] Encrypted)
        {
            Logging.Info(this.GetType(), "ReceiveMessage(" + Type + ", " + Version + ", null);");

            byte[] Packet = null;

            if (this.ReceiveEncrypter == null)
            {
                if (this.PepperInit.State == 1)
                {
                    if (Type == 20100)
                    {
                        Packet = PepperCrypto.HandlePepperAuthentificationResponse(ref this.PepperInit, Encrypted);
                    }
                    else
                    {
                        Packet = Encrypted;
                    }
                }
                else
                {
                    if (this.PepperInit.State == 3)
                    {
                        if (Type == 20103 || Type == 22280)
                        {
                            Packet = PepperCrypto.HandlePepperLoginResponse(ref this.PepperInit, Encrypted, out this.SendEncrypter, out this.ReceiveEncrypter);
                        }
                    }
                }
            }
            else
            {
                Packet = this.ReceiveEncrypter.Decrypt(Encrypted);
            }

            if (Packet != null)
            {
                using (ByteStream Stream = new ByteStream(Packet))
                {
                    Message Message = MessageFactory.CreateMessage(Type, Stream);

                    if (Message != null)
                    {
                        Logging.Info(this.GetType(), "Receiving " + Message.GetType().Name + ".");

                        try
                        {
                            Message.Decode();
                        }
                        catch (Exception Exception)
                        {
                            Logging.Error(this.GetType(), "ReceiveMessage() - An error has been throwed when the message type " + Message.Type + " has been processed. " + Exception);
                        }

                        Handlers.Handlers.MessageHandle(this.Device, Message).ConfigureAwait(false);
                    }
                    else
                    {
                        Logging.Info(this.GetType(), BitConverter.ToString(Stream.ReadBytesWithoutLength(Stream.BytesLeft)));
                    }
                }
            }
            else
            {
                Logging.Warning(this.GetType(), "Packet == null at ReceiveMessage().");
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Receives the message.
        /// </summary>
        public void ReceiveMessage(short Type, short Version, byte[] Packet)
        {
            if (this.ReceiveEncrypter == null)
            {
                if (this.PepperInit.State == 0)
                {
                    if (Type == 10101)
                    {
                        this.SendEncrypter    = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce");
                        this.ReceiveEncrypter = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce");

                        Packet = this.ReceiveEncrypter.Decrypt(Packet);
                    }
                    else if (Type == 10100)
                    {
                        Packet = PepperCrypto.HandlePepperAuthentification(ref this.PepperInit, Packet);
                    }
                    else
                    {
                        Packet = null;
                    }
                }
                else
                {
                    if (this.PepperInit.State == 2)
                    {
                        Packet = Type == 10101 ? PepperCrypto.HandlePepperLogin(ref this.PepperInit, Packet) : null;
                    }
                    else
                    {
                        Packet = null;
                    }
                }
            }
            else
            {
                Packet = this.ReceiveEncrypter.Decrypt(Packet);
            }

            if (Packet != null)
            {
                using (ByteStream Stream = new ByteStream(Packet))
                {
                    Message Message = MessageFactory.CreateMessage(Type, Stream);

                    if (Message != null)
                    {
                        Logging.Info(this.GetType(), "Receiving " + Message.GetType().Name + " from " + this.Device.Token.Socket.RemoteEndPoint + ".");

                        try
                        {
                            Message.Decode();
                        }
                        catch (Exception Exception)
                        {
                            Logging.Error(this.GetType(), "ReceiveMessage() - An error has been throwed when the message type " + Message.Type + " has been processed. " + Exception);
                        }

                        HandlerFactory.MessageHandle(this.Device, Message).Wait();
                    }
                    else
                    {
                        // Logging.Info(this.GetType(), BitConverter.ToString(Stream.ReadBytes(Stream.BytesLeft)));

                        Message = new Message(Stream)
                        {
                            _Identifier = Type,
                            Version     = Version
                        };
                    }

                    Logging.Info(this.GetType(), BitConverter.ToString(Message.ToBytes));

                    Device.GameListener.SendMessage(Message);
                }
            }
            else
            {
                if (this.Device.State == State.Logged)
                {
                    Logging.Error(this.GetType(), "Packet == null at ReceiveMessage().");
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Receives the message.
        /// </summary>
        public void ReceiveMessage(short Type, short Version, byte[] Packet)
        {
            if (this.ReceiveEncrypter == null)
            {
                if (this.PepperInit.State == 0)
                {
                    if (Type == 10101)
                    {
                        this.SendEncrypter    = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce");
                        this.ReceiveEncrypter = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce");

                        Packet = this.ReceiveEncrypter.Decrypt(Packet);
                    }
                    else if (Type == 10100)
                    {
                        Packet = PepperCrypto.HandlePepperAuthentification(ref this.PepperInit, Packet);
                    }
                    else
                    {
                        Packet = null;
                    }
                }
                else
                {
                    if (this.PepperInit.State == 2)
                    {
                        Packet = Type == 10101 ? PepperCrypto.HandlePepperLogin(ref this.PepperInit, Packet) : null;
                    }
                    else
                    {
                        Packet = null;
                    }
                }
            }
            else
            {
                Packet = this.ReceiveEncrypter.Decrypt(Packet);
            }

            if (Packet != null)
            {
                if (this.Device.State != State.Logged)
                {
                    if (Type != 10100 && Type != 10101)
                    {
                        if (++this.InvalidMessageStateCnt >= 5)
                        {
                            NetworkTcp.Disconnect(this.Device.Token.AsyncEvent);
                        }

                        return;
                    }
                }

                using (ByteStream Stream = new ByteStream(Packet))
                {
                    Message Message = MessageFactory.CreateMessage(Type, Stream);

                    if (Message != null)
                    {
                        Logging.Info(this.GetType(), "Receiving " + Message.GetType().Name + ".");

                        if (this.RequestTime.CanHandleMessage(Message))
                        {
                            try
                            {
                                Message.Decode();
                            }
                            catch (Exception Exception)
                            {
                                Logging.Error(this.GetType(), "ReceiveMessage() - An error has been throwed when the message type " + Message.Type + " has been processed. " + Exception);
                            }

                            HandlerFactory.MessageHandle(this.Device, Message); // TODO : Probably call Task.Wait().
                        }
                    }
                    else
                    {
                        Logging.Info(this.GetType(), BitConverter.ToString(Stream.ReadBytes(Stream.BytesLeft)));
                    }
                }
            }
            else
            {
                if (this.Device.State == State.Logged)
                {
                    Logging.Error(this.GetType(), "Packet == null at ReceiveMessage().");
                }
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Receives the message.
        /// </summary>
        internal void ReceiveMessage(short Type, short Version, byte[] Packet)
        {
            if (this.ReceiveEncrypter == null)
            {
                if (this.PepperInit.State == 0)
                {
                    if (Type == 10101)
                    {
                        this.SendEncrypter    = new RC4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce");
                        this.ReceiveEncrypter = new RC4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce");

                        Packet = this.ReceiveEncrypter.Decrypt(Packet);
                    }
                    else if (Type == 10100)
                    {
                        Packet = PepperCrypto.HandlePepperAuthentification(ref this.PepperInit, Packet);
                    }
                    else
                    {
                        Packet = null;
                    }
                }
                else
                {
                    if (this.PepperInit.State == 2)
                    {
                        if (Type == 10101)
                        {
                            Packet = PepperCrypto.HandlePepperLogin(ref this.PepperInit, Packet);
                        }
                        else
                        {
                            Packet = null;
                        }
                    }
                    else
                    {
                        Packet = null;
                    }
                }
            }
            else
            {
                Packet = this.ReceiveEncrypter.Decrypt(Packet);
            }

            if (Packet != null)
            {
                Message Message = Factory.CreateMessage(Type, this.Device, new ByteStream(Packet));

                if (Message != null)
                {
                    try
                    {
                        Message.Decode();
                        Message.Process();
                    }
                    catch (Exception Exception)
                    {
                        Logging.Error(this.GetType(), "ReceiveMessage() - An error has been throwed when the message type " + Message.Type + " has been processed. " + Exception);
                    }
                }
            }
        }