int readBufferOffset;
int readBufferSize;
int stream_length; // -1 when CL not present
- int contentLength;
- int totalRead;
+ long contentLength;
+ long totalRead;
internal long totalWritten;
bool nextReadCalled;
int pendingReads;
ReadAll ();
}
} catch {
- contentLength = Int32.MaxValue;
+ contentLength = Int64.MaxValue;
}
} else {
- contentLength = Int32.MaxValue;
+ contentLength = Int64.MaxValue;
}
// Negative numbers?
internal void ForceCompletion ()
{
if (!nextReadCalled) {
- if (contentLength == Int32.MaxValue)
+ if (contentLength == Int64.MaxValue)
contentLength = 0;
nextReadCalled = true;
cnc.NextRead ();
int diff = readBufferSize - readBufferOffset;
int new_size;
- if (contentLength == Int32.MaxValue) {
+ if (contentLength == Int64.MaxValue) {
MemoryStream ms = new MemoryStream ();
byte [] buffer = null;
if (readBuffer != null && diff > 0) {
new_size = (int) ms.Length;
contentLength = new_size;
} else {
- new_size = contentLength - totalRead;
+ new_size = (int) (contentLength - totalRead);
b = new byte [new_size];
if (readBuffer != null && diff > 0) {
if (diff > new_size)
if (cb != null)
cb = cb_wrapper;
- if (contentLength != Int32.MaxValue && contentLength - totalRead < size)
- size = contentLength - totalRead;
+ if (contentLength != Int64.MaxValue && contentLength - totalRead < size)
+ size = (int)(contentLength - totalRead);
if (!read_eof) {
result.InnerAsyncResult = cnc.BeginRead (request, buffer, offset, size, cb, result);
result.SetCompleted (false, 0);
if (!initRead) {
initRead = true;
- WebConnection.InitRead (cnc);
+ cnc.InitRead ();
}
} catch (Exception e) {
KillBuffer ();
AsyncCallback cb, object state)
{
if (request.Aborted)
- throw new WebException ("The request was canceled.", null, WebExceptionStatus.RequestCanceled);
+ throw new WebException ("The request was canceled.", WebExceptionStatus.RequestCanceled);
if (isRead)
throw new NotSupportedException ("this stream does not allow writing");
cnc.EndWrite (request, true, r);
if (!initRead) {
initRead = true;
- WebConnection.InitRead (cnc);
+ cnc.InitRead ();
}
var cl = request.ContentLength;
if (!sendChunked && cl == 0)
} catch (WebException e) {
result.SetCompleted (false, e);
} catch (Exception e) {
- result.SetCompleted (false, new WebException ("Error writing headers", e, WebExceptionStatus.SendFailure));
+ result.SetCompleted (false, new WebException ("Error writing headers", WebExceptionStatus.SendFailure, WebExceptionInternalStatus.RequestFatal, e));
}
}, null);
SetHeadersAsync (true, inner => {
if (inner.GotException) {
- result.SetCompleted (inner.CompletedSynchronously, inner.Exception);
+ result.SetCompleted (inner.CompletedSynchronouslyPeek, inner.Exception);
return;
}
if (cnc.Data.StatusCode != 0 && cnc.Data.StatusCode != 100) {
- result.SetCompleted (inner.CompletedSynchronously);
+ result.SetCompleted (inner.CompletedSynchronouslyPeek);
return;
}
if (!initRead) {
initRead = true;
- WebConnection.InitRead (cnc);
+ cnc.InitRead ();
}
if (length == 0) {
complete_request_written = true;
- result.SetCompleted (inner.CompletedSynchronously);
+ result.SetCompleted (inner.CompletedSynchronouslyPeek);
return;
}
complete_request_written = true;
if (!initRead) {
initRead = true;
- WebConnection.InitRead (cnc);
+ cnc.InitRead ();
}
return;
}
IOException io = new IOException ("Cannot close the stream until all bytes are written");
nextReadCalled = true;
cnc.Close (true);
- throw new WebException ("Request was cancelled.", io, WebExceptionStatus.RequestCanceled);
+ throw new WebException ("Request was cancelled.", WebExceptionStatus.RequestCanceled, WebExceptionInternalStatus.RequestFatal, io);
}
// Commented out the next line to fix xamarin bug #1512