| 1234567891011121314151617181920212223242526272829303132333435363738 |
- namespace Astralis {
- public class Compression : Object, PipelineComponent {
- public async HttpResult process_request (HttpContext http_context, PipelineContext pipeline_context) throws Error {
- var result = yield pipeline_context.next();
- var accept_encoding = http_context.request.headers.get_any_or_default("Accept-Encoding");
- if(accept_encoding != null && accept_encoding.contains("gzip")) {
- return new CompressionResult (result, ZlibCompressorFormat.GZIP)
- .set_header("Content-Encoding", "gzip");
- }
- return result;
- }
- private class CompressionResult : HttpResult {
- private HttpResult inner_result;
- private ZlibCompressorFormat format;
- public CompressionResult(HttpResult result, ZlibCompressorFormat format) {
- base(result.status, result.content_length);
- replace_headers(result.headers);
- this.inner_result = result;
- this.format = format;
- }
- public async override void send_body (AsyncOutput output) throws Error {
- var converter = new ZlibCompressor(format);
- var converter_output = new ConverterAsyncOutput(output, converter);
- yield inner_result.send_body(converter_output);
- }
-
- }
- }
- }
|