Ejemplo n.º 1
0
        private void StartGroup(MimeGroup group)
        {
            MimeWriteState mimeWriteState = this.state;

            switch (mimeWriteState)
            {
            case MimeWriteState.Complete:
            case MimeWriteState.StartPart:
                break;

            default:
                switch (mimeWriteState)
                {
                case MimeWriteState.PartContent:
                case MimeWriteState.EndPart:
                    break;

                default:
                    if (this.lastHeader == null || !(this.lastHeader is AddressHeader))
                    {
                        throw new InvalidOperationException(Strings.CannotWriteGroupStartHere);
                    }
                    this.state = MimeWriteState.GroupRecipients;
                    this.lastHeader.InternalAppendChild(group);
                    return;
                }
                break;
            }
            throw new InvalidOperationException(Strings.CannotWriteGroupStartHere);
        }
Ejemplo n.º 2
0
        private void WriteHeader(Header header)
        {
            MimeWriteState mimeWriteState = this.state;

            switch (mimeWriteState)
            {
            case MimeWriteState.Initial:
            case MimeWriteState.Complete:
                break;

            default:
                switch (mimeWriteState)
                {
                case MimeWriteState.PartContent:
                case MimeWriteState.EndPart:
                    break;

                default:
                    this.state = MimeWriteState.Headers;
                    this.FlushHeader();
                    this.lastHeader = header;
                    return;
                }
                break;
            }
            throw new InvalidOperationException(Strings.CannotWriteHeadersHere);
        }
Ejemplo n.º 3
0
        public void StartPart()
        {
            this.AssertOpen();
            MimeWriteState mimeWriteState = this.state;

            if (mimeWriteState == MimeWriteState.Complete || mimeWriteState == MimeWriteState.PartContent)
            {
                throw new InvalidOperationException(Strings.CannotStartPartHere);
            }
            if (this.partDepth != 0)
            {
                this.FlushHeader();
                if (!this.currentPart.IsMultipart)
                {
                    throw new InvalidOperationException(Strings.NonMultiPartPartsCannotHaveChildren);
                }
                if (!this.foundMimeVersion && this.forceMime && this.partDepth == 1)
                {
                    this.WriteMimeVersion();
                }
                this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
                this.WriteBoundary(this.currentPart.Boundary, false);
            }
            MimeWriter.PartData partData = default(MimeWriter.PartData);
            this.PushPart(ref partData);
            this.state                   = MimeWriteState.StartPart;
            this.contentWritten          = false;
            this.contentTransferEncoding = ContentTransferEncoding.SevenBit;
        }
Ejemplo n.º 4
0
        public MimeWriter GetEmbeddedMessageWriter()
        {
            this.AssertOpen();
            if (this.contentWritten)
            {
                throw new InvalidOperationException(Strings.ContentAlreadyWritten);
            }
            MimeWriteState mimeWriteState = this.state;

            switch (mimeWriteState)
            {
            case MimeWriteState.Initial:
            case MimeWriteState.Complete:
                break;

            default:
                switch (mimeWriteState)
                {
                case MimeWriteState.PartContent:
                case MimeWriteState.EndPart:
                    break;

                default:
                    return(new MimeWriter(this.GetRawContentWriteStream())
                    {
                        embeddedDepth = this.embeddedDepth + 1
                    });
                }
                break;
            }
            throw new InvalidOperationException(Strings.CannotWritePartContentNow);
        }
Ejemplo n.º 5
0
        public void EndGroup()
        {
            this.AssertOpen();
            MimeWriteState mimeWriteState = this.state;

            if (mimeWriteState != MimeWriteState.GroupRecipients)
            {
                throw new InvalidOperationException(Strings.CannotWriteGroupEndHere);
            }
            this.state = MimeWriteState.Recipients;
        }
