コード例 #1
0
 protected static PacketRule[] InitRules(params PacketRule[] rules)
 {
     PacketRule[] final = new PacketRule[Constants.InternalPacketCount];
     foreach (PacketRule rule in rules)
     {
         final[rule.Packet.PacketId] = rule;
     }
     return(final);
 }
コード例 #2
0
        /// <summary>
        /// Handles an internal VSL packet. Ensure using the correct <see cref="CryptoAlgorithm"/>.
        /// </summary>
        internal Task <bool> HandleInternalPacketAsync(PacketRule rule, byte[] content)
        {
            IPacket packet = rule.Packet.New();

            try
            {
                using (PacketBuffer buf = PacketBuffer.CreateStatic(content))
                    packet.ReadPacket(buf);
            }
            catch (ArgumentException ex)
            {
                parent.ExceptionHandler.CloseConnection(ex);
                return(Task.FromResult(false));
            }
            return(packet.HandlePacketAsync(this));
        }
コード例 #3
0
 /// <summary>
 /// Validates an internal packet and returns the matching <see cref="PacketRule"/>.
 /// </summary>
 internal bool ValidatePacket(byte id, CryptoAlgorithm alg, out PacketRule rule)
 {
     rule = RegisteredPackets[id];
     if (!rule.Available)
     {
         parent.ExceptionHandler.CloseConnection("InvalidPacket",
                                                 $"Packet id {id} is no valid internal packet for this instance.",
                                                 nameof(PacketHandler), nameof(ValidatePacket));
         return(false);
     }
     if (!rule.VerifyAlgorithm(alg))
     {
         parent.ExceptionHandler.CloseConnection("WrongAlgorithm",
                                                 $"{rule.Packet} with {alg} is not allowed.",
                                                 nameof(PacketHandler), nameof(ValidatePacket));
         return(false);
     }
     return(true);
 }