public void Reset() { IsReassembled = false; Reassembled.Clear(); packetBuffer.Clear(); segBuffer.Clear(); }
/// <summary> /// If the given TPKT packet doesn't contain segments, it will be added into <see cref="IEC61850Packet.TpktPacketBuffer.Reassembled"/>, /// </summary> /// <param name="packet"></param> public void Add(TpktPacket packet) { if (!packet.HasSegments) { Reassembled.Add(packet); IsReassembled = true; } else { packetBuffer.Add(packet); if (packet.LastSegment) { Reassemble(); } } }
private void Reassemble(List <TpktSegment> segments, int index) { foreach (var i in segments) { if (i.StartWithHeader && segBuffer.Count > 0) { if (segments.Count > 1 || packetBuffer[index].Length > 0) { Reassembled.Add(new TpktPacket(segBuffer.ToArray(), packetBuffer[0].ParentPacket)); segBuffer.Clear(); } else { return; } } segBuffer.AddRange(i.Segment.ActualBytes()); } }