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); } }