Ejemplo n.º 6
0
 private void WriteRecipient(MimeRecipient recipient)
 {
     if (lastHeader == null || !(lastHeader is AddressHeader))
         throw new System.InvalidOperationException(Resources.Strings.CannotWriteRecipientsHere);
     MimeNode mimeNode;
     switch (state) {
         case MimeWriteState.Complete:
         case MimeWriteState.StartPart:
         case MimeWriteState.PartContent:
         case MimeWriteState.EndPart:
             throw new System.InvalidOperationException(Resources.Strings.CannotWriteRecipientsHere);
         case MimeWriteState.GroupRecipients:
             mimeNode = lastHeader.LastChild;
             break;
         default:
             state = MimeWriteState.Recipients;
             mimeNode = lastHeader;
             break;
     }
     mimeNode.InternalAppendChild(recipient);
 }
Ejemplo n.º 7
0
 private void WriteParameter(MimeParameter parameter)
 {
     if (lastHeader == null || !(lastHeader is ComplexHeader))
         throw new System.InvalidOperationException(Resources.Strings.CannotWriteParametersOnThisHeader);
     switch (state) {
         case MimeWriteState.Complete:
         case MimeWriteState.StartPart:
         case MimeWriteState.Recipients:
         case MimeWriteState.PartContent:
         case MimeWriteState.EndPart:
             throw new System.InvalidOperationException(Resources.Strings.CannotWriteParametersHere);
         default:
             state = MimeWriteState.Parameters;
             var contentTypeHeader = lastHeader as ContentTypeHeader;
             if (contentTypeHeader != null && contentTypeHeader.IsMultipart && parameter.Name == "boundary") {
                 var str = parameter.Value;
                 if (str.Length == 0)
                     throw new System.ArgumentException(Resources.Strings.CannotWriteEmptyOrNullBoundary);
                 currentPart.Boundary = Internal.ByteString.StringToBytes(str, false);
             }
             lastHeader.InternalAppendChild(parameter);
             break;
     }
 }
Ejemplo n.º 8
0
 private void WriteMimeVersion()
 {
     foundMimeVersion = true;
     this.QueueWrite(MimeString.MimeVersion, 0, MimeString.MimeVersion.Length);
     state = MimeWriteState.Headers;
 }
Ejemplo n.º 9
0
 private void WriteHeader(Header header)
 {
     switch (state) {
         case MimeWriteState.Initial:
         case MimeWriteState.Complete:
         case MimeWriteState.PartContent:
         case MimeWriteState.EndPart:
             throw new System.InvalidOperationException(Resources.Strings.CannotWriteHeadersHere);
         default:
             state = MimeWriteState.Headers;
             this.FlushHeader();
             lastHeader = header;
             break;
     }
 }
Ejemplo n.º 10
0
 private void StartGroup(MimeGroup group)
 {
     switch (state) {
         case MimeWriteState.Complete:
         case MimeWriteState.StartPart:
         case MimeWriteState.PartContent:
         case MimeWriteState.EndPart:
             throw new System.InvalidOperationException(Resources.Strings.CannotWriteGroupStartHere);
         default:
             if (lastHeader == null || !(lastHeader is AddressHeader))
                 throw new System.InvalidOperationException(Resources.Strings.CannotWriteGroupStartHere);
             state = MimeWriteState.GroupRecipients;
             lastHeader.InternalAppendChild(@group);
             break;
     }
 }
Ejemplo n.º 11
0
 protected virtual void Dispose(bool disposing)
 {
     if (data == null)
         return;
     try {
         if (!disposing)
             return;
         while (partDepth != 0)
             this.EndPart();
         this.FlushWriteQueue();
         if (lineTermination == LineTerminationState.CRLF)
             return;
         if (lineTermination == LineTerminationState.CR)
             data.Write(MimeString.CrLf, 1, 1);
         else
             data.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
         lineTermination = LineTerminationState.CRLF;
     } finally {
         if (disposing) {
             if (encodedPartContent != null)
                 encodedPartContent.Dispose();
             if (partContent != null)
                 partContent.Dispose();
             data.Dispose();
         }
         state = MimeWriteState.Complete;
         encodedPartContent = null;
         partContent = null;
         data = null;
     }
 }
