Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions bazel/external/quiche.BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Transformations to QUICHE tarball:
# - Move subtree under quiche/ base dir, for clarity in #include statements.
# - Rewrite include directives for platform/impl files.

src_files = glob(["**/*.h", "**/*.cc"])

genrule(
name = "quiche_files",
srcs = src_files,
outs = ["quiche/" + f for f in src_files],
cmd = "\n".join(
["sed -e '/^#include/ s|net/http2/platform/impl/|extensions/filters/datagram/quiche/platform/|' $(location %s) > $(location :%s)" % (f, "quiche/" + f) for f in src_files],
),
visibility = ["//visibility:private"],
)

cc_library(
name = "http2_platform",
hdrs = [
"quiche/http2/platform/api/http2_arraysize.h",
"quiche/http2/platform/api/http2_bug_tracker.h",
"quiche/http2/platform/api/http2_containers.h",
"quiche/http2/platform/api/http2_estimate_memory_usage.h",
"quiche/http2/platform/api/http2_export.h",
"quiche/http2/platform/api/http2_flags.h",
"quiche/http2/platform/api/http2_flag_utils.h",
"quiche/http2/platform/api/http2_macros.h",
"quiche/http2/platform/api/http2_mock_log.h",
"quiche/http2/platform/api/http2_optional.h",
"quiche/http2/platform/api/http2_ptr_util.h",
"quiche/http2/platform/api/http2_reconstruct_object.h",
"quiche/http2/platform/api/http2_string.h",
"quiche/http2/platform/api/http2_string_piece.h",
"quiche/http2/platform/api/http2_string_utils.h",
"quiche/http2/platform/api/http2_test_helpers.h",
],
visibility = ["//visibility:public"],
deps = [
"@envoy//source/extensions/filters/datagram/quiche/platform:http2_platform_impl_lib",
],
)
15 changes: 14 additions & 1 deletion bazel/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ def _repository_impl(name, **kwargs):
http_archive(
name = name,
urls = location["urls"],
sha256 = location["sha256"],
# Hack: make checksum optional, to accomodate QUICHE.
# DO NOT SUBMIT, this is just for prototyping.
sha256 = location.get("sha256", None),
strip_prefix = location.get("strip_prefix", ""),
**kwargs
)
Expand Down Expand Up @@ -297,6 +299,7 @@ def envoy_dependencies(path = "@envoy_deps//", skip_targets = []):
_com_github_tencent_rapidjson()
_com_google_googletest()
_com_google_protobuf()
_com_google_quiche()

# Used for bundling gcovr into a relocatable .par file.
_repository_impl("subpar")
Expand Down Expand Up @@ -539,6 +542,16 @@ def _com_google_protobuf():
actual = "@com_google_protobuf//util/python:python_headers",
)

def _com_google_quiche():
_repository_impl(
name = "com_google_quiche",
build_file = "@envoy//bazel/external:quiche.BUILD",
)
native.bind(
name = "quiche_http2_platform",
actual = "@com_google_quiche//:http2_platform",
)

def _com_github_grpc_grpc():
_repository_impl("com_github_grpc_grpc")

Expand Down
5 changes: 5 additions & 0 deletions bazel/repository_locations.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -195,4 +195,9 @@ REPOSITORY_LOCATIONS = dict(
strip_prefix = "subpar-1.3.0",
urls = ["https://github.com/google/subpar/archive/1.3.0.tar.gz"],
),
com_google_quiche = dict(
# TODO: add sha256 sum
# Version from 2018-12-20
urls = ["https://quiche.googlesource.com/quiche/+archive/15fb5630803634b1988b77d876212fad71f7a2c3.tar.gz"],
),
)
16 changes: 16 additions & 0 deletions source/extensions/filters/datagram/quiche/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
licenses(["notice"]) # Apache 2

load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_library",
"envoy_package",
)

envoy_package()

envoy_cc_library(
name = "dummy_lib",
srcs = ["dummy.cc"],
hdrs = ["dummy.h"],
external_deps = ["quiche_http2_platform"],
)
17 changes: 17 additions & 0 deletions source/extensions/filters/datagram/quiche/dummy.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "extensions/filters/datagram/quiche/dummy.h"

using http2::Http2String;

namespace Envoy {
namespace Extensions {
namespace DatagramFilters {
namespace Quiche {

Http2String moreCowbell(const Http2String& s) {
return s + " cowbell";
}

} // namespace Quiche
} // namespace DatagramFilters
} // namespace Extensions
} // namespace Envoy
15 changes: 15 additions & 0 deletions source/extensions/filters/datagram/quiche/dummy.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#pragma once

#include "quiche/http2/platform/api/http2_string.h"

namespace Envoy {
namespace Extensions {
namespace DatagramFilters {
namespace Quiche {

http2::Http2String moreCowbell(const http2::Http2String& s);

} // namespace Quiche
} // namespace DatagramFilters
} // namespace Extensions
} // namespace Envoy
32 changes: 32 additions & 0 deletions source/extensions/filters/datagram/quiche/platform/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
licenses(["notice"]) # Apache 2

load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_library",
"envoy_package",
)

envoy_package()

