[
https://issues.apache.org/jira/browse/TS-4553?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15360182#comment-15360182
]
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_r69378232
--- Diff: plugins/experimental/brotli_transform/brotli_transform.cc ---
@@ -0,0 +1,167 @@
+/**
+ 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/GzipInflateTransformation.h>
+#include <atscppapi/PluginInit.h>
+#include <atscppapi/Logger.h>
+#include <brotli/enc/encode.h>
+
+using namespace atscppapi;
+using namespace atscppapi::transformations;
+using namespace std;
+
+#define TAG "brotli_transformation"
+
+namespace
+{
+unsigned int BROTLI_QUALITY = 9;
+}
+
+class BrotliVecOut : public brotli::BrotliOut
+{
+public:
+ BrotliVecOut(vector<char> &out) : outVec(out) {}
+ bool
+ Write(const void *buf, size_t n)
+ {
+ outVec.insert(outVec.end(), (char *)buf, (char *)buf + n);
+ return true;
+ }
+
+private:
+ vector<char> &outVec;
+};
+
+class BrotliTransformationPlugin : public TransformationPlugin
+{
+public:
+ BrotliTransformationPlugin(Transaction &transaction) :
TransformationPlugin(transaction, RESPONSE_TRANSFORMATION)
+ {
+ registerHook(HOOK_SEND_RESPONSE_HEADERS);
+ }
+
+ void
+ handleSendResponseHeaders(Transaction &transaction)
+ {
+ if (brotliCompressed_) {
+ TS_DEBUG(TAG, "Set response content-encoding to br.");
+ transaction.getClientResponse().getHeaders().set("Content-Encoding",
"br");
+ }
+ transaction.resume();
+ }
+
+ void
+ consume(const string &data)
+ {
+ buffer_.append(data);
+ }
+
+ void
+ handleInputComplete()
+ {
+ TS_DEBUG(TAG, "BrotliTransformationPlugin handle Input Complete.");
--- End diff --
You must stream the brotli encoding, in this example you buffer all of the
content. This isn't really an option for html
> 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)