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;
}
}