[ 
https://issues.apache.org/jira/browse/TS-4553?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15358411#comment-15358411
 ] 

ASF GitHub Bot commented on TS-4553:
------------------------------------

Github user bgaff commented on a diff in the pull request:

    https://github.com/apache/trafficserver/pull/776#discussion_r69248581
  
    --- Diff: plugins/experimental/brotli_transform/brotli_transform.cc ---
    @@ -0,0 +1,248 @@
    +/**
    +  Licensed to the Apache Software Foundation (ASF) under one
    +  or more contributor license agreements.  See the NOTICE file
    +  distributed with this work for additional information
    +  regarding copyright ownership.  The ASF licenses this file
    +  to you under the Apache License, Version 2.0 (the
    +  "License"); you may not use this file except in compliance
    +  with the License.  You may obtain a copy of the License at
    +
    +      http://www.apache.org/licenses/LICENSE-2.0
    +
    +  Unless required by applicable law or agreed to in writing, software
    +  distributed under the License is distributed on an "AS IS" BASIS,
    +  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +  See the License for the specific language governing permissions and
    +  limitations under the License.
    + */
    +
    +#include <iostream>
    +#include <vector>
    +#include <zlib.h>
    +#include <atscppapi/GlobalPlugin.h>
    +#include <atscppapi/TransformationPlugin.h>
    +#include <atscppapi/PluginInit.h>
    +#include <atscppapi/Logger.h>
    +#include <brotli/enc/encode.h>
    +
    +using namespace atscppapi;
    +using namespace std;
    +
    +#define TAG "brotli_transformation"
    +
    +namespace
    +{
    +const int WINDOW_BITS             = 31; // Always use 31 for gzip.
    +unsigned int INFLATE_SCALE_FACTOR = 6;
    +unsigned int BROTLI_QUALITY       = 9;
    +}
    +
    +class GzipInflateTransformationState : noncopyable
    +{
    +public:
    +  z_stream z_stream_;
    +  bool z_stream_initialized_;
    +  int64_t bytes_produced_;
    +  TransformationPlugin::Type transformation_type_;
    +
    +  GzipInflateTransformationState(TransformationPlugin::Type type)
    +    : z_stream_initialized_(false), bytes_produced_(0), 
transformation_type_(type)
    +  {
    +    memset(&z_stream_, 0, sizeof(z_stream_));
    +
    +    int err = inflateInit2(&z_stream_, WINDOW_BITS);
    +    if (Z_OK != err) {
    +      TS_ERROR(TAG, "inflateInit2 failed with error code '%d'.", err);
    +    } else {
    +      z_stream_initialized_ = true;
    +    }
    +  };
    +
    +  ~GzipInflateTransformationState()
    +  {
    +    if (z_stream_initialized_) {
    +      int err = inflateEnd(&z_stream_);
    +      if (Z_OK != err && Z_STREAM_END != err) {
    +        TS_ERROR(TAG, "Unable to inflateEnd(), returned error code '%d'", 
err);
    +      }
    +    }
    +  };
    +};
    +
    +class BrotliVecOut : public brotli::BrotliOut
    --- End diff --
    
    There is no need to have an intermediate vector, just create a 
BrotliTransformOut that is constructed with a reference to the transformation 
and then in Write just call Transform.Produce();


> Add Brotli compression support
> ------------------------------
>
>                 Key: TS-4553
>                 URL: https://issues.apache.org/jira/browse/TS-4553
>             Project: Traffic Server
>          Issue Type: Wish
>          Components: Plugins
>            Reporter: David Calavera
>             Fix For: sometime
>
>
> I think it would be very interesting to add support for the Brotli 
> compression format: https://github.com/google/brotli
> Since I didn't see any issue opened and went ahead so people can discuss 
> about it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to