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); }
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); }
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; }
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); }
public void EndGroup() { this.AssertOpen(); MimeWriteState mimeWriteState = this.state; if (mimeWriteState != MimeWriteState.GroupRecipients) { throw new InvalidOperationException(Strings.CannotWriteGroupEndHere); } this.state = MimeWriteState.Recipients; }
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); }
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; } }
private void WriteMimeVersion() { foundMimeVersion = true; this.QueueWrite(MimeString.MimeVersion, 0, MimeString.MimeVersion.Length); state = MimeWriteState.Headers; }
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; } }
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; } }
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; } }
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; } }
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; }
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; }
public void EndGroup() { this.AssertOpen(); if (state != MimeWriteState.GroupRecipients) throw new System.InvalidOperationException(Resources.Strings.CannotWriteGroupEndHere); state = MimeWriteState.Recipients; }