private void TryParseRouting() { if (_routing != null || !RoutingPresent) { return; } List <GreSourceRouteEntry> entries = new List <GreSourceRouteEntry>(); int routingStartOffset = StartOffset + OffsetRouting; int entryOffset = routingStartOffset; int totalLength = StartOffset + Length; while (totalLength >= entryOffset) { GreSourceRouteEntry entry; if (entryOffset == routingStartOffset + RoutingOffset) { _activeSourceRouteEntryIndex = entries.Count; } if (!GreSourceRouteEntry.TryReadEntry(Buffer, ref entryOffset, totalLength - entryOffset, out entry)) { _isValidRouting = false; break; } if (entry == null) { break; } entries.Add(entry); } _routing = new ReadOnlyCollection <GreSourceRouteEntry>(entries); }
/// <summary> /// True iff the IP addresses are equal. /// </summary> protected override bool EqualsPayloads(GreSourceRouteEntry other) { return(Addresses.SequenceEqual(((GreSourceRouteEntryIp)other).Addresses)); }
/// <summary> /// True iff the AS numbers are equal. /// </summary> protected override bool EqualsPayloads(GreSourceRouteEntry other) { return(AsNumbers.SequenceEqual(((GreSourceRouteEntryAs)other).AsNumbers)); }