Ejemplo n.º 12
0
 public void StartPart()
 {
     this.AssertOpen();
     switch (state) {
         case MimeWriteState.Complete:
         case MimeWriteState.PartContent:
             throw new System.InvalidOperationException(Resources.Strings.CannotStartPartHere);
         default:
             if (partDepth != 0) {
                 this.FlushHeader();
                 if (!currentPart.IsMultipart)
                     throw new System.InvalidOperationException(Resources.Strings.NonMultiPartPartsCannotHaveChildren);
                 if (!foundMimeVersion && forceMime && partDepth == 1)
                     this.WriteMimeVersion();
                 this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
                 this.WriteBoundary(currentPart.Boundary, false);
             }
             var part = new PartData();
             this.PushPart(ref part);
             state = MimeWriteState.StartPart;
             contentWritten = false;
             contentTransferEncoding = ContentTransferEncoding.SevenBit;
             break;
     }
 }
Ejemplo n.º 13
0
 public System.IO.Stream GetRawContentWriteStream()
 {
     this.AssertOpen();
     if (contentWritten)
         throw new System.InvalidOperationException(Resources.Strings.ContentAlreadyWritten);
     switch (state) {
         case MimeWriteState.Initial:
         case MimeWriteState.Complete:
         case MimeWriteState.EndPart:
             throw new System.InvalidOperationException(Resources.Strings.CannotWritePartContentNow);
         case MimeWriteState.StartPart:
         case MimeWriteState.Headers:
         case MimeWriteState.Parameters:
         case MimeWriteState.Recipients:
         case MimeWriteState.GroupRecipients:
             this.FlushHeader();
             if (!foundMimeVersion) {
                 if (forceMime && partDepth == 1)
                     this.WriteMimeVersion();
                 else
                     currentPart.IsMultipart = false;
             }
             if (MimeWriteState.StartPart != state)
                 this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
             break;
         case MimeWriteState.PartContent:
             return partContent;
     }
     if (currentPart.IsMultipart)
         throw new System.InvalidOperationException(Resources.Strings.MultipartCannotContainContent);
     state = MimeWriteState.PartContent;
     partContent = new WriterContentStream(this);
     return partContent;
 }
Ejemplo n.º 14
0
 public void EndPart()
 {
     this.AssertOpen();
     switch (state) {
         case MimeWriteState.Initial:
         case MimeWriteState.Complete:
             throw new System.InvalidOperationException(Resources.Strings.CannotEndPartHere);
         case MimeWriteState.StartPart:
         case MimeWriteState.Headers:
         case MimeWriteState.Parameters:
         case MimeWriteState.Recipients:
         case MimeWriteState.GroupRecipients:
             this.FlushHeader();
             if (!foundMimeVersion) {
                 if (forceMime && partDepth == 1)
                     this.WriteMimeVersion();
                 else
                     currentPart.IsMultipart = false;
             }
             this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
             break;
         case MimeWriteState.PartContent:
             if (encodedPartContent != null) {
                 encodedPartContent.Dispose();
                 encodedPartContent = null;
             }
             if (partContent != null) {
                 partContent.Dispose();
                 partContent = null;
             }
             contentWritten = true;
             break;
     }
     state = MimeWriteState.EndPart;
     if (currentPart.IsMultipart) {
         this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
         this.WriteBoundary(currentPart.Boundary, true);
     }
     this.PopPart();
     if (partDepth != 0)
         return;
     state = MimeWriteState.Complete;
 }
Ejemplo n.º 15
0
 public void EndGroup()
 {
     this.AssertOpen();
     if (state != MimeWriteState.GroupRecipients)
         throw new System.InvalidOperationException(Resources.Strings.CannotWriteGroupEndHere);
     state = MimeWriteState.Recipients;
 }