Ejemplo n.º 1
0
        private void InternalParse(byte[] buffer, IMailboxSignatureSectionProcessor sectionProcessor)
        {
            int i = 0;

            while (i < buffer.Length)
            {
                MailboxSignatureSectionMetadata mailboxSignatureSectionMetadata = MailboxSignatureSectionMetadata.Parse(buffer, ref i);
                if (mailboxSignatureSectionMetadata.Length > buffer.Length - i)
                {
                    throw new ArgumentException("Metadata declares length past our buffer end.");
                }
                int  num  = i;
                bool flag = sectionProcessor.Process(mailboxSignatureSectionMetadata, buffer, ref i);
                if (i - num != mailboxSignatureSectionMetadata.Length)
                {
                    throw new ArgumentException("Parsed more data than declared in metadata.");
                }
                if (flag)
                {
                    if ((from section in this.sections
                         select section.Metadata.Type).Contains(mailboxSignatureSectionMetadata.Type))
                    {
                        throw new ArgumentException("Same section appears more than once.");
                    }
                    this.sections.Add(new MailboxSignatureSectionsContainer.SignatureSection(mailboxSignatureSectionMetadata, new ArraySegment <byte>(buffer, num, mailboxSignatureSectionMetadata.Length)));
                }
            }
        }
Ejemplo n.º 2
0
        public static MailboxSignatureSectionsContainer Parse(byte[] buffer, IMailboxSignatureSectionProcessor sectionProcessor)
        {
            MailboxSignatureSectionsContainer mailboxSignatureSectionsContainer = new MailboxSignatureSectionsContainer();

            mailboxSignatureSectionsContainer.InternalParse(buffer, sectionProcessor);
            return(mailboxSignatureSectionsContainer);
        }