public static TransferData Decode(G2Header root) { TransferData td = new TransferData(); if (G2Protocol.ReadPayload(root)) td.Block = Utilities.ExtractBytes(root.Data, root.PayloadPos, root.PayloadSize); G2Protocol.ResetPacket(root); G2Header child = new G2Header(root.Data); while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD) { if (!G2Protocol.ReadPayload(child)) continue; switch (child.Name) { case Packet_FileID: td.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos); break; case Packet_StartByte: td.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize); break; case Packet_Index: td.Index = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize); break; } } return td; }