Esempio n. 1
0
        protected override bool CalculateIsValid()
        {
            if (this.Length < 8 || !this.IsChecksumCorrect)
            {
                return(false);
            }
            switch (this.MessageType)
            {
            case IgmpMessageType.MembershipQuery:
                switch (this.QueryVersion)
                {
                case IgmpQueryVersion.Version1:
                case IgmpQueryVersion.Version2:
                    return(this.Length == 8);

                case IgmpQueryVersion.Version3:
                    return(this.Length == IgmpDatagram.GetQueryVersion3Length((int)this.NumberOfSources));

                default:
                    return(false);
                }

            case IgmpMessageType.MembershipReportVersion1:
                if (this.Length == 8)
                {
                    return((int)this.MaxResponseCode == 0);
                }
                return(false);

            case IgmpMessageType.MembershipReportVersion2:
            case IgmpMessageType.LeaveGroupVersion2:
                return(this.Length == 8);

            case IgmpMessageType.MembershipReportVersion3:
                if ((int)this.MaxResponseCode == 0 && this.Length == 8 + Enumerable.Sum <IgmpGroupRecordDatagram>((IEnumerable <IgmpGroupRecordDatagram>) this.GroupRecords, (Func <IgmpGroupRecordDatagram, int>)(record => record.Length)))
                {
                    return(Enumerable.All <IgmpGroupRecordDatagram>((IEnumerable <IgmpGroupRecordDatagram>) this.GroupRecords, (Func <IgmpGroupRecordDatagram, bool>)(record => record.IsValid)));
                }
                return(false);

            default:
                return(false);
            }
        }