private void ContentStreamCallbackHandler(IAsyncResult result) { MimePartContext context = (MimePartContext)result.AsyncState !; context._outputStream = context._writer.EndGetContentStream(result); context._writer = new MimeWriter(context._outputStream !, ContentType.Boundary !); if (context._partsEnumerator.MoveNext()) { MimeBasePart part = (MimeBasePart)context._partsEnumerator.Current; _mimePartSentCallback = new AsyncCallback(MimePartSentCallback); IAsyncResult sendResult = part.BeginSend(context._writer, _mimePartSentCallback, _allowUnicode, context); if (sendResult.CompletedSynchronously) { MimePartSentCallbackHandler(sendResult); } return; } else { IAsyncResult closeResult = ((MimeWriter)context._writer).BeginClose(new AsyncCallback(MimeWriterCloseCallback), context); if (closeResult.CompletedSynchronously) { MimeWriterCloseCallbackHandler(closeResult); } } }
internal void Complete(IAsyncResult result, Exception?e) { //if we already completed and we got called again, //it mean's that there was an exception in the callback and we //should just rethrow it. MimePartContext context = (MimePartContext)result.AsyncState !; if (context._completed) { ExceptionDispatchInfo.Throw(e !); } try { context._outputStream !.Close(); } catch (Exception ex) { if (e == null) { e = ex; } } context._completed = true; context._result.InvokeCallback(e); }
private void MimeWriterCloseCallbackHandler(IAsyncResult result) { MimePartContext context = (MimePartContext)result.AsyncState !; ((MimeWriter)context._writer).EndClose(result); Complete(result, null); }
private void MimePartSentCallbackHandler(IAsyncResult result) { MimePartContext context = (MimePartContext)result.AsyncState !; MimeBasePart part = (MimeBasePart)context._partsEnumerator.Current; part.EndSend(result); if (context._partsEnumerator.MoveNext()) { part = (MimeBasePart)context._partsEnumerator.Current; IAsyncResult sendResult = part.BeginSend(context._writer, _mimePartSentCallback !, _allowUnicode, context); if (sendResult.CompletedSynchronously) { MimePartSentCallbackHandler(sendResult); } return; } else { IAsyncResult closeResult = ((MimeWriter)context._writer).BeginClose(new AsyncCallback(MimeWriterCloseCallback), context); if (closeResult.CompletedSynchronously) { MimeWriterCloseCallbackHandler(closeResult); } } }
private void ContentStreamCallbackHandler(IAsyncResult result) { MimePartContext asyncState = (MimePartContext)result.AsyncState; asyncState.outputStream = asyncState.writer.EndGetContentStream(result); asyncState.writer = new MimeWriter(asyncState.outputStream, base.ContentType.Boundary); if (asyncState.partsEnumerator.MoveNext()) { MimeBasePart current = asyncState.partsEnumerator.Current; this.mimePartSentCallback = new AsyncCallback(this.MimePartSentCallback); IAsyncResult result2 = current.BeginSend(asyncState.writer, this.mimePartSentCallback, asyncState); if (result2.CompletedSynchronously) { this.MimePartSentCallbackHandler(result2); } } else { IAsyncResult result3 = ((MimeWriter)asyncState.writer).BeginClose(new AsyncCallback(this.MimeWriterCloseCallback), asyncState); if (result3.CompletedSynchronously) { this.MimeWriterCloseCallbackHandler(result3); } } }
private void MimeWriterCloseCallbackHandler(IAsyncResult result) { MimePartContext asyncState = (MimePartContext)result.AsyncState; ((MimeWriter)asyncState.writer).EndClose(result); this.Complete(result, null); }
internal void Complete(IAsyncResult result, Exception e) { MimePartContext asyncState = (MimePartContext)result.AsyncState; if (asyncState.completed) { throw e; } try { if (asyncState.outputStream != null) { asyncState.outputStream.Close(); } } catch (Exception exception) { if (e == null) { e = exception; } } asyncState.completed = true; asyncState.result.InvokeCallback(e); }
internal void WriteCallbackHandler(IAsyncResult result) { MimePartContext context = (MimePartContext)result.AsyncState; context.outputStream.EndWrite(result); IAsyncResult readResult = Stream.BeginRead(context.buffer, 0, context.buffer.Length, readCallback, context); if (readResult.CompletedSynchronously) { ReadCallbackHandler(readResult); } }
internal void WriteCallbackHandler(IAsyncResult result) { MimePartContext asyncState = (MimePartContext)result.AsyncState; asyncState.outputStream.EndWrite(result); IAsyncResult result2 = this.Stream.BeginRead(asyncState.buffer, 0, asyncState.buffer.Length, this.readCallback, asyncState); if (result2.CompletedSynchronously) { this.ReadCallbackHandler(result2); } }
internal override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, bool allowUnicode, object state) { _allowUnicode = allowUnicode; base.PrepareHeaders(allowUnicode); writer.WriteHeaders(base.Headers, allowUnicode); var result = new MimeBasePart.MimePartAsyncResult(this, state, callback); var context = new MimePartContext(writer, result, Parts.GetEnumerator()); var result2 = writer.BeginGetContentStream(new AsyncCallback(ContentStreamCallback), context); if (result2.CompletedSynchronously) ContentStreamCallbackHandler(result2); return result; }
internal override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, object state) { writer.WriteHeaders(base.Headers); MimeBasePart.MimePartAsyncResult result = new MimeBasePart.MimePartAsyncResult(this, state, callback); MimePartContext context = new MimePartContext(writer, result, this.Parts.GetEnumerator()); IAsyncResult result2 = writer.BeginGetContentStream(new AsyncCallback(this.ContentStreamCallback), context); if (result2.CompletedSynchronously) { this.ContentStreamCallbackHandler(result2); } return result; }
internal override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, object state) { writer.WriteHeaders(base.Headers); MimeBasePart.MimePartAsyncResult result = new MimeBasePart.MimePartAsyncResult(this, state, callback); MimePartContext context = new MimePartContext(writer, result, this.Parts.GetEnumerator()); IAsyncResult result2 = writer.BeginGetContentStream(new AsyncCallback(this.ContentStreamCallback), context); if (result2.CompletedSynchronously) { this.ContentStreamCallbackHandler(result2); } return(result); }
internal void ContentStreamCallbackHandler(IAsyncResult result) { MimePartContext asyncState = (MimePartContext)result.AsyncState; System.IO.Stream stream = asyncState.writer.EndGetContentStream(result); asyncState.outputStream = this.GetEncodedStream(stream); this.readCallback = new AsyncCallback(this.ReadCallback); this.writeCallback = new AsyncCallback(this.WriteCallback); IAsyncResult result2 = this.Stream.BeginRead(asyncState.buffer, 0, asyncState.buffer.Length, this.readCallback, asyncState); if (result2.CompletedSynchronously) { this.ReadCallbackHandler(result2); } }
internal void ContentStreamCallbackHandler(IAsyncResult result) { MimePartContext context = (MimePartContext)result.AsyncState; Stream outputStream = context.writer.EndGetContentStream(result); context.outputStream = GetEncodedStream(outputStream); readCallback = new AsyncCallback(ReadCallback); writeCallback = new AsyncCallback(WriteCallback); IAsyncResult readResult = Stream.BeginRead(context.buffer, 0, context.buffer.Length, readCallback, context); if (readResult.CompletedSynchronously) { ReadCallbackHandler(readResult); } }
internal override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback?callback, bool allowUnicode, object?state) { _allowUnicode = allowUnicode; PrepareHeaders(allowUnicode); writer.WriteHeaders(Headers, allowUnicode); MimePartAsyncResult result = new MimePartAsyncResult(this, state, callback); MimePartContext context = new MimePartContext(writer, result, Parts.GetEnumerator()); IAsyncResult contentResult = writer.BeginGetContentStream(new AsyncCallback(ContentStreamCallback), context); if (contentResult.CompletedSynchronously) { ContentStreamCallbackHandler(contentResult); } return(result); }
internal override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, bool allowUnicode, object state) { PrepareHeaders(allowUnicode); writer.WriteHeaders(Headers, allowUnicode); MimePartAsyncResult result = new MimePartAsyncResult(this, state, callback); MimePartContext context = new MimePartContext(writer, result); ResetStream(); _streamUsedOnce = true; IAsyncResult contentResult = writer.BeginGetContentStream(new AsyncCallback(ContentStreamCallback), context); if (contentResult.CompletedSynchronously) { ContentStreamCallbackHandler(contentResult); } return(result); }
internal void ReadCallbackHandler(IAsyncResult result) { MimePartContext context = (MimePartContext)result.AsyncState; context.bytesLeft = Stream.EndRead(result); if (context.bytesLeft > 0) { IAsyncResult writeResult = context.outputStream.BeginWrite(context.buffer, 0, context.bytesLeft, writeCallback, context); if (writeResult.CompletedSynchronously) { WriteCallbackHandler(writeResult); } } else { Complete(result, null); } }
internal void ReadCallbackHandler(IAsyncResult result) { MimePartContext asyncState = (MimePartContext)result.AsyncState; asyncState.bytesLeft = this.Stream.EndRead(result); if (asyncState.bytesLeft > 0) { IAsyncResult result2 = asyncState.outputStream.BeginWrite(asyncState.buffer, 0, asyncState.bytesLeft, this.writeCallback, asyncState); if (result2.CompletedSynchronously) { this.WriteCallbackHandler(result2); } } else { this.Complete(result, null); } }
private void MimePartSentCallbackHandler(IAsyncResult result) { MimePartContext asyncState = (MimePartContext)result.AsyncState; asyncState.partsEnumerator.Current.EndSend(result); if (asyncState.partsEnumerator.MoveNext()) { IAsyncResult result2 = asyncState.partsEnumerator.Current.BeginSend(asyncState.writer, this.mimePartSentCallback, asyncState); if (result2.CompletedSynchronously) { this.MimePartSentCallbackHandler(result2); } } else { IAsyncResult result3 = ((MimeWriter)asyncState.writer).BeginClose(new AsyncCallback(this.MimeWriterCloseCallback), asyncState); if (result3.CompletedSynchronously) { this.MimeWriterCloseCallbackHandler(result3); } } }
internal override IAsyncResult BeginSend(BaseWriter writer, AsyncCallback callback, bool allowUnicode, object state) { this.allowUnicode = allowUnicode; PrepareHeaders(allowUnicode); writer.WriteHeaders(Headers, allowUnicode); MimePartAsyncResult result = new MimePartAsyncResult(this, state, callback); MimePartContext context = new MimePartContext(writer, result, Parts.GetEnumerator()); IAsyncResult contentResult = writer.BeginGetContentStream(new AsyncCallback(ContentStreamCallback), context); if (contentResult.CompletedSynchronously) { ContentStreamCallbackHandler(contentResult); } return result; }