envoy_cc_library(
name = "http2_platform_impl_lib",
hdrs = [
"http2_arraysize_impl.h",
"http2_bug_tracker_impl.h",
"http2_containers_impl.h",
"http2_estimate_memory_usage_impl.h",
"http2_export_impl.h",
"http2_flag_utils_impl.h",
"http2_flags_impl.h",
"http2_macros_impl.h",
"http2_mock_log_impl.h",
"http2_optional_impl.h",
"http2_ptr_util_impl.h",
"http2_reconstruct_object_impl.h",
"http2_string_impl.h",
"http2_string_piece_impl.h",
"http2_string_utils_impl.h",
"http2_test_helpers_impl.h",
],
visibility = ["//visibility:public"],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#define HTTP2_ARRAYSIZE_IMPL(x) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define HTTP2_BUG_IMPL 0
#define HTTP2_BUG_IF_IMPL 0
#define FLAGS_http2_always_log_bugs_for_tests_IMPL 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#pragma once

namespace http2 {

template <typename T>
class Http2DequeImpl {};

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pragma once

namespace http2 {

template <class T>
size_t Http2EstimateMemoryUsageImpl(const T& object) {
return 0;
}

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

#define HTTP2_EXPORT
#define HTTP2_EXPORT_PRIVATE
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#define HTTP2_RELOADABLE_FLAG_COUNT_IMPL(flag) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

#define GetHttp2ReloadableFlagImpl(flag) 0
#define SetHttp2ReloadableFlagImpl(flag, value) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define HTTP2_FALLTHROUGH_IMPL 0
#define HTTP2_UNREACHABLE_IMPL() 0
#define HTTP2_DIE_IF_NULL_IMPL(ptr) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define CREATE_HTTP2_MOCK_LOG_IMPL(log) 0
#define EXPECT_HTTP2_LOG_CALL_IMPL(log) 0
#define EXPECT_HTTP2_LOG_CALL_CONTAINS_IMPL(log, level, content) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#pragma once

namespace http2 {

template <typename T>
class Http2OptionalImpl {};

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pragma once

namespace http2 {

template <typename T, typename... Args>
std::unique_ptr<T> Http2MakeUniqueImpl(Args&&... args) {
return nullptr;
}

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

namespace http2 {
namespace test {

void MarkMemoryUninitialized(void* ptr, size_t num_bytes) {}
void MarkMemoryUninitialized(void* ptr, size_t num_bytes, Http2Random* rng) {}

template <class T>
void MarkObjectUninitialized(T* ptr) {}
template <class T>
void MarkObjectUninitialized(T* ptr, Http2Random* rng) {}

template <class T, size_t N>
void MarkArrayUninitialized(T (&array)[N]) {}
template <class T, size_t N>
void MarkArrayUninitialized(T (&array)[N], Http2Random* rng) {}

template <class T, class... Args>
void Http2ReconstructObjectImpl(T* ptr, Http2Random* rng, Args&&... args) {}
template <class T>
void Http2DefaultReconstructObjectImpl(T* ptr, Http2Random* rng) {}

} // namespace test
} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#pragma once

#include <string>

namespace http2 {

using Http2StringImpl = std::string;

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once

namespace http2 {

class Http2StringPieceImpl {};

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#pragma once

namespace http2 {

template <typename... Args>
inline Http2String Http2StrCatImpl(const Args&... args) {
return Http2String();
}

template <typename... Args>
inline void Http2StrAppendImpl(Http2String* output, const Args&... args) {}

template <typename... Args>
inline Http2String Http2StringPrintfImpl(const Args&... args) {
return Http2String();
}

inline Http2String Http2HexEncodeImpl(const void* bytes, size_t size) {
return Http2String();
}

inline Http2String Http2HexDecodeImpl(Http2StringPiece data) {
return Http2String();
}

inline Http2String Http2HexDumpImpl(Http2StringPiece data) {
return Http2String();
}

inline Http2String Http2HexEscapeImpl(Http2StringPiece data) {
return Http2String();
}

template <typename Number>
inline Http2String Http2HexImpl(Number number) {
return Http2String();
}

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#pragma once
23 changes: 23 additions & 0 deletions test/extensions/filters/datagram/quiche/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
licenses(["notice"]) # Apache 2

load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_fuzz_test",
"envoy_cc_test",
"envoy_cc_test_binary",
"envoy_cc_test_library",
"envoy_package",
"envoy_proto_library",
)

envoy_package()

envoy_cc_test(
name = "dummy_test",
srcs = ["dummy_test.cc"],
external_deps = ["quiche_http2_platform"],
deps = [
"//source/extensions/filters/datagram/quiche:dummy_lib",
"//test/test_common:utility_lib",
],
)
19 changes: 19 additions & 0 deletions test/extensions/filters/datagram/quiche/dummy_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include "extensions/filters/datagram/quiche/dummy.h"

#include "gtest/gtest.h"
#include "quiche/http2/platform/api/http2_string.h"

namespace Envoy {
namespace Extensions {
namespace DatagramFilters {
namespace Quiche {

TEST(DummyTest, Dummy) {
http2::Http2String foo = "bar";
EXPECT_EQ("bar cowbell", moreCowbell(foo));
}

} // namespace Quiche
} // namespace DatagramFilters
} // namespace Extensions
} // namespace Envoy