Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        private void MimeWriterCloseCallbackHandler(IAsyncResult result)
        {
            MimePartContext context = (MimePartContext)result.AsyncState !;

            ((MimeWriter)context._writer).EndClose(result);
            Complete(result, null);
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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);
                }
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 10
0
 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;
 }
Esempio n. 12
0
        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);
            }
        }
Esempio n. 14
0
        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);
            }
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
            }
        }
Esempio n. 19
0
        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;
 }