/// <summary> /// Sends headers required to send an entity. /// </summary> /// <param name="response">An HTTP response.</param> /// <param name="compressionType">The compression type that request wants it sent back in.</param> /// <param name="entity"></param> public void SendHeaders(HttpResponseBase response, ResponseCompressionType compressionType, IEntity entity) { if (!(entity.CompressionType == ResponseCompressionType.None || entity.CompressionType == compressionType)) { throw new NotImplementedException("Need to decode in memory, and then stream it"); } HttpResponseHeaderHelper.SetContentEncoding(response, compressionType); //How should data be compressed if (entity.CompressionType == compressionType) { //We have the entity stored in the correct compression format so just stream it HttpResponseHeaderHelper.AppendHeader(response, HttpHeaderContentLength, entity.ContentLength.ToString()); } else if (entity.CompressionType == ResponseCompressionType.None) { switch (compressionType) { case ResponseCompressionType.GZip: response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; case ResponseCompressionType.Deflate: response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; } } response.ContentType = entity.ContentType; }
public void SendHeaders(HttpResponseBase response, ResponseCompressionType compressionType, IEntity entity) { //Data must be in uncompressed format when responding partially if (entity.CompressionType != ResponseCompressionType.None) { //TODO: perhaps we could uncompress object, but for now we don't worry about it throw new Exception("Cannot do a partial response on compressed data"); } HttpResponseHeaderHelper.SetContentEncoding(response, compressionType); switch (compressionType) { case ResponseCompressionType.None: var contentLength = Range.EndRange - Range.StartRange + 1; HttpResponseHeaderHelper.AppendHeader(response, HTTP_HEADER_CONTENT_LENGTH, contentLength.ToString()); break; case ResponseCompressionType.GZip: response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; case ResponseCompressionType.Deflate: response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; } response.ContentType = entity.ContentType; HttpResponseHeaderHelper.AppendHeader(response, HTTP_HEADER_CONTENT_RANGE, BYTES + " " + Range.StartRange + "-" + Range.EndRange + "/" + entity.ContentLength); }
public void SendHeaders(HttpResponseBase response, ResponseCompressionType compressionType, IEntity entity) { //Data must be in uncompressed format when responding partially if (entity.CompressionType != ResponseCompressionType.None) { //TODO: perhaps we could uncompress object, but for now we don't worry about it throw new Exception("Cannot do a partial response on compressed data"); } HttpResponseHeaderHelper.SetContentEncoding(response, compressionType); switch (compressionType) { case ResponseCompressionType.None: var partialContentLength = GetMultipartPartialRequestLength(Ranges, entity.ContentType, entity.ContentLength); HttpResponseHeaderHelper.AppendHeader(response, HttpHeaderContentLength, partialContentLength.ToString()); break; case ResponseCompressionType.GZip: response.BufferOutput = true; response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; case ResponseCompressionType.Deflate: response.BufferOutput = true; response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; } response.ContentType = MultipartContenttype; }
/// <summary> /// Setups the headers required to send a partial response. /// </summary> /// <param name="response">An HTTP response.</param> /// <param name="compressionType">The compression type that request wants it sent back in.</param> /// <param name="entity"></param> public void SendHeaders(HttpResponseBase response, ResponseCompressionType compressionType, IEntity entity) { //Data must be in uncompressed format when responding partially if (entity.CompressionType != ResponseCompressionType.None) { //TODO: perhaps we could uncompress object, but for now we don't worry about it throw new Exception("Cannot do a partial response on compressed data"); } HttpResponseHeaderHelper.SetContentEncoding(response, compressionType); switch (compressionType) { case ResponseCompressionType.None: ByteRangeResponse.SetContentLength(response, entity); break; case ResponseCompressionType.GZip: response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; case ResponseCompressionType.Deflate: response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); //This means that the output stream will be chunked, so we don't have to worry about content length break; } ByteRangeResponse.SetOtherHeaders(response, entity); }