/// <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)); }
/// <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)); }
/// <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 + ")."); } }
/// <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 + ")."); } } }
/// <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 + ")"); } } }
/// <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(); } }
/// <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()."); } }
/// <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()."); } } }
/// <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()."); } } }
/// <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); } } } }