/*
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");
}