All pastes #149468 Raw Edit

Something

public text v1 · immutable
#149468 ·published 2006-08-25 21:30 UTC
rendered paste body
    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<PacketSlice> magicLenSlices = new List<PacketSlice>(1);
            uint magicLen = stream.ReadU32LE(magicLenSlices);
            if (magicLen != 4)
                return false;

            List<PacketSlice> magicStrSlices = new List<PacketSlice>(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;
        }
    }