/* RequestSubmitDone - Handle submit done callback. This is our submit done handler, called by the underlying connection code when a stream is available for our use. We save the stream for later use and signal the wait event. We also handle the continuation/termination of a BeginGetRequestStream, by saving out the result and calling its callback if needed. Input: SubmitStream - The stream we may write on. Status - The status of the submission. Returns: Nothing. */ internal void SetRequestSubmitDone(ConnectStream submitStream) { GlobalLog.Enter("HttpWebRequest#" + ValidationHelper.HashString(this) + "::SetRequestSubmitDone", ValidationHelper.HashString(submitStream)); if (_Abort) { try { submitStream.SetAbortState(); submitStream.CloseInternal(true); } catch { } GlobalLog.Leave("HttpWebRequest#" + ValidationHelper.HashString(this) + "::SetRequestSubmitDone", "ABORT"); return; } //This state should be set before invoking the callback //otherwise extra request will be issued without any //particular reason. _RequestSubmitted = true; _SubmitWriteStream = submitStream; // Finish the submission of the request. If the asyncResult now // isn't null, mark it as completed. WebExceptionStatus Error = EndSubmitRequest(); if (Error != WebExceptionStatus.Pending) { // check for failure if (Error != WebExceptionStatus.Success) { // OK, something happened on the request, close down stream submitStream.SetAbortState(); submitStream.CloseInternal(true); } // wake up any pending waits to write, since this is an error if ( _WriteEvent != null ) { GlobalLog.Print("HttpWebRequest#" + ValidationHelper.HashString(this) + "::SetRequestSubmitDone() calling _WriteEvent.Set()"); _WriteEvent.Set(); } } // != Pending if (_Abort) { try { submitStream.SetAbortState(); submitStream.CloseInternal(true); } catch { } } GlobalLog.Leave("HttpWebRequest#" + ValidationHelper.HashString(this) + "::SetRequestSubmitDone"); }