public class MSNTransactionFactory : TransactionFactory { public const int MSN_SB_PORT = 1863; public MSNTransactionFactory(DebugLogger logger) : base(logger) { } public override bool HandleSession(PacketStream stream) { if (stream.RemoteEndPoint.Port == MSN_SB_PORT) return HandleSwitchboardSession(stream); if (stream.GetBytesAvailable() < 8) return false; List magicLenSlices = new List(1); uint magicLen = stream.ReadU32LE(magicLenSlices); if (magicLen != 4) return false; List magicStrSlices = new List(1); string magicStr = stream.ReadCStringASCII(4, magicStrSlices); if (magicStr != "foo") return false; TransactionNode magicNode = new TransactionNode("MSNP2PDirectMagic"); magicNode.Description = "MSNP2PDirectMagic"; magicNode.AddField("MagicLength", Convert.ToString(magicLen), "Magic length.", magicLenSlices); magicNode.AddField("Magic", magicStr, "Magic string.", magicStrSlices); EmitNewTransactionNode(magicNode); return true; } protected bool HandleSwitchboardSession(PacketStream stream) { // FIXME return true; } }