/// <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); }
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); } }
/// <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(); }
/// <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(); }
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); }
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)); }
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); }
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); }
protected override int GetLength(PacketParser parser, ParsedSegment parent) { throw new Exception(GetType().Name + " has no fixed length."); }
protected override int GetLength(PacketParser parser, ParsedSegment parent) { return(Length); }
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); }
public static ParsedSegment Parse(PacketIn packet, PacketSender sender, PacketDefinition def) { var parser = new PacketParser(packet, sender, def); parser.Parse(); return parser.ParsedPacket; }
public static ParsedSegment Parse(PacketIn packet, PacketSender sender) { var parser = new PacketParser(packet, sender); parser.Parse(); return parser.ParsedPacket; }
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(); } }