Beispiel #1
0
        private async Task <Boolean> RemoveDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e)
        {
            DHCPv6LeaseEntryDataModel entry = await GetLatestDHCPv6LeaseEntry(e);

            if (entry != null)
            {
                return(false);
            }

            DHCPv6LeaseEntries.Remove(entry);
            return(true);
        }
Beispiel #2
0
 private async Task <DHCPv6LeaseEntryDataModel> GetLatestDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e) =>
 await DHCPv6LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();
Beispiel #3
0
        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);
        }