private async Task <Boolean> RemoveDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e) { DHCPv6LeaseEntryDataModel entry = await GetLatestDHCPv6LeaseEntry(e); if (entry != null) { return(false); } DHCPv6LeaseEntries.Remove(entry); return(true); }
private async Task <DHCPv6LeaseEntryDataModel> GetLatestDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e) => await DHCPv6LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();
private async Task <Boolean?> ProjectDHCPv6PacketAndLeaseRelatedEvents(DomainEvent @event) { Boolean?hasChanges = new Boolean?(); switch (@event) { case DHCPv6PacketHandledEvent e: DHCPv6PacketHandledEntryDataModel entry = new DHCPv6PacketHandledEntryDataModel { HandledSuccessfully = e.WasSuccessfullHandled, ErrorCode = e.ErrorCode, Id = Guid.NewGuid(), ScopeId = e.ScopeId, Timestamp = e.Timestamp, RequestSize = e.Request.GetSize(), RequestType = e.Request.GetInnerPacket().PacketType, RequestSource = e.Request.Header.Source.ToString(), RequestDestination = e.Request.Header.Destionation.ToString(), RequestStream = e.Request.GetAsStream(), }; if (e.Response != null) { entry.ResponseSize = e.Response.GetSize(); entry.ResponseType = e.Response.GetInnerPacket().PacketType; entry.ResponseSource = e.Response.Header.Source.ToString(); entry.ResponseDestination = e.Response.Header.Destionation.ToString(); entry.ResponseStream = e.Response.GetAsStream(); } entry.SetTimestampDates(); DHCPv6PacketEntries.Add(entry); hasChanges = true; break; case DHCPv6LeaseCreatedEvent e: { DHCPv6LeaseEntryDataModel leaseEntry = new DHCPv6LeaseEntryDataModel { Id = Guid.NewGuid(), Address = e.Address.ToString(), Start = e.StartedAt, End = e.ValidUntil, EndOfRenewalTime = e.StartedAt + e.RenewalTime, EndOfPreferredLifetime = e.StartedAt + e.PreferredLifetime, LeaseId = e.EntityId, ScopeId = e.ScopeId, Prefix = e.HasPrefixDelegation == true?e.DelegatedNetworkAddress.ToString() : null, PrefixLength = e.HasPrefixDelegation == true ? e.PrefixLength : (Byte)0, Timestamp = e.Timestamp, }; DHCPv6LeaseEntries.Add(leaseEntry); hasChanges = true; } break; case DHCPv6LeaseExpiredEvent e: hasChanges = await UpdateEndToDHCPv6LeaseEntry(e, ReasonToEndLease.Expired); break; case DHCPv6LeaseActivatedEvent e: hasChanges = await UpdateLastestDHCPv6LeaseEntry(e, (leaseEntry) => { leaseEntry.IsActive = true; }); break; case DHCPv6LeasePrefixAddedEvent e: hasChanges = await UpdateLastestDHCPv6LeaseEntry(e, (leaseEntry) => { leaseEntry.Prefix = e.NetworkAddress.ToString(); leaseEntry.PrefixLength = e.PrefixLength; }); break; case DHCPv6LeaseCanceledEvent e: hasChanges = await UpdateEndToDHCPv6LeaseEntry(e, ReasonToEndLease.Canceled); break; case DHCPv6LeaseReleasedEvent e: hasChanges = await UpdateEndToDHCPv6LeaseEntry(e, ReasonToEndLease.Released); break; case DHCPv6LeaseRenewedEvent e: hasChanges = await UpdateLastestDHCPv6LeaseEntry(e, (leaseEntry) => { leaseEntry.End = e.End; if (e.Reset == true) { leaseEntry.IsActive = false; } leaseEntry.EndOfRenewalTime = e.Timestamp + e.RenewSpan; leaseEntry.EndOfPreferredLifetime = e.Timestamp + e.ReboundSpan; }); break; case DHCPv6LeaseRevokedEvent e: hasChanges = await UpdateEndToDHCPv6LeaseEntry(e, ReasonToEndLease.Revoked); break; case DHCPv6LeaseRemovedEvent e: hasChanges = await RemoveDHCPv6LeaseEntry(e); break; default: hasChanges = null; break; } return(hasChanges); }