diff --git a/skyscraper8/Skyscraper/MpeEjectBfbs.cs b/skyscraper8/Skyscraper/MpeEjectBfbs.cs index 51f98a1..add86b3 100644 --- a/skyscraper8/Skyscraper/MpeEjectBfbs.cs +++ b/skyscraper8/Skyscraper/MpeEjectBfbs.cs @@ -111,9 +111,11 @@ namespace skyscraper8.Skyscraper return true; } - + + private bool sucessfulPass; public void HandlePacket(InternetHeader internetHeader, byte[] ipv4Packet) { + sucessfulPass = false; UserDatagram userDatagram = new UserDatagram(ipv4Packet); IPEndPoint source = new IPEndPoint(internetHeader.SourceAddress, userDatagram.SourcePort); IPEndPoint target = new IPEndPoint(internetHeader.DestinationAddress, userDatagram.DestinationPort); @@ -125,12 +127,39 @@ namespace skyscraper8.Skyscraper if (ms.ReadUInt8() != 0x10) return; - throw new NotImplementedException(); + if (sessions == null) + sessions = new List(); + + Session session = sessions.Find(x => x.SourceAddress.Equals(source) && x.TargetAddress.Equals(target)); + if (session != null) + { + if (session.ContinuityCounter >= 3) + { + while (ms.GetAvailableBytes() >= 188) + { + byte[] readBytes = ms.ReadBytes(188); + subTsHandler.OnSubTsPacket(session, readBytes); + sucessfulPass = true; + } + return; + } + else + { + session.Touch(sequence); + return; + } + } + else + { + session = new Session(source, target, sequence); + sessions.Add(session); + return; + } } public bool StopProcessingAfterThis() { - throw new NotImplementedException(); + return sucessfulPass; } } }