Exemple #1
0
        public override byte[] ReadLine()
        {
            if (base.EndOfMessage)
            {
                throw new InvalidOperationException("End of the message was reached");
            }
            int endOfLinePosition = base.GetEndOfLinePosition(this._buffer, 0);

            if (this._reachedBoundary == EBoundaryType.NotBoundary)
            {
                while (endOfLinePosition == -1)
                {
                    byte[] line = base._sourceReader.ReadLine();
                    if (base._sourceReader.EndOfMessage)
                    {
                        base._endOfMessage         = true;
                        base._finalBoundaryReached = true;
                        break;
                    }
                    EBoundaryType type = BoundaryChecker.CheckBoundary(line, base._boundary);
                    if (type != EBoundaryType.NotBoundary)
                    {
                        this._reachedBoundary = type;
                        byte[] buffer2 = this._buffer.ToArray();
                        this._buffer.Clear();
                        return(buffer2);
                    }
                    byte[] collection = MailMessageRFCDecoder.DecodeFromBase64(line);
                    this._buffer.AddRange(collection);
                    endOfLinePosition = base.GetEndOfLinePosition(this._buffer, (this._buffer.Count - collection.Length) - 1);
                }
            }
            else
            {
                base._endOfMessage         = true;
                base._finalBoundaryReached = this._reachedBoundary == EBoundaryType.Final;
                return(null);
            }
            List <byte> range = this._buffer.GetRange(0, endOfLinePosition);

            this._buffer.RemoveRange(0, endOfLinePosition + 2);
            return(range.ToArray());
        }
        public virtual void ParseFromBase64(IMessageReader reader, ContentType contentType, ContentDisposition contentDisposition, string boundary)
        {
            byte[] buffer;
Label_0000:
            buffer = reader.ReadLine();
            if (!reader.EndOfMessage)
            {
                switch (BoundaryChecker.CheckBoundary(buffer, boundary))
                {
                case EBoundaryType.NotBoundary:
                {
                    byte[] data = MailMessageRFCDecoder.DecodeFromBase64(buffer);
                    this.ContentWriter.Write(data);
                    goto Label_0000;
                }

                case EBoundaryType.Final:
                    this.RaiseFinalBoundaryReached();
                    break;
                }
            }
        }