private static void SetRequestContent()

in sdk/Common/Communication/ServiceClientImpl.cs [240:285]


        private static void SetRequestContent(HttpWebRequest webRequest, 
                                              ServiceRequest serviceRequest,
                                              ClientConfiguration clientConfiguration)
        {
            var data = serviceRequest.BuildRequestContent();

            if (data == null ||
                (serviceRequest.Method != HttpMethod.Put &&
                 serviceRequest.Method != HttpMethod.Post))
            {
                return;
            }

            // Write data to the request stream.
            long userSetContentLength = -1;
            if (serviceRequest.Headers.ContainsKey(HttpHeaders.ContentLength))
                userSetContentLength = long.Parse(serviceRequest.Headers[HttpHeaders.ContentLength]);
            
            if (serviceRequest.UseChunkedEncoding || !data.CanSeek) // when data cannot seek, we have to use chunked encoding as there's no way to set the length
            {
                webRequest.SendChunked = true;
                webRequest.AllowWriteStreamBuffering = false; // when using chunked encoding, the data is likely big and thus not use write buffer;
            }
            else
            {
                long streamLength = data.Length - data.Position;
                webRequest.ContentLength = (userSetContentLength >= 0 &&
                    userSetContentLength <= streamLength) ? userSetContentLength : streamLength;
                if (webRequest.ContentLength > clientConfiguration.DirectWriteStreamThreshold)
                {
                    webRequest.AllowWriteStreamBuffering = false;
                }
            }

            using (var requestStream = webRequest.GetRequestStream())
            {
                if (!webRequest.SendChunked)
                {
                    IoUtils.WriteTo(data, requestStream, webRequest.ContentLength);
                }
                else
                {
                    IoUtils.WriteTo(data, requestStream);
                }
            }
        }