// Analyze: modify and/or log a pocket private static Packet Analyze(Packet packet, IPEndPoint endPoint, Direction direction) { if (modifiedPackets.Contains(packet.Layout.Name)) { try { Hashtable changes = (Hashtable)modifiedPackets[packet.Layout.Name]; Hashtable blocks = PacketUtility.Unbuild(packet); foreach (BlockField blockField in changes.Keys) { PacketUtility.SetField(blocks, blockField.block, blockField.field, changes[blockField]); } packet = PacketBuilder.BuildPacket(packet.Layout.Name, protocolManager, blocks, packet.Data[0]); } catch (Exception e) { Console.WriteLine("failed to modify " + packet.Layout.Name + ": " + e.Message); Console.WriteLine(e.StackTrace); } } if (loggedPackets.Contains(packet.Layout.Name)) { LogPacket(packet, endPoint, direction); } return(packet); }