bool SetHeadersAsync (SimpleAsyncResult result, bool setInternalLength)
{
if (headersSent)
return false;
bool webdav = false;
bool writestream = false;
switch (request.Method) {
case "PROPFIND":
case "PROPPATCH":
case "MKCOL":
case "COPY":
case "MOVE":
case "LOCK":
case "UNLOCK":
webdav = true;
break;
case "POST":
case "PUT":
writestream = true;
break;
}
if (setInternalLength && writestream && writeBuffer != null)
request.InternalContentLength = writeBuffer.Length;
if (!(sendChunked || request.ContentLength > -1 || !writestream || webdav))
return false;
headersSent = true;
headers = request.GetRequestHeaders ();
var innerResult = cnc.BeginWrite (request, headers, 0, headers.Length, r => {
try {
cnc.EndWrite (request, true, r);
if (!initRead) {
initRead = true;
WebConnection.InitRead (cnc);
}
var cl = request.ContentLength;
if (!sendChunked && cl == 0)
requestWritten = true;
result.SetCompleted (false);
} catch (WebException e) {
result.SetCompleted (false, e);
} catch (Exception e) {
result.SetCompleted (false, new WebException ("Error writing headers", e, WebExceptionStatus.SendFailure));
}
}, null);
return innerResult != null;
}