/// <summary>
 /// Outdated, since strucutre changes too often - need to use PA to check actual size
 /// </summary>
 /// <param name="charEnumParser"></param>
 /// <param name="chars"></param>
 public static void CheckCharEnumSize(PacketParser charEnumParser, IEnumerable<CharacterRecord> chars)
 {
     //var totalLength = 1;			// char count
     //foreach (var record in chars)
     //{
     //    totalLength += record.Name.Length + 239;
     //}
     //Assert.AreEqual(totalLength, charEnumParser.Packet.ContentLength);
 }
Exemple #2
0
        public override void Parse(PacketParser parser, ParsedSegment parent)
        {
            if (Segments.Count > 1 && Name != null)
            {
                var parsedSegment = new ParsedSegment(this, null);
                parent.AddChild(parser, parsedSegment);
                parent = parsedSegment;
            }

            foreach (var segment in Segments)
            {
                segment.Parse(parser, parent);
            }
        }
Exemple #3
0
        /// <summary>
        /// Renders a single WoW - Packet
        /// </summary>
        public static void Dump(ParsablePacketInfo info, IndentTextWriter writer)
        {
            var packet = info.Packet;
            if (packet.PacketId.IsUpdatePacket)
            {
                ParsedUpdatePacket.Dump(info.Timestamp, packet.ReadBytes(packet.Length - packet.HeaderSize), false, writer,
                    packet.PacketId.RawId == (uint)RealmServerOpCode.SMSG_COMPRESSED_UPDATE_OBJECT);
            }
            else
            {
                var parser = new PacketParser(info);
                parser.Parse();
                parser.Dump(writer);
            }

            writer.WriteLine();
        }
Exemple #4
0
        /// <summary>
        /// Renders a single WoW - Packet
        /// </summary>
        public static void Dump(ParsablePacketInfo info, IndentTextWriter writer)
        {
            var packet = info.Packet;

            if (packet.PacketId.IsUpdatePacket)
            {
                ParsedUpdatePacket.Dump(info.Timestamp, packet.ReadBytes(packet.Length - packet.HeaderSize), false, writer,
                                        packet.PacketId.RawId == (uint)RealmServerOpCode.SMSG_COMPRESSED_UPDATE_OBJECT);
            }
            else
            {
                var parser = new PacketParser(info);
                parser.Parse();
                parser.Dump(writer);
            }

            writer.WriteLine();
        }
Exemple #5
0
        public override void Parse(PacketParser parser, ParsedSegment parent)
        {
            var list = new List <ParsedSegment>();

            while (parser.Packet.Position < parser.Packet.Length)
            {
                var element = new ParsedSegment(this, null);
                list.Add(element);

                foreach (var segment in Segments)
                {
                    segment.Parse(parser, element);
                }
            }

            var parsedSegment = new ParsedSegment(this, list.Count);

            parsedSegment.List.AddRange(list);
            parent.AddChild(parser, parsedSegment);
        }
Exemple #6
0
        public virtual void Parse(PacketParser parser, ParsedSegment parent)
        {
            var reader = SimpleTypes.GetReader(Type);
            var value  = reader(this, parser);

            if (SegmentType != null)
            {
                try
                {
                    value = Utility.ChangeType(value, SegmentType, true);
                }
                catch (OverflowException e)
                {
                    throw new Exception(string.Format("Wrong underlying type {0} for Enum {1} in PacketDefinition {2} in Segment {3}",
                                                      Type, m_segmentType, parser.Packet, Name), e);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Could not parse value " + value + " in Segment \"" + this + "\": " + e);
                }
            }

            parent.AddChild(parser, new ParsedSegment(this, value));
        }
Exemple #7
0
		public void AddChild(PacketParser parser, ParsedSegment segment)
		{
			var name = segment.Structure.NotEmptyName;
			parser.LastParsedSegmentsByName[name] = segment;
			if (m_subSegments.ContainsKey(name))
			{
				throw new Exception(string.Format("Segment '{0}' exists twice in PacketDefinition: " + parser.Packet.PacketId, name));
			}
			m_subSegments.Add(name, segment);
		}
Exemple #8
0
 static void WarnLength(SimpleType type, PacketSegmentStructure segment, PacketParser parser)
 {
     log.Warn(
         "Packet {0} has invalid definition and tries to read {1} with insufficient remaining length at {2}",
         parser.Packet.PacketId, type, segment);
 }
Exemple #9
0
 protected override int GetLength(PacketParser parser, ParsedSegment parent)
 {
     throw new Exception(GetType().Name + " has no fixed length.");
 }
Exemple #10
0
 protected override int GetLength(PacketParser parser, ParsedSegment parent)
 {
     return(Length);
 }
Exemple #11
0
 static void WarnLength(SimpleType type, PacketSegmentStructure segment, PacketParser parser)
 {
     log.Warn(
         "Packet {0} has invalid definition and tries to read {1} with insufficient remaining length at {2}",
         parser.Packet.PacketId, type, segment);
 }
Exemple #12
0
		public static ParsedSegment Parse(PacketIn packet, PacketSender sender, PacketDefinition def)
		{
			var parser = new PacketParser(packet, sender, def);
			parser.Parse();
			return parser.ParsedPacket;
		}
Exemple #13
0
		public static ParsedSegment Parse(PacketIn packet, PacketSender sender)
		{
			var parser = new PacketParser(packet, sender);
			parser.Parse();
			return parser.ParsedPacket;
		}
Exemple #14
0
		static void AddRealmPacket(IDictionary<RealmServerOpCode, LockfreeQueue<RealmReceiveInfo>> packets,
			PacketSender sender, PacketIn packet, TestFakeClient client)
		{
			var opCode = (RealmServerOpCode)packet.PacketId.RawId;

			LockfreeQueue<RealmReceiveInfo> queue;
			if (!packets.TryGetValue(opCode, out queue))
			{
				packets.Add(opCode, queue = new LockfreeQueue<RealmReceiveInfo>());
			}

			var def = PacketAnalyzer.GetDefinition(packet.PacketId, sender);
			if (def != null)
			{
				if (packet is RealmPacketIn)
				{
					packet = ((DisposableRealmPacketIn) packet).Copy();
				}
				var parser = new PacketParser(packet, sender);
				parser.Parse();
				queue.Enqueue(new RealmReceiveInfo { Parser = parser, Client = client });

				//packet.IncrementUsage();
			}
		}